@phenixrts/sdk 2023.0.19-beta.62 → 2023.0.20-beta.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/debug/channels.js +2 -2
- package/dist/debug/full.js +2 -2
- package/dist/debug/groups.js +1 -1
- package/dist/debug/messaging.js +1 -1
- package/dist/debug/publish.js +2 -2
- package/dist/debug.private/channels.js +2 -2
- package/dist/debug.private/full.js +2 -2
- package/dist/debug.private/groups.js +1 -1
- package/dist/debug.private/messaging.js +1 -1
- package/dist/debug.private/publish.js +2 -2
- package/dist/es5.debug.private/channels.js +2 -2
- package/dist/es5.debug.private/full.js +2 -2
- package/dist/es5.debug.private/groups.js +1 -1
- package/dist/es5.debug.private/messaging.js +1 -1
- package/dist/es5.debug.private/publish.js +2 -2
- package/dist/min/channels.js +1 -1
- package/dist/min/channels.js.map +1 -1
- package/dist/min/full.js +1 -1
- package/dist/min/full.js.map +1 -1
- package/dist/min/groups.js +1 -1
- package/dist/min/messaging.js +1 -1
- package/dist/min/publish.js +1 -1
- package/dist/min/publish.js.map +1 -1
- package/dist/min.private/channels.js +1 -1
- package/dist/min.private/channels.js.map +1 -1
- package/dist/min.private/full.js +1 -1
- package/dist/min.private/full.js.map +1 -1
- package/dist/min.private/groups.js +1 -1
- package/dist/min.private/messaging.js +1 -1
- package/dist/min.private/publish.js +1 -1
- package/dist/min.private/publish.js.map +1 -1
- package/examples/src/channel/channel-viewer-app.tsx +6 -6
- package/package.json +1 -1
package/dist/debug/channels.js
CHANGED
|
@@ -9012,7 +9012,7 @@ var VersionManager = /*#__PURE__*/function () {
|
|
|
9012
9012
|
key: "sdkVersion",
|
|
9013
9013
|
get: function get() {
|
|
9014
9014
|
try {
|
|
9015
|
-
return "2023-05-
|
|
9015
|
+
return "2023-05-31T17:46:40.130Z (2023.0.20-beta.63)";
|
|
9016
9016
|
} catch (e) {
|
|
9017
9017
|
return this._defaultVersion;
|
|
9018
9018
|
}
|
|
@@ -9941,4 +9941,4 @@ var VideoTelemetry = /*#__PURE__*/function () {
|
|
|
9941
9941
|
/******/ })()
|
|
9942
9942
|
;
|
|
9943
9943
|
});
|
|
9944
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUHJpdmFjeU1vZGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGVMaXN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1N0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9BcHBlbmRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Db25zb2xlQXBwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ1RocmVzaG9sZC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvSGxzUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0luc2VydGFibGVTdHJlYW1zLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0xpdmVTdHJlYW1pbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTmV0d29ya1N0YXRlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TaGFrYVBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1dlYlBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9EaW1lbnNpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbImRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJEaXNwb3NhYmxlTGlzdCIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiU3ViamVjdCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsIlJlYWRPbmx5U3ViamVjdCIsImRldGVjdFRhYkZvY3VzQ2hhbmdlIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwiZ2V0IiwidmFsdWUiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsImRpc3Bvc2UiLCJfZGlzcG9zYWJsZXMiLCJfdGhpcyIsImhpZGRlbiIsInZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudCIsIl90eXBlb2YiLCJtc0hpZGRlbiIsIndlYmtpdEhpZGRlbiIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJpc0ZvcmVncm91bmQiLCJzZXRGb2N1c1N0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZCIsIkRpc3Bvc2FibGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfdGhpczIiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJCcm93c2VyRGV0ZWN0b3IiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24iLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJicm93c2VyTmFtZUFuZFZlcnNpb24iLCJtYXRjaCIsIl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUiLCJwYXJzZUJyb3dzZXJOYW1lIiwiYnJvd3Nlck5hbWVMaXN0Iiwic3BsaXQiLCJwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24iLCJicm93c2VyVmVyc2lvbkxpc3QiLCJmdWxsVmVyc2lvbiIsIk51bWJlciIsIm1zaWUiLCJpbmRleE9mIiwiY29uY2F0IiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJ0cmlkZW50IiwidmVyc2lvbiIsImluY2x1ZGVzIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsImdldFN0cmluZ1ZhbHVlIiwibmFtZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlIiwiZGVmYXVsdFN0cmluZ1ZhbHVlIiwiZ2V0Qm9vbGVhblZhbHVlIiwidmFsdWVGcm9tVXJpIiwiZGVmYXVsdEJvb2xlYW5WYWx1ZSIsIlRlbGVtZXRyeUxldmVsTWFwcGluZyIsIlRlbGVtZXRyeURlZmF1bHQiLCJMb2dnaW5nTGV2ZWxNYXBwaW5nIiwiTG9nZ2VyRGVmYXVsdHMiLCJtZXRhVmFsdWUiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0QXR0cmlidXRlIiwidmFsdWVVUklQYXJhbWV0ZXJOYW1lIiwiVVJMU2VhcmNoUGFyYW1zIiwibG9jYXRpb24iLCJzZWFyY2giLCJ1bmRlZmluZWQiLCJOZXR3b3JrTW9uaXRvciIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsIl9pc1N1cHBvcnRlZCIsIl9ydHQiLCJfZWZmZWN0aXZlVHlwZSIsIl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZG93bmxpbmsiLCJkb3dubGlua01heCIsImdldEVmZmVjdGl2ZVR5cGUiLCJlZmZlY3RpdmVUeXBlIiwidHlwZSIsImdldFJvdW5kVHJpcFRpbWUiLCJydHQiLCJsaXN0ZW5lciIsIlByaXZhY3lNb2RlIiwiX2lzUHJpdmF0ZSIsImFwcGx5SXNQcml2YXRlIiwiX19QUklWQUNZX01PREVfXyIsImUiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiTG9nZ2VyRmFjdG9yeSIsIlNESyIsIl9zdGFydFRpbWUiLCJfcGFnZUxvYWRUaW1lIiwic3VjY2VzcyIsInN0cmVhbUlkIiwicmVjb3JkU3RyZWFtTWV0cmljIiwiTWV0cmljc1R5cGUiLCJmYWlsIiwibWV0cmljVHlwZSIsIl9tZXRyaWNTdWJtaXR0ZWQiLCJzZXR1cFRpbWUiLCJtZXRyaWNOYW1lIiwiTWV0cmljVHlwZSIsImdldE5hbWUiLCJtZXRyaWNzU2VydmljZSIsInB1c2giLCJydW50aW1lIiwidWludDY0IiwiX2xvZ2dlciIsImluZm8iLCJEdXJhdGlvbnMiLCJ0b0lzb1N0cmluZyIsImVkZ2VBdXRoVG9rZW5QcmVmaXgiLCJFZGdlQXV0aFBhcnNlciIsInBhcnNlVG9rZW4iLCJ0b2tlbiIsImlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkIiwiZXJyb3IiLCJFZGdlVG9rZW4iLCJkZWNvZGVkVG9rZW4iLCJhdG9iIiwic3Vic3RyIiwibGVuZ3RoIiwiZWRnZVRva2VuIiwiSlNPTiIsInBhcnNlIiwic3RhcnRzV2l0aCIsIl9lZGdlVG9rZW4kdG9rZW4iLCJfZWRnZVRva2VuJHRva2VuMiIsIl9hcHBsaWNhdGlvbklkIiwiYXBwbGljYXRpb25JZCIsIl90b2tlbiIsInVyaSIsIlVSTCIsImNhcGFiaWxpdGllcyIsIkZlYXR1cmVFbmFibGVtZW50IiwiTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciIsIk1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IiLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJfbGlzdCIsImZvckVhY2giLCJ0b1N0cmluZyIsIlN0cmluZ3MiLCJFcnJvciIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiV2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlIiwibG9nZ2luZ0xldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIlRlbGVtZXRyeUxldmVsIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc0ZhY3RvcnkiLCJnZXRNZXRyaWNzU2VydmljZSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc1NlcnZpY2UiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsIlZlcnNpb25NYW5hZ2VyIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwiX3NlbmRNZXRyaWNzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJzZW5kTWV0cmljcyIsIl94IiwiYXBwbHkiLCJfc2VuZE1ldHJpY3NJZkFibGUiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIl9pc1NlbmRpbmciLCJzbGljZSIsInRoZW4iLCJyZXNwb25zZSIsImNhdGNoIiwiY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsVHlwZSIsIlByb21pc2UiLCJjYWxsYmFjayIsIlR5cGVFcnJvciIsIl9zdGF0ZSIsIl9oYW5kbGVkIiwiX3ZhbHVlIiwiX2RlZmVycmVkcyIsImRvUmVzb2x2ZSIsImRvbmUiLCJwcm9taXNlUmVzb2x2ZSIsInJlYXNvbiIsInByb21pc2VSZWplY3QiLCJuZXdWYWx1ZSIsInByb21pc2UiLCJmaW5hbGUiLCJfaW1tZWRpYXRlIiwiX3VuaGFuZGxlZFJlamVjdGlvbiIsImkiLCJsZW4iLCJoYW5kbGUiLCJkZWZlcnJlZCIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJlc3VsdCIsImFsbCIsImFyciIsInJlc29sdmUiLCJyZWplY3QiLCJpc0FycmF5IiwicHJvdG90eXBlIiwicmVtYWluaW5nIiwibWFuYWdlUmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsIl8iLCJyYWNlIiwic2V0VGltZW91dCIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImRpcmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJfYXJnczMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbiIsIl9yZWYiLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImNvbmZpZ3VyYXRpb24iLCJpY2VTZXJ2ZXJzIiwidXJscyIsInVzZXJuYW1lIiwiY3JlZGVudGlhbCIsInVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQiLCJSdGNDb25uZWN0aW9uTW9uaXRvciIsIm1lZGlhU3RyZWFtIiwiZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl9wZWVyQ29ubmVjdGlvbiIsIl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3RyYWNrc1RvTW9uaXRvciIsImdldFRyYWNrcyIsIm1hcCIsInRyYWNrIiwicGFyc2VkU0RQIiwiU2RwUGFyc2VyIiwiY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIiwic2RwIiwiX2VzdGltYXRlZEF1ZGlvQ29kZWMiLCJhdWRpb0NvZGVjIiwiX2VzdGltYXRlZFZpZGVvQ29kZWMiLCJ2aWRlb0NvZGVjIiwidXBkYXRlU3RhdGlzdGljIiwiX3J0Y1N0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJfdXBkYXRlU3RhdGlzdGljIiwiX2lnbm9yZWQiLCJnZXRLaW5kRm9yU2FmYXJpMTEiLCJ1cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJpZCIsImdldFN0YXRzIiwic3RhdHMiLCJydGNTdGF0aXN0aWNzIiwicm91bmRUcmlwVGltZSIsImxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCIsInJlcG9ydCIsImN1cnJlbnRSb3VuZFRyaXBUaW1lIiwibWVkaWFUeXBlIiwiY29kZWMiLCJjb2RlY0lkIiwibWltZVR5cGUiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYyIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MyIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjQiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY1IiwiYnl0ZXMiLCJieXRlc1JlY2VpdmVkIiwicHJldmlvdXNCeXRlc1JlY2VpdmVkIiwiYnl0ZXNEZWx0YSIsInRpbWVEZWx0YSIsImJpdHJhdGUiLCJmbG9vciIsInNzcmMiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwicm91bmQiLCJfdXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiZ2V0U3RhdHNMZWdhY3kiLCJuYW1lcyIsInN0YXQiLCJfc2RwIiwic2RwU3BsaXRCeUxpbmVzIiwic2RwU3BsaXRCeVRyYWNrcyIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwiX2lzQXVkaW9UcmFja0VuYWJsZWQiLCJpc1RyYWNrQnlUeXBlRW5hYmxlZCIsIl9pc1ZpZGVvVHJhY2tFbmFibGVkIiwic2RwU2VjdGlvbkZvclR5cGUiLCJmaW5kIiwic2RwVHJhY2siLCJ1c2VkQ29kZWNMaW5lIiwic2RwTGluZSIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiIsImljZUNvbm5lY3Rpb25TdGF0ZSIsImdldENvbmZpZ3VyYXRpb24iLCJzZXRDb25maWd1cmF0aW9uIiwiX2NyZWF0ZU9mZmVyIiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsImNsb3NlIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3ViamVjdCIsIl9zdWJqZWN0Iiwic3Vic2NyaWJlIiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwiX0Rpc3Bvc2FibGUiLCJfaW5oZXJpdHMiLCJfc3VwZXIiLCJfY3JlYXRlU3VwZXIiLCJsaXN0ZW5lcnMiLCJpZHgiLCJfbGlzdGVuZXJzIiwiY2hhbmdlZCIsImNvbXBhcmFibGUiLCJlcXVhbHMiLCJnZXRFbnZpcm9ubWVudEZyb21VcmwiLCJiYXNlVVJMIiwib3JpZ2luIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJfc2hha2FQbGF5ZXJMb2FkZXIiLCJfaGxzSnNMb2FkZXIiLCJfbWV0cmljc1NlcnZpY2UiLCJfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfdGVsZW1ldHJ5VXJsIiwiX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJyZXRyaWVzQW1vdW50IiwiX3RlbGVtZXRyeUxldmVsIiwiYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwidGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImNsaWVudFNlc3Npb25JZCIsImlnbm9yZWRFbnZpcm9ubWVudCIsImlnbm9yZWREaXNjb3ZlcnlVcmkiLCJ0ZWxlbWV0cnlVcmwiLCJ0ZWxlbWV0cnlBcHBlbmRlciIsImlnbm9yZWRUZW5hbmN5IiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsIkRpc2NvdmVyeVVyaSIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJkaXNjb3ZlcnlVcmkiLCJnZXRUZWxlbWV0cnlVcmwiLCJjaGFubmVsVG9rZW4iLCJ1cmlWYWx1ZSIsImJhc2VVUklWYWx1ZSIsImluaXQiLCJfaW5pdGlhbGl6ZWQiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJjaGFubmVsQ29udGV4dE9wdGlvbnMiLCJ0YXJnZXRMYWciLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJfdG9rZW5Db250ZXh0IiwiVG9rZW5Db250ZXh0IiwiX2NoYW5uZWxDb250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJfcGVlckNvbm5lY3Rpb25Db250ZXh0IiwiUGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3N0YXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJFeHBvbmVudGlhbEJhY2tvZmYiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0IiwiVmlkZW9UZWxlbWV0cnkiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiQ2hhbm5lbFN0YXRlIiwicmVzdGFydEFmdGVyU3RvcCIsImNsZWFyRmFpbHVyZUNvdW50VGltZW91dCIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJkZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic3RhcnQiLCJwYXVzZSIsInNyY09iamVjdCIsIndpZHRoIiwidmlkZW9XaWR0aCIsImhlaWdodCIsInZpZGVvSGVpZ2h0IiwiRGltZW5zaW9uIiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJzdGF0dXMiLCJ1cGRhdGVUYXJnZXRMYWciLCJfc3RvcCIsImlzU3RhcnRpbmciLCJwcm9jZXNzU3RvcCIsImNsZWFuVXBSZXNvdXJjZXMiLCJfcmVzdW1lIiwicGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJyZXN1bWUiLCJtdXRlIiwibXV0ZWQiLCJ1bm11dGUiLCJfZGlzcG9zZSIsImlzRGlzcG9zZWQiLCJnZXRVcmkiLCJfc3RhcnQiLCJwcm9jZXNzU3RhcnQiLCJfcHJvY2Vzc1N0YXJ0IiwiX2NhbGxlZTUiLCJfdGhpczUiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwic3RyZWFtUGxheWVyIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsIlN0cmVhbUZhY3RvcnkiLCJmaW5hbGx5IiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJfcGxheSIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3IiwicGxheSIsImdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsIl9jYWxsZWU4IiwiX2NhbGxlZTgkIiwiX2NvbnRleHQ4IiwiX3RoaXM2IiwiZGVzdHJveVN0cmVhbSIsIl9yZWYyIiwicGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsIl9wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsIl9jYWxsZWU5IiwiX3RoaXM3IiwicGxheVByb21pc2UiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJDaGFubmVscyIsImNyZWF0ZUNoYW5uZWwiLCJjaGFubmVsT3B0aW9ucyIsImRlZmF1bHRUYXJnZXRMYWciLCJfb3B0aW9ucyR0YXJnZXRMYWciLCJhcHBseVN0YXR1cyIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZSIsImJpdHJhdGVNb2RlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUiLCJiaXRyYXRlU3RhdGUiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiRGlzY292ZXJ5IiwiX3ByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJkaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJfY2FjaGUiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJfZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJ0aW1lb3V0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJvayIsInRleHQiLCJFbmRQb2ludCIsImRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiZmFpbGVkUmVxdWVzdHMiLCJwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCIsIl9hcmdzMiIsInBpbmciLCJ0aW1lIiwiX2Rpc2NvdmVyeVVyaSIsImJ1aWxkRGlzY292ZXJ5VXJsIiwic2RrVmVyc2lvbiIsImFwaVZlcnNpb24iLCJfdGltZW91dCIsIl9yb3VuZFRyaXBUaW1lIiwiX3BpbmciLCJmaW5pc2hlZCIsImJ1aWxkUGluZ1VybCIsIl9zdWJzY3JpYmUiLCJsb2NhbFNlc3Npb25EZXNjcmlwdGlvbiIsImNsaWVudFZlcnNpb24iLCJib2R5V2l0aE9mZmVyIiwiYm9keVdpdGhvdXRPZmZlciIsImh0dHBSZXNwb25zZSIsInN1YnNjcmliZVJlc3BvbnNlIiwiYnVpbGRVcmwiLCJiZWFyZXJUb2tlbiIsImh0dHBSb3VuZFRyaXBUaW1lIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb24iLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uIiwibWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJfcHVibGlzaCIsIm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJwdWJsaXNoIiwiX3g1IiwiX3g2IiwiX3g3Iiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl94OCIsIl94OSIsIl9saW1pdEJpdHJhdGUiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiX2FkZEljZUNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzIiwiZGlzY292ZXJ5Q29tcGxldGVkIiwiYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2FyZ3M2IiwibWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJfeDE1IiwiX3gxNiIsIl94MTciLCJfZGVzdHJveVN0cmVhbSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfeDE4IiwiX3gxOSIsIl9kZXN0cm95U3RyZWFtT25Vbm1vdW50IiwiX25hdmlnYXRvciIsInNlbmRCZWFjb24iLCJfeDIwIiwiX3gyMSIsInBhdGgiLCJwYXRoQXNBcnJheSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjIiLCJfeDIzIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCIsInB1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3gyNCIsIl94MjUiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gyNiIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY2FsbGVlMTIiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsIl94MjciLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJfeDI4IiwiQ2h1bmtlZFN0cmVhbSIsImNoYW5uZWxDb250ZXh0Iiwib2ZmZXJTZHAiLCJvcmlnaW5TdGFydFRpbWUiLCJMaXZlU3RyZWFtaW5nIiwicGxheWVyIiwibW9uaXRvciIsIl9tb25pdG9yRGlzcG9zYWJsZXMiLCJuZXdTdHJlYW1TdGF0aXN0aWNzIiwiX3N0cmVhbVN0YXRpc3RpY3MiLCJjdXJyZW50VGltZSIsImRhdGFCdWZmZXJlZCIsIl9tb25pdG9yRmFpbHVyZUNvdW50IiwicGF1c2VkIiwiSGxzUGxheWVyIiwibWFuaWZlc3RVUkkiLCJfdmlkZW9FbGVtZW50IiwiX2tpbmQiLCJfc3RyZWFtSWQiLCJfbWFuaWZlc3RVUkkiLCJlbmNvZGVVUkkiLCJyZXBsYWNlIiwiX29wdGlvbnMiLCJfcGxheWVyIiwiZW5hYmxlV29ya2VyIiwibWF4QnVmZmVyTGVuZ3RoIiwibGl2ZUJhY2tCdWZmZXJMZW5ndGgiLCJsaXZlU3luY0R1cmF0aW9uIiwibGl2ZUR1cmF0aW9uSW5maW5pdHkiLCJsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uIiwiSW5maW5pdHkiLCJoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2QiLCJsb2FkU291cmNlIiwiYXR0YWNoTWVkaWEiLCJjYW5QbGF5VHlwZSIsInNyYyIsIm5ldHdvcmtTdGF0ZSIsIk5ldHdvcmtTdGF0ZXMiLCJOZXR3b3JrTm9Tb3VyY2UiLCJzdGF0aXN0aWNzIiwibWVkaWEiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImJ1ZmZlcmVkIiwiZW5kIiwic3RyZWFtQ29udHJvbGxlciIsInRydWVDdXJyZW50VGltZSIsIm1heCIsImRlc3Ryb3kiLCJJbnNlcnRhYmxlU3RyZWFtcyIsInNldHVwTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSIsInRyYW5zZm9ybSIsImdldFZpZGVvVHJhY2tzIiwidHJhbnNmb3JtZXIiLCJUcmFuc2Zvcm1TdHJlYW0iLCJwcm9jZXNzb3IiLCJnZW5lcmF0b3IiLCJzb3VyY2UiLCJyZWFkYWJsZSIsInNpbmsiLCJ3cml0YWJsZSIsInBpcGVUaHJvdWdoIiwicGlwZVRvIiwidHJhbnNmb3JtZWRTdHJlYW0iLCJNZWRpYVN0cmVhbSIsIl9obHNQbGF5ZXIiLCJfcGhlbml4V2ViUGxheWVyIiwiX3NoYWthIiwibG9hZGVkIiwiX3BlbmRpbmciLCJQbGF5ZXIiLCJkYXNoTWFuaWZlc3RVcmxNYXRjaCIsImhsc01hbmlmZXN0VXJsTWF0Y2giLCJtYW5pZmVzdFVybCIsInBsYXlsaXN0VXJsIiwiX29iamVjdFNwcmVhZCIsInByZWZlck5hdGl2ZSIsInNob3VsZFVzZU5hdGl2ZUhscyIsIldlYlBsYXllciIsIlNoYWthUGxheWVyIiwiaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwiLCJkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0IiwiUmVhbFRpbWVTdHJlYW0iLCJwZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc2xpY2VkVG9BcnJheSIsIl9yZWYyJCIsInN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiIsInN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiIsIl9yZWYzIiwiYXBwbHlSdGNDb25maWd1cmF0aW9uIiwic3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQiLCJjYW5jZWxEaXNjb3ZlcnkiLCJjYW5kaWRhdGUiLCJfcmVmNCIsInJldHJ5Q2FsbGJhY2siLCJvbkxpbmUiLCJyZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIm1lZGlhU3RyZWFtUHJvbWlzZSIsInN0cmVhbXMiLCJ0cmFja0xpc3RlbmVyIiwiYW5zd2VyIiwiX3JlZjUiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjU3RhdGlzdGljIiwicnRjVmlkZW9TdGF0aXN0aWMiLCJydGNBdWRpb1N0YXRpc3RpYyIsImF1ZGlvIiwiYXVkaW9UcmFja0ZhaWxlZCIsInZpZGVvVHJhY2tGYWlsZWQiLCJfYXBwbHlSdGNDb25maWd1cmF0aW9uIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJfcGVlckNvbm5lY3Rpb24kY3VycmUiLCJpc0NsaWVudE9mZmVyRmxvdyIsImljZVJlc3RhcnQiLCJvZmZlciIsInBsYXllck9wdGlvbnMiLCJhYnIiLCJkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGUiLCJtYW5pZmVzdCIsInJldHJ5UGFyYW1ldGVycyIsInN0cmVhbWluZyIsInJlYnVmZmVyaW5nR29hbCIsImJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJCZWhpbmQiLCJtYXhBdHRlbXB0cyIsImJhY2tvZmZGYWN0b3IiLCJsb2FkUGxheWVyIiwiZXN0aW1hdGVkQmFuZHdpZHRoIiwicGxheVRpbWUiLCJ1bmxvYWQiLCJwbGF5ZXJDb25maWciLCJjb25maWd1cmUiLCJsb2FkIiwiY29kZSIsImNyZWF0ZSIsInRva2VuQ2FwYWJpbGl0aWVzIiwiYmFuZHdpZHRoVG9TdGFydEF0IiwibWluVGltZUJlZm9yZU5leHRSZWxvYWQiLCJlcnJvck9iamVjdCIsImNhblJlbG9hZCIsInNldmVyaXR5IiwicmVsb2FkSWZBYmxlIiwiaXNOYXRpdmUiLCJkZWxpdmVyeVR5cGUiLCJoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZCIsIl9sYXN0UmVsb2FkVGltZSIsInJlbG9hZCIsIl9fU0RLVkVSU0lPTl9fIiwiX2RlZmF1bHRWZXJzaW9uIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJUZWxlbWV0cnlTZXJ2aWNlIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsIl9zZW5kTG9ncyIsImxvZ01lc3NhZ2VzIiwic2VuZExvZ3MiLCJfc2VuZExvZ3NJZkFibGUiLCJudW1iZXJPZkxvZ3NUb1NlbmQiLCJzaXplT2ZMb2dzVG9TZW5kIiwiZ2V0TG9nU2l6ZSIsInN1bSIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm9mZnNldCIsIm1pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJwYXJ0cyIsIlN0cmluZyIsInBhZFN0YXJ0IiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0IiwiZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5TZWNvbmRzIiwicmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZiIsInBvdyIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kIiwibWluIiwib3RoZXIiLCJfbmV0d29ya01vbml0b3IiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJldmVudCIsIm9uQ29udGludWF0aW9uIiwiX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciIsInB1c2hUaW1lVG9GaXJzdEZyYW1lIiwicHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdGltZVRvRmlyc3RGcmFtZSIsImR1cmF0aW9uU2luY2VQYWdlTG9hZCIsIl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3ZpZGVvU3RhbGxlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7OztBQ1ZBO0FBQ0E7QUFDQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBO0FBQ0Esb0NBQW9DLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0wvRjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSDdGLHVCQUF1QixtQkFBTyxDQUFDLHdGQUF1QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSmhHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7O0FDTnBHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsSUFBSSxPQUFPO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFD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V0FDQSxFOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0Esd0NBQXdDLHlDQUF5QztXQUNqRjtXQUNBO1dBQ0EsRTs7Ozs7V0NQQSxzRjs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSxzREFBc0Qsa0JBQWtCO1dBQ3hFO1dBQ0EsK0NBQStDLGNBQWM7V0FDN0QsRTs7OztVQ05BO1VBQ0E7VUFDQTtVQUNBIiwiZmlsZSI6ImNoYW5uZWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvciwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjaywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZShcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2kgPSBudWxsID09IGFyciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gX2kpIHtcbiAgICB2YXIgX3MsXG4gICAgICBfZSxcbiAgICAgIF94LFxuICAgICAgX3IsXG4gICAgICBfYXJyID0gW10sXG4gICAgICBfbiA9ICEwLFxuICAgICAgX2QgPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKF94ID0gKF9pID0gX2kuY2FsbChhcnIpKS5uZXh0LCAwID09PSBpKSB7XG4gICAgICAgIGlmIChPYmplY3QoX2kpICE9PSBfaSkgcmV0dXJuO1xuICAgICAgICBfbiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKF9uID0gKF9zID0gX3guY2FsbChfaSkpLmRvbmUpICYmIChfYXJyLnB1c2goX3MudmFsdWUpLCBfYXJyLmxlbmd0aCAhPT0gaSk7IF9uID0gITApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2QgPSAhMCwgX2UgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghX24gJiYgbnVsbCAhPSBfaVtcInJldHVyblwiXSAmJiAoX3IgPSBfaVtcInJldHVyblwiXSgpLCBPYmplY3QoX3IpICE9PSBfcikpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfYXJyO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVJlc3QsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCIpO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHM7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIGV4cG9ydHMgPSB7fSxcbiAgICBPcCA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHksXG4gICAgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKG9iaiwga2V5LCBkZXNjKSB7XG4gICAgICBvYmpba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgfSxcbiAgICAkU3ltYm9sID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgPyBTeW1ib2wgOiB7fSxcbiAgICBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgIHdyaXRhYmxlOiAhMFxuICAgIH0pLCBvYmpba2V5XTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yLFxuICAgICAgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpLFxuICAgICAgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcbiAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZ2VuZXJhdG9yLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dClcbiAgICB9KSwgZ2VuZXJhdG9yO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IGZuLmNhbGwob2JqLCBhcmcpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IGVyclxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBkZWZpbmUoSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJiBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpICYmIChJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgZGVmaW5lKHByb3RvdHlwZSwgbWV0aG9kLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IsIFByb21pc2VJbXBsKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmcsXG4gICAgICAgICAgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiBcIm9iamVjdFwiID09IF90eXBlb2YodmFsdWUpICYmIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikgPyBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkgOiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh1bndyYXBwZWQpIHtcbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQsIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICB9XG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPSBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICAgICAgaWYgKFwiZXhlY3V0aW5nXCIgPT09IHN0YXRlKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKFwiY29tcGxldGVkXCIgPT09IHN0YXRlKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IG1ldGhvZCkgdGhyb3cgYXJnO1xuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuICAgICAgZm9yIChjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZCwgY29udGV4dC5hcmcgPSBhcmc7Oykge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gY29udGV4dC5tZXRob2QpIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKFwic3VzcGVuZGVkU3RhcnRcIiA9PT0gc3RhdGUpIHRocm93IHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5hcmc7XG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBjb250ZXh0Lm1ldGhvZCAmJiBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIHN0YXRlID0gXCJleGVjdXRpbmdcIjtcbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBcImNvbXBsZXRlZFwiIDogXCJzdXNwZW5kZWRZaWVsZFwiLCByZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUgJiYgKHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZE5hbWUgPSBjb250ZXh0Lm1ldGhvZCxcbiAgICAgIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZE5hbWVdO1xuICAgIGlmICh1bmRlZmluZWQgPT09IG1ldGhvZCkgcmV0dXJuIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG1ldGhvZE5hbWUgJiYgZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQsIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpLCBcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBtZXRob2ROYW1lICYmIChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBtZXRob2ROYW1lICsgXCInIG1ldGhvZFwiKSksIENvbnRpbnVlU2VudGluZWw7XG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkgcmV0dXJuIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmcsIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcbiAgICByZXR1cm4gaW5mbyA/IGluZm8uZG9uZSA/IChjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZSwgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gY29udGV4dC5tZXRob2QgJiYgKGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCIsIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkKSwgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWwpIDogaW5mbyA6IChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsKTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHtcbiAgICAgIHRyeUxvYzogbG9jc1swXVxuICAgIH07XG4gICAgMSBpbiBsb2NzICYmIChlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV0pLCAyIGluIGxvY3MgJiYgKGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdLCBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIHJlY29yZC5hcmcsIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGl0ZXJhYmxlLm5leHQpIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLFxuICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsraSA8IGl0ZXJhYmxlLmxlbmd0aDspIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHJldHVybiBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV0sIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUgPSB1bmRlZmluZWQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmV4dDogZG9uZVJlc3VsdFxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGRvbmU6ICEwXG4gICAgfTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZVByb3BlcnR5KEdwLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgZGVmaW5lUHJvcGVydHkoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZ2VuRnVuICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFjdG9yICYmIChjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkpO1xuICB9LCBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6IChnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZShnZW5GdW4sIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApLCBnZW5GdW47XG4gIH0sIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXdhaXQ6IGFyZ1xuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYXN5bmNJdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uIChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICB2b2lkIDAgPT09IFByb21pc2VJbXBsICYmIChQcm9taXNlSW1wbCA9IFByb21pc2UpO1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksIFByb21pc2VJbXBsKTtcbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCksIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoR3AsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoR3AsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZXhwb3J0cy5rZXlzID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHZhciBvYmplY3QgPSBPYmplY3QodmFsKSxcbiAgICAgIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBrZXlzLnB1c2goa2V5KTtcbiAgICByZXR1cm4ga2V5cy5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsga2V5cy5sZW5ndGg7KSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkgcmV0dXJuIG5leHQudmFsdWUgPSBrZXksIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoc2tpcFRlbXBSZXNldCkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB1bmRlZmluZWQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhc2tpcFRlbXBSZXNldCkgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSBcInRcIiA9PT0gbmFtZS5jaGFyQXQoMCkgJiYgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiYgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSAmJiAodGhpc1tuYW1lXSA9IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcm9vdFJlY29yZC50eXBlKSB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBleGNlcHRpb247XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmV0dXJuIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiLCByZWNvcmQuYXJnID0gZXhjZXB0aW9uLCBjb250ZXh0Lm5leHQgPSBsb2MsIGNhdWdodCAmJiAoY29udGV4dC5tZXRob2QgPSBcIm5leHRcIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQpLCAhIWNhdWdodDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldLFxuICAgICAgICAgIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gZW50cnkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzRmluYWxseSkgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmluYWxseUVudHJ5ICYmIChcImJyZWFrXCIgPT09IHR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0eXBlKSAmJiBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJiBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MgJiYgKGZpbmFsbHlFbnRyeSA9IG51bGwpO1xuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPSB0eXBlLCByZWNvcmQuYXJnID0gYXJnLCBmaW5hbGx5RW50cnkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MsIENvbnRpbnVlU2VudGluZWwpIDogdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gcmVjb3JkLnR5cGUgfHwgXCJjb250aW51ZVwiID09PSByZWNvcmQudHlwZSA/IHRoaXMubmV4dCA9IHJlY29yZC5hcmcgOiBcInJldHVyblwiID09PSByZWNvcmQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSAmJiBhZnRlckxvYyAmJiAodGhpcy5uZXh0ID0gYWZ0ZXJMb2MpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2goZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSByZXR1cm4gdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkoZW50cnkpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHVuZGVmaW5lZCksIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9LCBleHBvcnRzO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlUmVzdCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiKTtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiKTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChfdHlwZW9mKHJlcykgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9QcmltaXRpdmUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKFwiLi90b1ByaW1pdGl2ZS5qc1wiKTtcbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gKG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpLCBfdHlwZW9mKG9iaik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuY29uc3QgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQgPSAzMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnRGb2N1c0ludGVydmFsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0KHRoaXMuX2lzRm9yZWdyb3VuZCk7XG4gICAgdGhpcy5kZXRlY3RUYWJGb2N1c0NoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGlzRm9yZWdyb3VuZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZDtcbiAgfVxuXG4gIGdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RUYWJGb2N1c0NoYW5nZSgpOiB2b2lkIHtcbiAgICBsZXQgaGlkZGVuO1xuICAgIGxldCB2aXNpYmlsaXR5Q2hhbmdlO1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGEgZGVmaW5pdGlvbiBmb3IgJ21zSGlkZGVuJyBvciAnd2Via2l0SGlkZGVuJyB0eXBlc1xuICAgIC8vIFJlcXVpcmVkIHRvIEB0cy1pZ25vcmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50Lm1zSGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ21zSGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnbXN2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC53ZWJraXRIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnd2Via2l0SGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnd2Via2l0dmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQuaGlkZGVuICE9PSAndW5kZWZpbmVkJykgeyAvLyBPcGVyYSAxMi4xMCBhbmQgRmlyZWZveCAxOCBhbmQgbGF0ZXIgc3VwcG9ydFxuICAgICAgaGlkZGVuID0gJ2hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuXG4gICAgY29uc3QgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9ICFkb2N1bWVudFtoaWRkZW5dO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnRbaGlkZGVuXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuXG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0ZW5Gb3JEb2N1bWVudEZvY3VzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSBkb2N1bWVudC5oYXNGb2N1cygpO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9LCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IG51bGw7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc0ZvcmVncm91bmQgPT09IGlzRm9yZWdyb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRm9yZWdyb3VuZC52YWx1ZSA9IGlzRm9yZWdyb3VuZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckRldGVjdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4ID0gLyhNU0lFfCg/IUdlY2tvLispRmlyZWZveHwoPyFBcHBsZVdlYktpdC4rQ2hyb21lLispU2FmYXJpfCg/IUFwcGxlV2ViS2l0LispQ2hyb21lfEFwcGxlV2ViS2l0KD8hLitDaHJvbWV8LitTYWZhcmkpfEdlY2tvKD8hLitGaXJlZm94KSkoPzogfFxcLykoW1xcZC5hcHJlXSspL2c7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJNYWpvclZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciB7XG4gIGdldFN0cmluZ1ZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKSB8fFxuICAgICAgdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApIHx8XG4gICAgICB0aGlzLmRlZmF1bHRTdHJpbmdWYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIGdldEJvb2xlYW5WYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUZyb21VcmkgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCk7XG5cbiAgICBpZiAodmFsdWVGcm9tVXJpKSB7XG4gICAgICByZXR1cm4gdmFsdWVGcm9tVXJpID09PSAndHJ1ZScgfHwgdmFsdWVGcm9tVXJpID09PSAnMScgfHwgdmFsdWVGcm9tVXJpID09PSAnT24nO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRCb29sZWFuVmFsdWVbbmFtZV0gPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCb29sZWFuVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGFWYWx1ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT0nJHtuYW1lfSddYCk7XG5cbiAgICBpZiAoIW1ldGFWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbWV0YVZhbHVlLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZVVSSVBhcmFtZXRlck5hbWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAoIXZhbHVlVVJJUGFyYW1ldGVyTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpLmdldCh2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvclsnY29ubmVjdGlvbiddO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VmZmVjdGl2ZVR5cGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rTWF4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5lZmZlY3RpdmVUeXBlIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnR5cGU7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucnR0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgICB9O1xuXG4gICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRpc3RpY3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcnR0LnZhbHVlID0gdGhpcy5nZXRSb3VuZFRyaXBUaW1lKCk7XG4gICAgdGhpcy5fZWZmZWN0aXZlVHlwZS52YWx1ZSA9IHRoaXMuZ2V0RWZmZWN0aXZlVHlwZSgpO1xuICAgIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnZhbHVlID0gdGhpcy5nZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fUFJJVkFDWV9NT0RFX186IGJvb2xlYW47XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByaXZhY3lNb2RlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2lzUHJpdmF0ZTogYm9vbGVhbjtcblxuICBzdGF0aWMgZ2V0IGlzUHJpdmF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNQcml2YXRlO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5SXNQcml2YXRlKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9pc1ByaXZhdGUgPSBfX1BSSVZBQ1lfTU9ERV9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2lzUHJpdmF0ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5Qcml2YWN5TW9kZS5hcHBseUlzUHJpdmF0ZSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGNsYXNzIFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtU2V0dXBMaXN0ZW5lcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3NTZXJ2aWNlID0gU0RLLm1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdWNjZXNzKHN0cmVhbUlkKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQsIHN0cmVhbUlkKTtcbiAgfVxuXG4gIGZhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRTdHJlYW1NZXRyaWMobWV0cmljVHlwZTogTWV0cmljc1R5cGUsIHN0cmVhbUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21ldHJpY1N1Ym1pdHRlZCkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNTdWJtaXR0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXR1cFRpbWUgPSBub3cgLSB0aGlzLl9zdGFydFRpbWU7XG4gICAgY29uc3QgbWV0cmljTmFtZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpY1R5cGUpLmdldE5hbWUoKTtcblxuICAgIHRoaXMubWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHNldHVwVGltZX0sXG4gICAgICBzdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFN0cmVhbSBtZXRyaWMgWyVzXSBpbiBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmV3IER1cmF0aW9ucyhzZXR1cFRpbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuL0VkZ2VUb2tlbic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4vRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aFBhcnNlcicpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogRWRnZVRva2VuIHtcbiAgICBpZiAoIXRoaXMuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBKU09OLnBhcnNlKGRlY29kZWRUb2tlbik7XG5cbiAgICAgIGVkZ2VUb2tlbi50b2tlbiA9IEpTT04ucGFyc2UoZWRnZVRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4oZWRnZVRva2VuKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4uc3RhcnRzV2l0aChlZGdlQXV0aFRva2VuUHJlZml4KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW50ZXJmYWNlIElUb2tlbiB7XG4gIHVyaTogVVJMIHwgbnVsbDtcbiAgY2FwYWJpbGl0aWVzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElFZGdlVG9rZW4ge1xuICBhcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHRva2VuOiBJVG9rZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VUb2tlbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW46IElUb2tlbjtcblxuICBjb25zdHJ1Y3RvcihlZGdlVG9rZW46IElFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbklkID0gZWRnZVRva2VuPy5hcHBsaWNhdGlvbklkIHx8ICcnO1xuICAgIHRoaXMuX3Rva2VuID0ge1xuICAgICAgdXJpOiBlZGdlVG9rZW4/LnRva2VuPy51cmkgPyBuZXcgVVJMKGVkZ2VUb2tlbi50b2tlbi51cmkpIDogbnVsbCxcbiAgICAgIGNhcGFiaWxpdGllczogZWRnZVRva2VuPy50b2tlbj8uY2FwYWJpbGl0aWVzIHx8IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldCB1cmkoKTogVVJMIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLnVyaTtcbiAgfVxuXG4gIGdldCBjYXBhYmlsaXRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi5jYXBhYmlsaXRpZXM7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbklkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICB0eXBlb2YgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciA9PT0gJ3VuZGVmaW5lZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXNwb3NhYmxlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGRpc3Bvc2FibGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGUgPSBkaXNwb3NhYmxlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcG9zYWJsZS5jYWxsKHRoaXMpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogSURpc3Bvc2FibGVbXSA9IFtdO1xuXG4gIGFkZChkaXNwb3NhYmxlOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QucHVzaChkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIHRoaXMuX2xpc3QubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEaXNwb3NhYmxlTGlzdFtkaXNwb3NhYmxlcz0ke3RoaXMuX2xpc3QubGVuZ3RofV1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxUeXBlID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJpdmFjeU1vZGUgZnJvbSAnLi4vZG9tL1ByaXZhY3lNb2RlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gTG9nZ2luZ0xldmVsLk9mZiA6IExvZ2dpbmdMZXZlbC5BbGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIFByaXZhY3lNb2RlLmlzUHJpdmF0ZSA/IExvZ2dpbmdMZXZlbC5PZmYgOiBMb2dnaW5nTGV2ZWwuQWxsO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbFR5cGUpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByaXZhY3lNb2RlIGZyb20gJy4uL2RvbS9Qcml2YWN5TW9kZSc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsIDogVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZUhhbmRsZXIgZnJvbSAnLi9Qcm9taXNlSGFuZGxlcic7XG5cbmNsYXNzIFByb21pc2Uge1xuICBfc3RhdGU6IG51bWJlcjtcbiAgX2hhbmRsZWQ6IGJvb2xlYW47XG4gIF92YWx1ZTogUHJvbWlzZTtcbiAgX2RlZmVycmVkczogQXJyYXk8UHJvbWlzZUhhbmRsZXI+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgdGhlbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoY2FsbGJhY2spIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldycpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGUgPSAwO1xuICAgIHRoaXMuX2hhbmRsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBbXTtcblxuICAgIHRoaXMuZG9SZXNvbHZlKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGRvUmVzb2x2ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNhbGxiYWNrKFxuICAgICAgICB2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlamVjdChyZWFzb24pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVzb2x2ZShuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUHJvbWlzZSBSZXNvbHV0aW9uIFByb2NlZHVyZTogaHR0cHM6Ly9naXRodWIuY29tL1Byb21pc2VzLWFwbHVzL1Byb21pc2VzLXNwZWMjdGhlLVByb21pc2UtcmVzb2x1dGlvbi1wcm9jZWR1cmVcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gcHJvbWlzZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIFByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaXQgc2VsZi4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1ZhbHVlICYmICh0eXBlb2YgbmV3VmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgY29uc3QgdGhlbiA9IG5ld1ZhbHVlLnRoZW47XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgIHByb21pc2UuX3N0YXRlID0gMztcbiAgICAgICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgIHByb21pc2UuZmluYWxlKCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBwcm9taXNlLmRvUmVzb2x2ZShmdW5jdGlvbigpOiB2b2lkIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgIHRoZW4uYXBwbHkobmV3VmFsdWUsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJvbWlzZS5fc3RhdGUgPSAxO1xuICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHByb21pc2UuZmluYWxlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZWplY3QobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0ZSA9IDI7XG4gICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLmZpbmFsZSgpO1xuICB9XG5cbiAgZmluYWxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gMiAmJiB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2hhbmRsZWQpIHtcbiAgICAgICAgICBQcm9taXNlLl91bmhhbmRsZWRSZWplY3Rpb24odGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5fZGVmZXJyZWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmhhbmRsZSh0aGlzLl9kZWZlcnJlZHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX2RlZmVycmVkcyA9IG51bGw7XG4gIH1cblxuICBoYW5kbGUoZGVmZXJyZWQ6IFByb21pc2VIYW5kbGVyKTogdm9pZCB7XG4gICAgbGV0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB3aGlsZSAocHJvbWlzZS5fc3RhdGUgPT09IDMpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLl92YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDApIHtcbiAgICAgIHByb21pc2UuX2RlZmVycmVkcy5wdXNoKGRlZmVycmVkKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByb21pc2UuX2hhbmRsZWQgPSB0cnVlO1xuICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IHByb21pc2UuX3N0YXRlID09PSAxID8gZGVmZXJyZWQub25GdWxmaWxsZWQgOiBkZWZlcnJlZC5vblJlamVjdGVkO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAxKSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlc3VsdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2socHJvbWlzZS5fdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYWxsKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLmFsbCBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKTtcblxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKFtdKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlbWFpbmluZyA9IGFyZ3MubGVuZ3RoO1xuICAgICAgY29uc3QgbWFuYWdlUmVzcG9uc2UgPSAoaSwgdmFsdWUpOiB2b2lkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgY29uc3QgdGhlbiA9IHZhbHVlLnRoZW47XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0aGVuLmNhbGwoXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gbWFuYWdlUmVzcG9uc2UoaSwgdmFsdWUpLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhcmdzW2ldID0gdmFsdWU7XG5cbiAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYW5hZ2VSZXNwb25zZShpLCBhcmdzW2ldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyByZXNvbHZlKHZhbHVlKTogUHJvbWlzZSB7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IFByb21pc2UpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiByZXNvbHZlKHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmVqZWN0KHZhbHVlKTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHJlamVjdCh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJhY2UoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UucmFjZSBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShhcnJbaV0pLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBfaW1tZWRpYXRlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcbiAgfVxuXG4gIHN0YXRpYyBfdW5oYW5kbGVkUmVqZWN0aW9uKGVycm9yKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1Bvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjonLCBlcnJvcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgIH1cbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uKG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ3RoZW4nXSA9IGZ1bmN0aW9uKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigoKSA9PiBudWxsKTtcblxuICB0aGlzLmhhbmRsZShuZXcgUHJvbWlzZUhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpKTtcblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gPSBmdW5jdGlvbihjYWxsYmFjazogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIHZhbHVlID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiB2YWx1ZSksXG4gICAgcmVhc29uID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiBjb25zdHJ1Y3Rvci5yZWplY3QocmVhc29uKSlcbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb21pc2U7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuL1Byb21pc2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9taXNlSGFuZGxlciB7XG4gIG9uRnVsZmlsbGVkOiBGdW5jdGlvbjtcbiAgb25SZWplY3RlZDogRnVuY3Rpb247XG4gIHByb21pc2U6IFByb21pc2U7XG5cbiAgY29uc3RydWN0b3Iob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpIHtcbiAgICB0aGlzLm9uRnVsZmlsbGVkID0gdHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiBudWxsO1xuICAgIHRoaXMub25SZWplY3RlZCA9IHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVuY3Rpb24nID8gb25SZWplY3RlZCA6IG51bGw7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHtcbiAgYXVkaW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICB2aWRlb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIGxvY2FsT2ZmZXI6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSgpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlZDoge1xuICAgIGRpcmVjdGlvbj86IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uO1xuICAgIHBlZXJDb25uZWN0aW9uOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD47XG4gIH07XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fcGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUHJlY2FjaGluZ0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UucHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwcmUtY2FjaGUgcGVlciBjb25uZWN0aW9uIG9mZmVyJywgZSkpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKTogUHJvbWlzZTx7IHBlZXJDb25uZWN0aW9uOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB8IHZvaWQ+OyBkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIH0+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSB7XG4gICAgICBkaXJlY3Rpb246ICdyZWN2b25seScsXG4gICAgICBwZWVyQ29ubmVjdGlvbjogUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiA9ICdyZWN2b25seScpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIGlmIChQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCAmJiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbikge1xuICAgICAgY29uc3QgdmFsdWUgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5wZWVyQ29ubmVjdGlvbjtcblxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fcGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKClcbiAgICAgIC50aGVuKGFzeW5jIHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNBZGRUcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLnN1cHBvcnRzQWRkVHJhbnNjZWl2ZXI7XG4gICAgICAgIGxldCB2aWRlb1RyYW5zY2VpdmVyLCBhdWRpb1RyYW5zY2VpdmVyO1xuXG4gICAgICAgIGlmIChzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKSB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCdhdWRpbycsIHtkaXJlY3Rpb259KTtcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ3ZpZGVvJywge2RpcmVjdGlvbn0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIodW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25zID0gZGlyZWN0aW9uID09PSAncmVjdm9ubHknID8ge1xuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IHRydWUsXG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICB9IDoge307XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlZXJDb25uZWN0aW9uU2VydmljZSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIHtcbiAgc3RhdGljIHRydW5jYXRlSWNlU2VydmVycyhjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1cmxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB1cmwgPSBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHVybHMucHVzaChjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgIHVybHM6IHVybHMsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1N0YXRpc3RpYyB7XG4gIHNzcmM/OiBzdHJpbmc7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGJ5dGVzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGZyYW1lc0RlY29kZWQ/OiBudW1iZXI7XG4gIHBhY2tldHNMb3N0PzogbnVtYmVyO1xuICBwYWNrZXRzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGNvZGVjPzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU/OiBudW1iZXI7XG4gIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcD86IG51bWJlcjtcbn1cblxuY29uc3QgdXBkYXRlU3RhdGlzdGljVGltZW91dCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkQXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydGNTdGF0aXN0aWM6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+ID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHt9KTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgcHJpdmF0ZSBfaXNNb25pdG9yUnVubmluZyA9IHRydWU7XG4gIHByaXZhdGUgX3VwZGF0ZVRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdHJhY2tzVG9Nb25pdG9yOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgdGhpcy5fdHJhY2tzVG9Nb25pdG9yID0gbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkubWFwKHRyYWNrID0+IHRyYWNrLmtpbmQpIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmdldEN1cnJlbnRPZmZlckRpc2FibGVkKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFNEUCA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYyA9IHBhcnNlZFNEUC5hdWRpb0NvZGVjO1xuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjID0gcGFyc2VkU0RQLnZpZGVvQ29kZWM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpYygpOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZW91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMudXBkYXRlU3RhdGlzdGljTGVnYWN5KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYWZhcmkgMTEgZG9lc250IGhhdmUga2luZCBvciBtZWRpYVR5cGUgc28gd2UgbmVlZCB0byB0YWtlIGl0IGZyb20gdGhlIGluYm91bmQtcnRwIG9iamVjdCBpZFxuICAgIGNvbnN0IGdldEtpbmRGb3JTYWZhcmkxMSA9IChpdGVtKTogc3RyaW5nID0+IGl0ZW0uaWQuaW5jbHVkZXMoJ0F1ZGlvJykgPyAnYXVkaW8nIDogaXRlbS5pZC5pbmNsdWRlcygnVmlkZW8nKSA/ICd2aWRlbycgOiAnJztcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMobnVsbClcbiAgICAgIC50aGVuKHN0YXRzID0+IHtcbiAgICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcblxuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgbGV0IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgIHN0YXRzLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUpIHtcbiAgICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSAqIDEwMDA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnaW5ib3VuZC1ydHAnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSByZXBvcnQua2luZCB8fCByZXBvcnQubWVkaWFUeXBlIHx8IGdldEtpbmRGb3JTYWZhcmkxMShyZXBvcnQpO1xuICAgICAgICAgICAgICBsZXQgY29kZWMgPSAnJztcblxuICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSByZXBvcnQuY29kZWNJZCkge1xuICAgICAgICAgICAgICAgICAgY29kZWMgPSBpdGVtLm1pbWVUeXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKGtpbmQgJiYgdGhpcy5fdHJhY2tzVG9Nb25pdG9yLmluY2x1ZGVzKGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSByZXBvcnQuYnl0ZXNSZWNlaXZlZCB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQnl0ZXNSZWNlaXZlZCA9IHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy5ieXRlc1JlY2VpdmVkID8/IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNEZWx0YSA9IGJ5dGVzIC0gcHJldmlvdXNCeXRlc1JlY2VpdmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlcG9ydC50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8udGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpdHJhdGUgPSBieXRlc0RlbHRhICYmIHRpbWVEZWx0YSA/IE1hdGguZmxvb3IoOCAqIGJ5dGVzRGVsdGEgL1xuICAgICAgICAgICAgICAgICAgdGltZURlbHRhICogMTAwMCkgOiAwO1xuXG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXSA9IHtcbiAgICAgICAgICAgICAgICAgIHNzcmM6IHJlcG9ydC5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiByZXBvcnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IHJlcG9ydC5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgcGFja2V0c0xvc3Q6IHJlcG9ydC5wYWNrZXRzTG9zdCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNSZWNlaXZlZDogcmVwb3J0LnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LmZyYW1lc0RlY29kZWQ7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZwcyA9IChyZXBvcnQuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMDtcblxuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnBzJ10gPSBmcHMgPyBNYXRoLnJvdW5kKGZwcyAqIDEwMCkgLyAxMDAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHNMZWdhY3koKS50aGVuKHN0YXRzID0+IHtcbiAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG4gICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICAgIHN0YXRzLnJlc3VsdCgpLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgcmVwb3J0Lm5hbWVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2dvb2dSVFQnKSB7XG4gICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LnN0YXQobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdzc3JjJykge1xuICAgICAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IHJlcG9ydC5zdGF0KCdtZWRpYVR5cGUnKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdID0ge3RpbWVzdGFtcDogRGF0ZS5ub3coKX07XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydzc3JjJ10gPSByZXBvcnQuc3RhdCgnc3NyYycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydtZWRpYVR5cGUnXSA9IG1lZGlhVHlwZTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2J5dGVzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdieXRlc1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzTG9zdCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNMb3N0Jyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2NvZGVjJ10gPSByZXBvcnQuc3RhdCgnZ29vZ0NvZGVjTmFtZScpLnRvU3RyaW5nKCkgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShtZWRpYVR5cGUpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncm91bmRUcmlwVGltZSddID0gcm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIGlmIChtZWRpYVR5cGUgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuc3RhdCgnZnJhbWVzRGVjb2RlZCcpO1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcHMnXSA9IChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0uZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgMTAwMCB8fCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2RlY0J5VHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYztcbiAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZHBQYXJzZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZHA6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzQXVkaW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzVmlkZW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2RwOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZHAgPSBzZHA7XG5cbiAgICBjb25zdCBzZHBTcGxpdEJ5TGluZXMgPSB0aGlzLl9zZHAuc3BsaXQoLyhcXHJcXG58XFxyfFxcbikvKTtcbiAgICBjb25zdCBzZHBTcGxpdEJ5VHJhY2tzID0gdGhpcy5fc2RwLnNwbGl0KCdtPScpO1xuXG4gICAgdGhpcy5fYXVkaW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygnYXVkaW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX3ZpZGVvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ3ZpZGVvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgnYXVkaW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgICB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgndmlkZW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgfVxuXG4gIGdldCBhdWRpb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29kZWM7XG4gIH1cblxuICBnZXQgdmlkZW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92aWRlb0NvZGVjO1xuICB9XG5cbiAgZ2V0IGlzQXVkaW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBnZXQgaXNWaWRlb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNUcmFja0J5VHlwZUVuYWJsZWQodHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5VHJhY2tzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNkcFNlY3Rpb25Gb3JUeXBlID0gc2RwU3BsaXRCeVRyYWNrcy5maW5kKHNkcFRyYWNrID0+IHNkcFRyYWNrLnN0YXJ0c1dpdGgodHlwZSkpO1xuXG4gICAgaWYgKCFzZHBTZWN0aW9uRm9yVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhc2RwU2VjdGlvbkZvclR5cGUuaW5jbHVkZXMoYGE9aW5hY3RpdmVgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb2RlYyh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlMaW5lczogc3RyaW5nIFtdKTogc3RyaW5nIHtcbiAgICBjb25zdCB1c2VkQ29kZWNMaW5lID0gc2RwU3BsaXRCeUxpbmVzLmZpbmQoc2RwTGluZSA9PiBzZHBMaW5lLmluY2x1ZGVzKGBhPXJ0cG1hcDoke3NkcFNwbGl0QnlMaW5lcy5maW5kKGkgPT4gaS5pbmNsdWRlcyhgbT0ke3R5cGV9YCkpLnNwbGl0KCcgJylbM119YCkpO1xuICAgIGNvbnN0IHVzZWRDb2RlYyA9IHVzZWRDb2RlY0xpbmUuc3BsaXQoJyAnKVsxXTtcbiAgICBjb25zdCBjb2RlY05hbWUgPSB1c2VkQ29kZWMuc3BsaXQoJy8nKVswXTtcblxuICAgIHJldHVybiBjb2RlY05hbWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24sIHtQZWVyQ29ubmVjdGlvbkV2ZW50c30gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge0lMZWdhY3lSVENTdGF0c1JlcG9ydH0gZnJvbSAnLi9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdWYW5pbGxhUGVlckNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb246IFJUQ1BlZXJDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24gY2xhc3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgZ2V0IG5hdGl2ZSgpOiBSVENQZWVyQ29ubmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBpY2VDb25uZWN0aW9uU3RhdGUoKTogUlRDSWNlQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuYWRkVHJhbmNlaXZlckRpc2FibGVkICYmIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlciA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmVyKG9wdGlvbnM/OiBSVENPZmZlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZU9mZmVyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFuc3dlcihvcHRpb25zPzogUlRDQW5zd2VyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlQW5zd2VyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgc2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoYXNDcnlwdG8gPSBkZXNjcmlwdGlvbi5zZHA/Lm1hdGNoKC9hPWNyeXB0bzovaSk7XG5cbiAgICBpZiAoaGFzQ3J5cHRvKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RQIGE9Y3J5cHRvIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBnZXRTZW5kZXJzKCk6IFJUQ1J0cFNlbmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U2VuZGVycygpO1xuICB9XG5cbiAgZ2V0U3RhdHMoc2VsZWN0b3I/OiBNZWRpYVN0cmVhbVRyYWNrIHwgbnVsbCk6IFByb21pc2U8UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMoc2VsZWN0b3IpO1xuICB9XG5cbiAgZ2V0U3RhdHNMZWdhY3koKTogUHJvbWlzZTxJTGVnYWN5UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAvLyBJZ25vcmVkIGR1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgbGVnYWN5ICdnZXRTdGF0cycgbWV0aG9kIHR5cGUgZGVmaW5pdGlvblxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlICdnZXRTdGF0cycgbWV0aG9kIGZvclxuICAgICAgLy8gQ2hyb21lQDw9IDY2IGRldGFpbGVkIGhlcmU6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTYyNzgxNlxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhyZXNvbHZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkVHJhbnNjZWl2ZXIobmFtZTogc3RyaW5nLCBvcHRpb25zOiBSVENSdHBUcmFuc2NlaXZlckluaXQpOiBSVENSdHBUcmFuc2NlaXZlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKG5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkU3RyZWFtKG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IHZvaWQge1xuICAgIG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhY2sodHJhY2spO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q29uZmlndXJhdGlvbigpOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpO1xuICB9XG5cbiAgc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHNldCBvbnRyYWNrKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbnRyYWNrKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrO1xuICB9XG5cbiAgc2V0IG9uaWNlY2FuZGlkYXRlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2VjYW5kaWRhdGUoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlO1xuICB9XG5cbiAgc2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IEFycmF5PFQ+LCBsaXN0ZW5lcjogVCkge1xuICAgIHN1cGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBBcnJheTwoVCkgPT4gdm9pZD47XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwoVCkgPT4gdm9pZD4odGhpcy5fbGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW52aXJvbm1lbnQge1xuICBzdGF0aWMgZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgcmV0dXJuIGJhc2VVUkwub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuLi9sb2dnZXIvQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBQcml2YWN5TW9kZSBmcm9tICcuLi9kb20vUHJpdmFjeU1vZGUnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4vVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL0Vudmlyb25tZW50JztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL3N0cmVhbWluZy9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5jb25zdCBwYWdlTG9hZFRpbWUgPSB3aW5kb3dbJ19fcGhlbml4UGFnZUxvYWRUaW1lJ10gfHwgd2luZG93WydfX3BhZ2VMb2FkVGltZSddIHx8IERhdGUubm93KCk7XG5cbmludGVyZmFjZSBJSW5pdE9wdGlvbnMge1xuICBkaXNjb3ZlcnlVcmk/OiBzdHJpbmc7XG4gIHBlZXJDb25uZWN0aW9uRmFjdG9yeT86IElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIHRlbGVtZXRyeUxldmVsPzogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBjb25zb2xlTG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbT86IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlPzogYm9vbGVhbjtcbiAgd2ViUGxheWVyTG9hZGVyPzogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZDtcbiAgc2hha2FQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBTaGFrYVR5cGUpID0+IHZvaWQ7XG4gIGhsc0pzTG9hZGVyPzogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF93ZWJQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHN0YXRpYyBfZW52aXJvbm1lbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5VXJsOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeScpO1xuICBwcml2YXRlIHN0YXRpYyBfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDg7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlMZXZlbDogU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4gPSBuZXcgU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4oVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCFQcml2YWN5TW9kZS5pc1ByaXZhdGUpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5pdGlhbGl6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4oU0RLLl9pbml0aWFsaXplZCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seURpc2NvdmVyeVVyaTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4oRGlzY292ZXJ5VXJpLnVyaSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5O1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gYCR7YmFzZVVSSVZhbHVlfS9wY2FzdC9lbmRQb2ludHNgO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtYmFzZS11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGluaXQob3B0aW9ucz86IElJbml0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbmV3IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gb3B0aW9ucy5kaXNjb3ZlcnlVcmk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmXG4gICAgICAgIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IFNlc3Npb25UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vU2Vzc2lvblRlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQgVG9rZW5Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvVG9rZW5Db250ZXh0JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCwge0NoYW5uZWxDb250ZXh0T3B0aW9uc30gZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmNvbnN0IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiA9ICdjbGllbnQ6dGVybWluYXRpb24nO1xuY29uc3QgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMgPSAzMDAwO1xuY29uc3Qgc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMTUwMDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8YW55LCBhbnk+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2hhbm5lbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbkNvbnRleHQ6IFRva2VuQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGVDb250ZXh0OiBTdGF0ZUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cG9uZW50aWFsQmFja29mZjogRXhwb25lbnRpYWxCYWNrb2ZmO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VmlkZW9FbGVtZW50OiBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW46IFJlYWRPbmx5U3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhdGU6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9NdXRlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9QYXVzZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbkV4cGlyaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0aG9yaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU9ubGluZTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxvYWRpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQbGF5aW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhbmRieTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0b3BwZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUYXJnZXRMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUJpdHJhdGVMaW1pdDogUmVhZE9ubHlTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJlc29sdXRpb246IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUZhaWx1cmVDb3VudDogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RW5kUG9pbnQ6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RyZWFtOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UnRjU3RhdGlzdGljczogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlNZWRpYVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPjtcblxuICBwcml2YXRlIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25UZWxlbWV0cnk6IFNlc3Npb25UZWxlbWV0cnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcjogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBvcHRpb25zPzogQ2hhbm5lbE9wdGlvbnMpIHtcbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKTtcbiAgICBjb25zdCBjaGFubmVsQ29udGV4dE9wdGlvbnM6IENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucz8udGFyZ2V0TGFnLFxuICAgICAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucz8udmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGhhc0luc2VydGFibGVTdHJlYW1zOiBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKVxuICAgIH07XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQgPSBuZXcgVG9rZW5Db250ZXh0KHRva2VuKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IG5ldyBDaGFubmVsQ29udGV4dChjaGFubmVsQ29udGV4dE9wdGlvbnMpO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IG5ldyBQZWVyQ29ubmVjdGlvbkNvbnRleHQoKTtcbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQgPSBuZXcgU3RhdGVDb250ZXh0KCk7XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5VmlkZW9FbGVtZW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5KTtcbiAgICB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIgPSB0aGlzLmhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnN1YnNjcmliZSh2aWRlb0VsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS5zdWJzY3JpYmUoc3RyZWFtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkgPSBuZXcgVmlkZW9UZWxlbWV0cnkodGhpcy5zdHJlYW1JZCwgU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodGhpcy52aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh0aGlzLnZpZGVvRWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5TdG9wcGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5yZXN0YXJ0QWZ0ZXJTdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIH0sIGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi5zdWJzY3JpYmUocmVzb2x1dGlvbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5Lm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhyZXNvbHV0aW9uLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC5zdWJzY3JpYmUoYml0cmF0ZUxpbWl0ID0+IHtcbiAgICAgICAgaWYgKGJpdHJhdGVMaW1pdCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgYml0cmF0ZUxpbWl0LFxuICAgICAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgICAgICBCaXRyYXRlTW9kZS5Ob3JtYWxcbiAgICAgICAgICApXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZGVzdHJveVN0cmVhbU9uVW5tb3VudCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW1PblVubW91bnQodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCAnY2xpZW50OnRlcm1pbmF0aW9uLW9uLXdpbmRvdy11bmxvYWQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHZpZGVvRWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgc2V0IHZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSA9IHZpZGVvRWxlbWVudDtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnJlc29sdXRpb24udmFsdWUud2lkdGggIT09IHZpZGVvRWxlbWVudC52aWRlb1dpZHRoIHx8IHRoaXMucmVzb2x1dGlvbi52YWx1ZS5oZWlnaHQgIT09IHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gbmV3IERpbWVuc2lvbih2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCwgdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IERpbWVuc2lvbi5lbXB0eTtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRW5jb2RlZEVkZ2VUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSA9IHRva2VuO1xuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2luc2VydGFibGUtc3RyZWFtcycpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHBlZXJDb25uZWN0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhdGU7XG4gIH1cblxuICBnZXQgYXV0b011dGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkO1xuICB9XG5cbiAgZ2V0IGF1dG9QYXVzZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkO1xuICB9XG5cbiAgZ2V0IHRva2VuRXhwaXJpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nO1xuICB9XG5cbiAgZ2V0IGF1dGhvcml6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkO1xuICB9XG5cbiAgZ2V0IG9ubGluZSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU9ubGluZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TG9hZGluZztcbiAgfVxuXG4gIGdldCBwbGF5aW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGxheWluZztcbiAgfVxuXG4gIGdldCBzdGFuZGJ5KCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RhbmRieTtcbiAgfVxuXG4gIGdldCBzdG9wcGVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RvcHBlZDtcbiAgfVxuXG4gIGdldCB0YXJnZXRMYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnO1xuICB9XG5cbiAgZ2V0IGxhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMYWc7XG4gIH1cblxuICBnZXQgYml0cmF0ZUxpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlc29sdXRpb247XG4gIH1cblxuICBnZXQgZmFpbHVyZUNvdW50KCk6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQ7XG4gIH1cblxuICBnZXQgZW5kUG9pbnQoKTogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQ7XG4gIH1cblxuICBnZXQgc3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5U3RyZWFtO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkO1xuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpY3MoKTogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcztcbiAgfVxuXG4gIGdldCBtZWRpYVN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHNldEJpdHJhdGVMaW1pdChiaXRyYXRlTGltaXQ6IEJpdHNQZXJTZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSBiaXRyYXRlTGltaXQ7XG4gIH1cblxuICBjbGVhckJpdHJhdGVMaW1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kID0gMDtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgQml0cmF0ZU1vZGUuUmVzZXRcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYXJnZXRMYWcobGFnOiBNaWxsaXNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIGFzeW5jIHN0b3AocmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy5zdWJzY3JpYmUoaXNTdGFydGluZyA9PiB7XG4gICAgICAgIGlmICghaXNTdGFydGluZykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKHJlYXNvbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogVVJMIHtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS51cmk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBtaXNzaW5nIGNhbGxiYWNrIGZ1bmN0aW9uIENyZWF0ZUNoYW5uZWxPcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2snKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdpbnNlcnRhYmxlLXN0cmVhbXMgZW5hYmxlZCwgYnV0IGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYSBTdHJlYW0gVHJhY2sgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sudmFsdWUpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIGNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kLCBidXQgZmVhdHVyZSBpcyBub3QgZW5hYmxlZCB2aWEgaW5zZXJ0YWJsZS1zdHJlYW1zIGNhcGFiaWxpdHknKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OnN0YXJ0Jyk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICBjb25zdCB1cmkgPSB0aGlzLmdldFVyaSh0b2tlbik7XG4gICAgY29uc3QgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+ID0gKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICAgIC8vIE5lZWQgdG8gc2V0IGlzU3RhcnRpbmcgdG8gZmFsc2UgYW5kIGNhbGwgaGFuZGxlU3RyZWFtRmFpbHVyZSBpZiBzdHJlYW0gbW9uaXRvcnMgZm91bmQgYW4gaXNzdWVcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdHJlYW1QbGF5ZXIgPSBTdHJlYW1GYWN0b3J5LmNyZWF0ZSh0b2tlbiwgdGhpcy5fY2hhbm5lbENvbnRleHQsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrKTtcblxuICAgIGlmICghc3RyZWFtUGxheWVyKSB7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbVBsYXllci5zdGFydChcbiAgICAgIHVyaSxcbiAgICAgIHRva2VuLFxuICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cCxcbiAgICAgIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQuYmluZCh0aGlzKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgbGlzdGVuT25TdHJlYW1TZXR1cC5mYWlsKCk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKys7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCdjbGllbnQ6Y2xlYW51cC1hZnRlci1mYWlsZWQtc2V0dXAnKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBjaGFubmVsJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdGFydEFmdGVyU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGxheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZWRpYVN0cmVhbSA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXR0ZW1wdCBmYXN0LCBhZnRlciB0aGF0IGV4cG9uZW50aWFsIHdpdGggYmFja29mZiBpbnRlcnZhbFxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmLmdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQodGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZVN0cmVhbUZhaWx1cmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFuZEJ5OlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuT2ZmbGluZTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZXRyeSBzdGFydCB3aXRoIGluaXRpYWwgc3RhdGUgWyVzXSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUsIENoYW5uZWxTdGF0ZVt0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyB1bmF1dGhvcml6ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gcmVzdHJpY3RlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyBibG9ja2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGxheWluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGxheWluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBhdXNlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBpbnZva2UgcGxheSgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byB1bnN1cHBvcnRlZCBmZWF0dXJlLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIGNvbmZpZ3VyYXRpb24gZXJyb3IsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwUmVzb3VyY2VzKHJlYXNvbjogc3RyaW5nID0gZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgcGVlckNvbm5lY3Rpb24gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWU7XG5cbiAgICBpZiAocGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IG51bGw7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW0odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcblxuICAgIGNvbnN0IHBsYXlQcm9taXNlID0gdmlkZW9FbGVtZW50LnBsYXkoKTtcblxuICAgIGlmIChwbGF5UHJvbWlzZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwbGF5UHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc3QgaGFzQXVkaW9UcmFjayA9ICEhbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKHRyYWNrID0+IHtcbiAgICAgICAgcmV0dXJuIHRyYWNrLmtpbmQgPT09ICdhdWRpbyc7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGF1c2VkIHZpZGVvIGFmdGVyIHBsYXkgZmFpbGVkLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQXVkaW9UcmFjaykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSBtdXRlZCB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZpZGVvRWxlbWVudC5wbGF5KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBsYXllZCB2aWRlbyBhZnRlciBhdXRvIG11dGluZy4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkIHRvIHVubXV0ZS4nLCB0aGlzLnN0cmVhbUlkKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nLFxuICBQYXVzZWQsXG4gIFBsYXlpbmcsXG4gIFJlY292ZXJpbmcsXG4gIFJlY29ubmVjdGluZyxcbiAgU3RhbmRCeSxcbiAgU3RvcHBlZCxcbiAgVW5hdXRob3JpemVkLFxuICBHZW9SZXN0cmljdGVkLFxuICBHZW9CbG9ja2VkLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUsXG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgQ2hhbm5lbCwge0NoYW5uZWxPcHRpb25zfSBmcm9tICcuL0NoYW5uZWwnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCB7TWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxudHlwZSBDcmVhdGVDaGFubmVsT3B0aW9ucyA9IHtcbiAgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbjtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPGFueSwgYW55Pjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxPcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2tcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBjaGFubmVsT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogbnVtYmVyO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT47XG4gIGhhc0luc2VydGFibGVTdHJlYW1zPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFN1YmplY3Q8VHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT4+O1xuICBoYXNJbnNlcnRhYmxlU3RyZWFtczogU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQ2hhbm5lbENvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbERpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5yZW5kZXJlckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsSW5pdGlhbGl6YXRpb24gPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gbmV3IFN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4obnVsbCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PENoYW5uZWxTdGF0ZT4oQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nKTtcbiAgICB0aGlzLmF1dG9NdXRlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dG9QYXVzZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wbGF5aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50YXJnZXRMYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4ob3B0aW9ucz8udGFyZ2V0TGFnID8/IGRlZmF1bHRUYXJnZXRMYWcpO1xuICAgIHRoaXMubGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KDApO1xuICAgIHRoaXMuYml0cmF0ZUxpbWl0ID0gbmV3IFN1YmplY3Q8Qml0c1BlclNlY29uZD4oMCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gbmV3IFN1YmplY3Q8RGltZW5zaW9uPihEaW1lbnNpb24uZW1wdHkpO1xuICAgIHRoaXMuZmFpbHVyZUNvdW50ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICB0aGlzLmVuZFBvaW50ID0gbmV3IFN1YmplY3Q8RW5kUG9pbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IFN1YmplY3Q8SVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5ydGNTdGF0aXN0aWNzID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KG51bGwpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdGhpcy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gbmV3IFN1YmplY3Q8VHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT4+KG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuICAgIHRoaXMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPighIW9wdGlvbnM/Lmhhc0luc2VydGFibGVTdHJlYW1zKTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25Db250ZXh0IHtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBwZWVyQ29ubmVjdGlvbjogU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVDb250ZXh0IHtcbiAgaXNTdGFydGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgaXNEaXNwb3NlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gZmFsc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5Db250ZXh0IHtcbiAgdG9rZW46IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj4odG9rZW4pO1xuICAgIHRoaXMudG9rZW5FeHBpcmluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0RGlzY292ZXJ5VXJpID0gJ2h0dHBzOi8vcGNhc3QucGhlbml4cnRzLmNvbS9wY2FzdC9lbmRQb2ludHMnO1xuXG5leHBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZU1vZGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlTW9kZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlKTogQml0cmF0ZU1vZGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVNb2RlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLk5vcm1hbDpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Gb3JjZTpcbiAgICAgICAgcmV0dXJuICdGb3JjZSc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVNb2RlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZVN0YXRlLCBCaXRyYXRlU3RhdGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlU3RhdGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUpOiBCaXRyYXRlU3RhdGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVTdGF0ZSkge1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuS2VlcDpcbiAgICAgICAgcmV0dXJuICdLZWVwJztcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVTdGF0ZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgRGlzY292ZXJ5U2VydmljZSBmcm9tICcuL0Rpc2NvdmVyeVNlcnZpY2UnO1xuXG5jb25zdCBkaXNjb3ZlcnlDYWNoZUludGVydmFsID0gNjAwMDA7XG5cbmludGVyZmFjZSBJUGVyVVJJRW5kcG9pbnQgeyBbeDogc3RyaW5nXTogUHJvbWlzZTxFbmRQb2ludD4gfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3Zlcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGU6IElQZXJVUklFbmRwb2ludCA9IHt9O1xuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpOiBVUkwpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdKSB7XG4gICAgICByZXR1cm4gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc2NvdmVyeVNlcnZpY2UgPSBuZXcgRGlzY292ZXJ5U2VydmljZSh1cmkpO1xuICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID0gZGlzY292ZXJ5U2VydmljZS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCgpO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0udGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPT09IGNhY2hlZFZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICAgICAgfVxuICAgICAgfSwgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbmNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkucHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIHdpdGggbm8gZGF0YSBbJHt1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzU3RyaW5nID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGFzU3RyaW5nLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBuZXcgRW5kUG9pbnQoZW5kUG9pbnQsIHRpbWVvdXQpKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KHRpbWVvdXQ6IG51bWJlciA9IGRlZmF1bHRUaW1lb3V0KTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IERpc2NvdmVyeVVyaS5idWlsZERpc2NvdmVyeVVybCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGF3YWl0IHRoaXMuZGlzY292ZXJOZWFyYnlFbmRQb2ludHMobmV3IFVSTCh1cmwpLCB0aW1lb3V0KTtcbiAgICBsZXQgZmFpbGVkUmVxdWVzdHMgPSAwO1xuICAgIGNvbnN0IHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkID0gKCk6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGZhaWxlZFJlcXVlc3RzID49IGVuZFBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmVqZWN0KGBEaXNjb3Zlcnkgb2YgWyR7ZW5kUG9pbnRzLmxlbmd0aH1dIGVuZHBvaW50cyBmcm9tIFske3VybH1dIGZhaWxlZCwgcHJldmVudGluZyBpdCBmcm9tIGNvbXBsZXRpbmdgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlbmRQb2ludCA9IGF3YWl0IFByb21pc2UucmFjZShlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IGVuZFBvaW50XG4gICAgICAucGluZygpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGluZyBlbmQgcG9pbnQgWyVzXScsIGVuZFBvaW50LCBlKTtcblxuICAgICAgICBmYWlsZWRSZXF1ZXN0cysrO1xuXG4gICAgICAgIHJldHVybiBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHRpbWUgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcmVkIGVuZCBwb2ludCBbJXNdIHdpdGggdGltZSBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSwgdGltZSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICAgICAgcnVudGltZTogKG5vdyAtIFNESy5wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgICAgICB2YWx1ZToge3VpbnQ2NDogdGltZSB8fCAwfSxcbiAgICAgICAgICByZXNvdXJjZTogZW5kUG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBraW5kOiAncGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgICAgfSkpKTtcblxuICAgIHJldHVybiBlbmRQb2ludDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9IGZyb20gJy4uL2RlZmF1bHRzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlVcmkge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZGlzY292ZXJ5VXJpOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KGRlZmF1bHREaXNjb3ZlcnlVcmkpO1xuXG4gIHN0YXRpYyBnZXQgdXJpKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeVVyaS5fZGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkRGlzY292ZXJ5VXJsKHVyaTogVVJMKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHVyaS50b1N0cmluZygpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIHVybC5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5pbXBvcnQge1xuICBJU3Vic2NyaWJlUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lEZXN0cm95U3RyZWFtUmVxdWVzdCwgSURlc3Ryb3lTdHJlYW1SZXNwb25zZX0gZnJvbSAnLi4vYXBpL0Rlc3Ryb3lTdHJlYW0nO1xuaW1wb3J0IHtJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QsIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9BZGRJY2VDYW5kaWRhdGVzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZSwgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEJpdHJhdGVNb2RlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVNb2RlTWFwcGluZyc7XG5pbXBvcnQgQml0cmF0ZVN0YXRlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVTdGF0ZU1hcHBpbmcnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IHtcbiAgSVB1Ymxpc2hSZXNwb25zZSxcbiAgSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QsXG4gIFB1Ymxpc2hTdGF0dXNcbn0gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNztcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBSZW1vdmVUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIERlc3Ryb3lTdHJlYW1TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtcbiAgc3RhdHVzOiBQdWJsaXNoU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn07XG5cbmludGVyZmFjZSBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzO1xuICBzZXNzaW9uRGVzY3JpcHRpb24/OiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5pbnRlcmZhY2UgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXM7XG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXM7XG59XG5cbmludGVyZmFjZSBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kUG9pbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRW5kUG9pbnQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXJpOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcm91bmRUcmlwVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIpIHtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gICAgdGhpcy5fdGltZW91dCA9IHRpbWVvdXQ7XG5cbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW5kIHBvaW50IHJlcXVpcmVzIGEgdGltZW91dGApO1xuICAgIH1cbiAgfVxuXG4gIGdldCByb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRW5kUG9pbnRbdXJpPSR7dGhpcy5fdXJpfV1gO1xuICB9XG5cbiAgYXN5bmMgcGluZygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRQaW5nVXJsKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBQaW5nIHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGhpcy5fdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7IC8qIEhhbmRsZSAqL1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQaW5nIGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIHRoaXMuX3JvdW5kVHJpcFRpbWUgPSBmaW5pc2hlZCAtIHN0YXJ0O1xuXG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICBhc3luYyBzdWJzY3JpYmUodG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAnc3Vic2NyaWJlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYFN1YnNjcmliZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHN1YnNjcmliZSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBwdWJsaXNoKG5hbWU6IHN0cmluZywgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3B1Ymxpc2gnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgb3B0aW9uczogWyd1cGxvYWQnXSxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFsndXBsb2FkJ10sXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgbmV3IEVycm9yKGBQdWJsaXNoIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBQdWJsaXNoU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHB1Ymxpc2ggcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtOiBJU3RyZWFtLCBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzY3JpcHRpb24nLCAncmVtb3RlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICB0eXBlOiBzZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgc2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIG5ldyBFcnJvcihgU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHNldCByZW1vdGUgZGVzY3JpcHRpb24gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGxpbWl0Qml0cmF0ZShcbiAgICBzdHJlYW06IElTdHJlYW0sXG4gICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXIsXG4gICAgYml0cmF0ZUluQml0c1BlclNlY29uZDogQml0c1BlclNlY29uZCxcbiAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSxcbiAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUsXG4gICk6IFByb21pc2U8SVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdiaXRyYXRlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZSksXG4gICAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlKVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgbmV3IEVycm9yKGBTZXQgbGltaXQgYml0cmF0ZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3Qgc2V0IGxpbWl0IGJpdHJhdGUgcmVzcG9uc2UgWyVzXSBpbiBbJXNdIG1zJywgc3RhdHVzLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiB7c3RhdHVzfTtcbiAgfVxuXG4gIGFzeW5jIGFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtOiBJU3RyZWFtLCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSwgZGlzY292ZXJ5Q29tcGxldGVkOiBib29sZWFuLCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnaWNlJywgJ2NhbmRpZGF0ZXMnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBjYW5kaWRhdGVzLFxuICAgICAgZGlzY292ZXJ5Q29tcGxldGVkLFxuICAgICAgb3B0aW9uc1xuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIG5ldyBFcnJvcihgQWRkIGljZSBjYW5kaWRhdGVzIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgYWRkIElDRSBjYW5kaWRhdGVzIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbShzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBEZWxldGUgc3RyZWFtIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgc3RyZWFtJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGRlc3Ryb3kgc3RyZWFtIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGRlc3Ryb3lTdHJlYW1SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbU9uVW5tb3VudChzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFuYXZpZ2F0b3I/LnNlbmRCZWFjb24pIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmRlc3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBuYXZpZ2F0b3Iuc2VuZEJlYWNvbih1cmwsIGZvcm1EYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRVcmwocGF0aDogc3RyaW5nW10pOiBVUkwge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBwYXRoQXNBcnJheSA9IHVyaS5wYXRobmFtZS5zcGxpdCgnLycpO1xuXG4gICAgcGF0aEFzQXJyYXkubGVuZ3RoID0gcGF0aEFzQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgIHVyaS5wYXRobmFtZSA9IHBhdGhBc0FycmF5LmNvbmNhdCguLi5wYXRoKS5qb2luKCcvJyk7XG5cbiAgICByZXR1cm4gdXJpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBpbmdVcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICB1cmkuc2VhcmNoID0gYD8ke25ldyBVUkxTZWFyY2hQYXJhbXMoW1sndHlwZScsICdodHRwJ10sIFsndmVyc2lvbicsIHNka1ZlcnNpb25dLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFB1Ymxpc2hTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTdWJzY3JpYmVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IERlc3Ryb3lTdHJlYW1TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU3Vic2NyaWJlUmVzcG9uc2U7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2U6IElTdWJzY3JpYmVSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLmxhZyA9IGRhdGEubGFnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElQdWJsaXNoUmVzcG9uc2U7XG4gICAgY29uc3QgcHVibGlzaFJlc3BvbnNlOiBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHB1Ymxpc2hSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHtpY2VTZXJ2ZXJzOiBbXX07XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9IGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICB1cmxzOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSBjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSBjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y0NvbmZpZ3VyYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2hhbm5lbFN0YXRlfSBmcm9tICcuLi9jaGFubmVscyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENodW5rZWRTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NodW5rZWRTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfc3RyZWFtU3RhdGlzdGljczogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIHByaXZhdGUgX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IElEaXNwb3NhYmxlPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSlcbiAgICAgIC50aGVuKGVuZFBvaW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZmVyU2RwID0gY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgb3JpZ2luU3RhcnRUaW1lOiBEYXRlLm5vdygpIC0gbGFnICsgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDIsXG4gICAgICAgICAgbGFnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIExpdmVTdHJlYW1pbmcuc3RhcnQodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgb2ZmZXJTZHAsIG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4ocGxheWVyID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGxheWVyO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdMaXZlU3RyZWFtaW5nIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb25pdG9yKHBsYXllcjogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0cmVhbVN0YXRpc3RpY3MgPSBMaXZlU3RyZWFtaW5nLmdldFN0YXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQrKztcblxuICAgICAgICBpZiAodGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA+IDYpIHtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcyA9IG5ld1N0cmVhbVN0YXRpc3RpY3M7XG4gICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcbiAgICB9LCAxMDAwKTtcblxuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtJSGxzUGxheWVyVHlwZX0gZnJvbSAnLi9JSGxzUGxheWVyJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGxzUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElIbHNQbGF5ZXJUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcuaGxzUGxheWVyKSB7XG4gICAgICBpZiAoTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIoe1xuICAgICAgICAgIGVuYWJsZVdvcmtlcjogdHJ1ZSxcbiAgICAgICAgICBtYXhCdWZmZXJMZW5ndGg6IDEsXG4gICAgICAgICAgbGl2ZUJhY2tCdWZmZXJMZW5ndGg6IDAsXG4gICAgICAgICAgbGl2ZVN5bmNEdXJhdGlvbjogNyxcbiAgICAgICAgICBsaXZlRHVyYXRpb25JbmZpbml0eTogdHJ1ZSxcbiAgICAgICAgICBsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uOiBJbmZpbml0eSxcbiAgICAgICAgICBoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2Q6IDFcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5sb2FkU291cmNlKHRoaXMuX21hbmlmZXN0VVJJKTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmF0dGFjaE1lZGlhKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnKSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQuc3JjID0gdGhpcy5fbWFuaWZlc3RVUkk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExpdmVTdHJlYW1pbmcuaGxzUGxheWVyICYmIExpdmVTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCk7XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICB3aWR0aDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldFdpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0SGVpZ2h0LFxuICAgICAgY3VycmVudFRpbWU6IHRoaXMuX3BsYXllci5tZWRpYS5jdXJyZW50VGltZSxcbiAgICAgIGxhZzogMC4wLFxuICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlLFxuICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnSURMRScpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRVJST1InIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRU5ERUQnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ0xPQURJTkcnKSB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnV0FJVElORycpKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgKGN1cnJlbnRUaW1lICsgKHRoaXMuX29wdGlvbnMubGFnIC8gMTAwMCkpIC0gdHJ1ZUN1cnJlbnRUaW1lKTtcblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyICYmIHRoaXMuX3BsYXllci5kZXN0cm95KSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5zZXJ0YWJsZVN0cmVhbXMge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBzdGF0aWMgc2V0dXBNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKHRyYW5zZm9ybTogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT4sIHN0cmVhbTogTWVkaWFTdHJlYW0pIHtcbiAgICBjb25zdCB0cmFjayA9IHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdO1xuXG4gICAgaWYgKHRyYWNrLmtpbmQgPT09ICd2aWRlbycpIHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtfSk7XG4gICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2t9KTtcbiAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiAndmlkZW8nfSk7XG4gICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICBzb3VyY2VcbiAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZFN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuXG4gICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuXG4gICAgICByZXR1cm4gdHJhbnNmb3JtZWRTdHJlYW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5zZXJ0YWJsZVN0cmVhbXMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFdlYlBsYXllciBmcm9tICcuL1dlYlBsYXllcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgU2hha2FQbGF5ZXIgZnJvbSAnLi9TaGFrYVBsYXllcic7XG5pbXBvcnQgSGxzUGxheWVyIGZyb20gJy4vSGxzUGxheWVyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgTGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgTGl2ZVN0cmVhbWluZyB7XG4gIHByaXZhdGUgc3RhdGljIF9wZW5kaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGljIF9obHNQbGF5ZXI6IEhsc1BsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9waGVuaXhXZWJQbGF5ZXI6IFdlYlBsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYTogU2hha2FUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgc3RhdGljIF9wbGF5ZXI6IFNoYWthUGxheWVyIHwgV2ViUGxheWVyIHwgSGxzUGxheWVyO1xuXG4gIHN0YXRpYyBnZXQgaGxzUGxheWVyKCk6IEhsc1BsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9obHNQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBoZW5peFdlYlBsYXllcigpOiBXZWJQbGF5ZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fcGhlbml4V2ViUGxheWVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYSgpOiBTaGFrYVR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzdGFydCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKTogUHJvbWlzZTxJRGlzcG9zYWJsZT4ge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllciB8fCB0aGlzLl9zaGFrYSB8fCB0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCk7XG4gICAgfVxuXG4gICAgaWYgKCFTREsud2ViUGxheWVyTG9hZGVyICYmICFTREsuc2hha2FQbGF5ZXJMb2FkZXIgJiYgIVNESy5obHNKc0xvYWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwbGF5ZXIgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkLWZlYXR1cmUsIGFkZCBzdHJlYW0gcGxheWVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKFNESy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLmhsc0pzTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5faGxzUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsud2ViUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fcGhlbml4V2ViUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5zaGFrYVBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3NoYWthID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBsYXkoUGxheWVyOiB0eXBlb2YgV2ViUGxheWVyIHwgdHlwZW9mIFNoYWthUGxheWVyIHwgdHlwZW9mIEhsc1BsYXllciwgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucyk6IElEaXNwb3NhYmxlIHtcbiAgICBjb25zdCBkYXNoTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tcGRcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgaGxzTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tM3U4XFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IG1hbmlmZXN0VXJsID0gZGFzaE1hbmlmZXN0VXJsTWF0Y2ggJiYgZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gPyBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuICAgIGNvbnN0IHBsYXlsaXN0VXJsID0gaGxzTWFuaWZlc3RVcmxNYXRjaCAmJiBobHNNYW5pZmVzdFVybE1hdGNoWzFdID8gaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuXG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhscyB8fCAodGhpcy5faGxzUGxheWVyICYmIHRoaXMuX2hsc1BsYXllci5pc1N1cHBvcnRlZCgpKSkge1xuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdobHMnLCBzdHJlYW1JZCwgcGxheWxpc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2Rhc2gnLCBzdHJlYW1JZCwgbWFuaWZlc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZGVkKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZyk6IElEaXNwb3NhYmxlIHtcbiAgICBpZiAoIXRoaXMuX3NoYWthICYmICF0aGlzLl9waGVuaXhXZWJQbGF5ZXIgJiYgIXRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShXZWJQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2hha2EpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoU2hha2FQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gTmV0d29ya1N0YXRlcyB7XG4gIE5ldHdvcmtFbXB0eSxcbiAgTmV0d29ya0lkbGUsXG4gIE5ldHdvcmtMb2FkaW5nLFxuICBOZXR3b3JrTm9Tb3VyY2Vcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgSW5zZXJ0YWJsZVN0cmVhbXMgZnJvbSAnLi9JbnNlcnRhYmxlU3RyZWFtcyc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwLCBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgIF0pXG4gICAgICAudGhlbigoW2VuZFBvaW50LCB7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259XSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdMb2NhbCBvZmZlcjpcXG4nICsgbG9jYWxPZmZlci5zZHApO1xuXG4gICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgc3RyZWFtID0gZS5zdHJlYW1zWzBdO1xuXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBJbnNlcnRhYmxlU3RyZWFtcy5zZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjay52YWx1ZSwgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG50eXBlIFNoYWthT3B0aW9ucyA9IHtcbiAgYWJyOiB7XG4gICAgZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiBudW1iZXI7XG4gIH07XG4gIG1hbmlmZXN0OiB7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgc3RyZWFtaW5nOiB7XG4gICAgcmVidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlckJlaGluZDogbnVtYmVyO1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgICAgIGJhY2tvZmZGYWN0b3I6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTaGFrYSB7XG4gIGNvbmZpZ3VyZTogKG86IFNoYWthT3B0aW9ucykgPT4gdm9pZDtcbiAgbG9hZDogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0czogKCkgPT4gTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gIHVubG9hZDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hha2FQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2hha2FQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElTaGFrYTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChMaXZlU3RyZWFtaW5nLnNoYWthKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zOiBTaGFrYU9wdGlvbnMgPSB7XG4gICAgICAgIGFicjoge2RlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogMjAwMDAwMH0sXG4gICAgICAgIG1hbmlmZXN0OiB7cmV0cnlQYXJhbWV0ZXJzOiB7dGltZW91dDogMTAwMDB9fSxcbiAgICAgICAgc3RyZWFtaW5nOiB7XG4gICAgICAgICAgcmVidWZmZXJpbmdHb2FsOiAyLFxuICAgICAgICAgIGJ1ZmZlcmluZ0dvYWw6IDEwLFxuICAgICAgICAgIGJ1ZmZlckJlaGluZDogMzAsXG4gICAgICAgICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAxMCxcbiAgICAgICAgICAgIGJhY2tvZmZGYWN0b3I6IDEuMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IExpdmVTdHJlYW1pbmcuc2hha2EuUGxheWVyKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB0aGlzLmxvYWRQbGF5ZXIocGxheWVyT3B0aW9ucyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgICBsYWc6IDAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIC4uLnRoaXMuX3BsYXllci5nZXRTdGF0cygpLFxuICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICBsYWc6IDBcbiAgICB9O1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudCkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBsYWc7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci51bmxvYWQoKTtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBsYXllcihwbGF5ZXJDb25maWc6IFNoYWthT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5jb25maWd1cmUocGxheWVyQ29uZmlnKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wbGF5ZXIubG9hZCh0aGlzLl9tYW5pZmVzdFVSSSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEQVNIIGxpdmUgc3RyZWFtIGhhcyBiZWVuIGxvYWRlZCcsIHRoaXMuX3N0cmVhbUlkKTtcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KCk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRXJyb3Igd2hpbGUgbG9hZGluZyBEQVNIIGxpdmUgc3RyZWFtIFslc10nLCB0aGlzLl9zdHJlYW1JZCwgZS5jb2RlLCBlKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCBDaHVua2VkU3RyZWFtIGZyb20gJy4vQ2h1bmtlZFN0cmVhbSc7XG5pbXBvcnQgUmVhbFRpbWVTdHJlYW0gZnJvbSAnLi9SZWFsVGltZVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1GYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1pbmcnKTtcblxuICBzdGF0aWMgY3JlYXRlKHRva2VuOiBzdHJpbmcsIGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHtcbiAgICBjb25zdCB0b2tlbkNhcGFiaWxpdGllcyA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLmNhcGFiaWxpdGllcztcblxuICAgIGlmICh0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygncnRtcCcpKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1NESyBkb2VzIG5vdCBzdXBwb3J0IFJUTVAgcGxheWJhY2suJyk7XG4gICAgICBjaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpKSB7XG4gICAgICByZXR1cm4gbmV3IENodW5rZWRTdHJlYW0oY2hhbm5lbENvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhbFRpbWVTdHJlYW0oY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmVhbUZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5jb25zdCBiYW5kd2lkdGhUb1N0YXJ0QXQgPSAzMDAwMDAwOyAvLyBDb3JyZXNwb25kcyB0byA3MjBwIGluIG1vc3Qgc2V0dXBzXG5jb25zdCBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCA9IDE1MDAwO1xuXG50eXBlIEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIgPSAoZXZ0OiBXZWJQbGF5ZXJFdmVudCkgPT4gdm9pZDtcbnR5cGUgV2ViUGxheWVyRXZlbnQgPSB7XG4gIGNvZGU6IG51bWJlcjtcbiAgc2V2ZXJpdHk6IG51bWJlcjtcbiAgZXJyb3I6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJV2ViUGxheWVyIHtcbiAgc3RhcnQ6ICh1cmw6IHN0cmluZykgPT4gdm9pZDtcbiAgYWRkRXZlbnRMaXN0ZW5lcihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyKTogdm9pZDtcbiAgZGlzcG9zZSgpOiB2b2lkO1xuICBlcnJvcnM6IHtcbiAgICBzZXZlcml0eToge1xuICAgICAgUkVDT1ZFUkFCTEU6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1dlYlBsYXllcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSVdlYlBsYXllcjtcbiAgcHJpdmF0ZSBfbGFzdFJlbG9hZFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllcikge1xuICAgICAgY29uc3QgcGxheWVyT3B0aW9ucyA9IHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgYmFuZHdpZHRoVG9TdGFydEF0XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuV2ViUGxheWVyKHRoaXMuX2xvZ2dlciwgdGhpcy5fdmlkZW9FbGVtZW50LCBwbGF5ZXJPcHRpb25zKTtcbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCh0aGlzLl9tYW5pZmVzdFVSSSk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yT2JqZWN0ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2FuUmVsb2FkKCkgJiYgZXJyb3JPYmplY3QgJiYgKGVycm9yT2JqZWN0LmNvZGUgPT09IDMgfHwgZXJyb3JPYmplY3Quc2V2ZXJpdHkgPT09IExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLmVycm9ycy5zZXZlcml0eS5SRUNPVkVSQUJMRSkpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gYWZ0ZXIgZXJyb3IgZXZlbnQgWyVqXScsIGVycm9yT2JqZWN0KTtcbiAgICAgICAgICB0aGlzLnJlbG9hZElmQWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcmVsb2FkIHdpdGggZXJyb3IgWyVqXScsIGVycm9yT2JqZWN0KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyICYmIExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLmlzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMC4wLFxuICAgICAgICBsYWc6IDAuMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZSxcbiAgICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gc3RhdGlzdGljcy5jdXJyZW50VGltZSB8fCB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ107XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuaXNOYXRpdmUgJiYgc3RhdGlzdGljcy5kZWxpdmVyeVR5cGUgPT09ICdIbHMnKSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgLSBzdGF0aXN0aWNzLmxhZztcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRpc3RpY3MuY3VycmVudFRpbWUpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRpc3RpY3MuaXNOYXRpdmUpIHtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gTWF0aC5tYXgoMC4wLCB0cnVlQ3VycmVudFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci5kaXNwb3NlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY2FuUmVsb2FkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkID0gIXRoaXMuX2xhc3RSZWxvYWRUaW1lIHx8IERhdGUubm93KCkgLSB0aGlzLl9sYXN0UmVsb2FkVGltZSA+IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkO1xuXG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvRWxlbWVudCAmJiB0aGlzLl9wbGF5ZXIgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCAhPT0gMCAmJiBoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkSWZBYmxlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5SZWxvYWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIFJlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIHRoYXQgd2FzIGFjdGl2ZSBmb3IgYXQgbGVhc3QgWyVzXSBzZWNvbmRzJywgdGhpcy5fc3RyZWFtSWQsIG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIC8gMTAwMCk7XG5cbiAgICB0aGlzLl9sYXN0UmVsb2FkVGltZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19TREtWRVJTSU9OX186IHN0cmluZztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVyc2lvbk1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBfZGVmYXVsdFZlcnNpb24gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgc3RhdGljIGdldCBzZGtWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBfX1NES1ZFUlNJT05fXztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZlcnNpb247XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5U2VydmljZSBmcm9tICcuL1RlbGVtZXRyeVNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuLi9sb2dnZXIvSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5QXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlTZXJ2aWNlOiBUZWxlbWV0cnlTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeTtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZDtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZDtcbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlID0gbmV3IFRlbGVtZXRyeVNlcnZpY2UodGVsZW1ldHJ5Q29uZmlndXJhdGlvbik7XG4gIH1cblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZS5wdXNoKGxvZ0xldmVsLCBtZXNzYWdlLCBjYXRlZ29yeSwgZGF0ZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L2xvZ3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHRlbGVtZXRyeVVybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIHRlbGVtZXRyeVVybC5wYXRobmFtZSA9IHRlbGVtZXRyeVVybC5wYXRobmFtZSArICcvbG9ncyc7XG5cbiAgICB0aGlzLl91cmwgPSB0ZWxlbWV0cnlVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSA4MTkyO1xuXG5pbnRlcmZhY2UgSUxvZ0l0ZW0ge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBsZXZlbDogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gIHByaXZhdGUgX2xvZ3M6IEFycmF5PElMb2dJdGVtPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgX2RvbWFpbiA9IGxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBsb2dSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcC50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgbGV2ZWw6IExvZ2dpbmdMZXZlbFtsb2dMZXZlbF0sXG4gICAgICBjYXRlZ29yeSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpblxuICAgIH07XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHRoaXMuX2xvZ3MucHVzaChsb2dSZWNvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2dzLnVuc2hpZnQobG9nUmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9ncyhsb2dNZXNzYWdlczogQXJyYXk8SUxvZ0l0ZW0+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBsb2dNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9nc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9sb2dzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBudW1iZXJPZkxvZ3NUb1NlbmQgPSAwO1xuICAgIGxldCBzaXplT2ZMb2dzVG9TZW5kID0gMDtcblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBnZXRMb2dTaXplID0gKGxvZzogSUxvZ0l0ZW0pOiBudW1iZXIgPT4gT2JqZWN0LnZhbHVlcyhsb2cpXG4gICAgICAucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIChpdGVtID8gaXRlbS5sZW5ndGggOiAwKSwgMCk7XG5cbiAgICB3aGlsZSAodGhpcy5fbG9ncy5sZW5ndGggPiBudW1iZXJPZkxvZ3NUb1NlbmQgJiYgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgc2l6ZU9mTG9nc1RvU2VuZCA8IHJlcXVlc3RTaXplTGltaXQpIHtcbiAgICAgIHNpemVPZkxvZ3NUb1NlbmQgKz0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kKys7XG4gICAgfVxuXG4gICAgaWYgKCFudW1iZXJPZkxvZ3NUb1NlbmQpIHtcbiAgICAgIHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlID0gdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsXG4gICAgICAgIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIChyZXF1ZXN0U2l6ZUxpbWl0IC0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pKSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQgPSAxO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ01lc3NhZ2VzID0gdGhpcy5fbG9ncy5zbGljZSgwLCBudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgdGhpcy5fbG9ncyA9IHRoaXMuX2xvZ3Muc2xpY2UobnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRMb2dzKGxvZ01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVyYXRpb25zIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkdXJhdGlvbiA9IDApIHtcbiAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICB9XG5cbiAgdG9Jc29TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fZHVyYXRpb24gPT09IDApIHtcbiAgICAgIHJldHVybiAnUDBTJztcbiAgICB9XG5cbiAgICBjb25zdCBpc05lZ2F0aXZlID0gdGhpcy5fZHVyYXRpb24gPCAwO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gaXNOZWdhdGl2ZSA/IE1hdGguYWJzKHRoaXMuX2R1cmF0aW9uKSA6IHRoaXMuX2R1cmF0aW9uO1xuICAgIGxldCBvZmZzZXQgPSBNYXRoLmZsb29yKGR1cmF0aW9uKTtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBvZmZzZXQgJSAxMDAwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyAxMDAwKTtcblxuICAgIGNvbnN0IHNlY29uZHMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgbWludXRlcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBob3VycyA9IG9mZnNldCAlIDI0O1xuICAgIGNvbnN0IHBhcnRzID0gWydQVCddO1xuXG4gICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy0nKTtcbiAgICB9XG5cbiAgICBpZiAoaG91cnMpIHtcbiAgICAgIHBhcnRzLnB1c2goaG91cnMgKyAnSCcpO1xuICAgIH1cblxuICAgIGlmIChtaW51dGVzKSB7XG4gICAgICBwYXJ0cy5wdXNoKG1pbnV0ZXMgKyAnTScpO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmRzIHx8IG1pbGxpc2Vjb25kcykge1xuICAgICAgcGFydHMucHVzaChTdHJpbmcoc2Vjb25kcykpO1xuXG4gICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIHBhcnRzLnB1c2goJy4nICsgdGhpcy5wYWRTdGFydChtaWxsaXNlY29uZHMudG9TdHJpbmcoKSwgMywgJzAnKSk7XG4gICAgICB9XG5cbiAgICAgIHBhcnRzLnB1c2goJ1MnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMuam9pbignJyk7XG4gIH1cblxuICBwYWRTdGFydChpdGVtOiBzdHJpbmcsIHRhcmdldExlbmd0aDogbnVtYmVyLCBwYWRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoID4+IDA7XG4gICAgcGFkU3RyaW5nID0gU3RyaW5nKCh0eXBlb2YgcGFkU3RyaW5nICE9PSAndW5kZWZpbmVkJyA/IHBhZFN0cmluZyA6ICcgJykpO1xuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggLSBpdGVtLmxlbmd0aDtcblxuICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFkU3RyaW5nLnNsaWNlKDAsIHRhcmdldExlbmd0aCkgKyBpdGVtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMjAwMDtcbmNvbnN0IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMTtcbmNvbnN0IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMzAwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvbmVudGlhbEJhY2tvZmYge1xuICBwcml2YXRlIHJlYWRvbmx5IF9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kXG4gICkge1xuICAgIHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICB9XG5cbiAgZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudChmYWlsdXJlQ291bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYmFja29mZkludGVydmFsSW5TZWNvbmRzID0gdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCAvIDEwMDA7XG4gICAgY29uc3QgcmFuZG9taXphdGlvbiA9IDAuNSArICgwLjUgKiBNYXRoLnJhbmRvbSgpKTsgLy8gWzAuNSwgMSlcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmYgPSBNYXRoLnBvdyhiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMsIGZhaWx1cmVDb3VudCAtIDIpOyAvLyAgWzEvNCAxLzIgMSAyIDQgOCAuLi4uXVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uID0gTWF0aC5mbG9vcihleHBvbmVudGlhbEJhY2tvZmYpICogcmFuZG9taXphdGlvbjtcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQgPSBNYXRoLmNlaWwoTWF0aC5tYXgoZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gKiAxMDAwLCB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKSk7XG5cbiAgICByZXR1cm4gTWF0aC5taW4oZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kLCB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fbmV0d29ya01vbml0b3IuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuaXNGb3JlZ3JvdW5kLnN1YnNjcmliZShpc0ZvcmVncm91bmQgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5ydHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdGVuT25TdHJlYW1TZXR1cCgpOiBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbVNldHVwTGlzdGVuZXIodGhpcy5fcGFnZUxvYWRUaW1lKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdENoYW5nZSA9IHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlkZW9UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfbGlzdGVuVG9GaXJzdFRpbWU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JDb250aW51YXRpb246IChldmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbGFzdFByb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcjogRGlzcG9zYWJsZTtcbiAgcHJpdmF0ZSBfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyOiBEaXNwb3NhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQpOiB2b2lkID0+IHRoaXMub25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG5cbiAgICB0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcik7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2luY2VQYWdlTG9hZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxUaW1lVG9GaXJzdEZyYW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG4gICAgdGhpcy5wdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX2NoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBDaGFubmVsIGNyZWF0aW9uIHRvIGZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU3RhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZpZGVvU3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuU3RhbGxlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyBzdGFsbGVkJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHRpZihfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdKSB7XG5cdFx0cmV0dXJuIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0uZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IG1vZHVsZVsnZGVmYXVsdCddIDpcblx0XHQoKSA9PiBtb2R1bGU7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIG1vZHVsZSBleHBvcnRzIG11c3QgYmUgcmV0dXJuZWQgZnJvbSBydW50aW1lIHNvIGVudHJ5IGlubGluaW5nIGlzIGRpc2FibGVkXG4vLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbnJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
9944
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vUHJpdmFjeU1vZGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGVMaXN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1N0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9BcHBlbmRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Db25zb2xlQXBwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ1RocmVzaG9sZC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvSGxzUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0luc2VydGFibGVTdHJlYW1zLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0xpdmVTdHJlYW1pbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTmV0d29ya1N0YXRlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TaGFrYVBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1dlYlBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9EaW1lbnNpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbImRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJEaXNwb3NhYmxlTGlzdCIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiU3ViamVjdCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsIlJlYWRPbmx5U3ViamVjdCIsImRldGVjdFRhYkZvY3VzQ2hhbmdlIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwiZ2V0IiwidmFsdWUiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsImRpc3Bvc2UiLCJfZGlzcG9zYWJsZXMiLCJfdGhpcyIsImhpZGRlbiIsInZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudCIsIl90eXBlb2YiLCJtc0hpZGRlbiIsIndlYmtpdEhpZGRlbiIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJpc0ZvcmVncm91bmQiLCJzZXRGb2N1c1N0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZCIsIkRpc3Bvc2FibGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfdGhpczIiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJCcm93c2VyRGV0ZWN0b3IiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24iLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJicm93c2VyTmFtZUFuZFZlcnNpb24iLCJtYXRjaCIsIl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUiLCJwYXJzZUJyb3dzZXJOYW1lIiwiYnJvd3Nlck5hbWVMaXN0Iiwic3BsaXQiLCJwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24iLCJicm93c2VyVmVyc2lvbkxpc3QiLCJmdWxsVmVyc2lvbiIsIk51bWJlciIsIm1zaWUiLCJpbmRleE9mIiwiY29uY2F0IiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJ0cmlkZW50IiwidmVyc2lvbiIsImluY2x1ZGVzIiwiQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciIsImdldFN0cmluZ1ZhbHVlIiwibmFtZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlIiwiZGVmYXVsdFN0cmluZ1ZhbHVlIiwiZ2V0Qm9vbGVhblZhbHVlIiwidmFsdWVGcm9tVXJpIiwiZGVmYXVsdEJvb2xlYW5WYWx1ZSIsIlRlbGVtZXRyeUxldmVsTWFwcGluZyIsIlRlbGVtZXRyeURlZmF1bHQiLCJMb2dnaW5nTGV2ZWxNYXBwaW5nIiwiTG9nZ2VyRGVmYXVsdHMiLCJtZXRhVmFsdWUiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0QXR0cmlidXRlIiwidmFsdWVVUklQYXJhbWV0ZXJOYW1lIiwiVVJMU2VhcmNoUGFyYW1zIiwibG9jYXRpb24iLCJzZWFyY2giLCJ1bmRlZmluZWQiLCJOZXR3b3JrTW9uaXRvciIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsIl9pc1N1cHBvcnRlZCIsIl9ydHQiLCJfZWZmZWN0aXZlVHlwZSIsIl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZG93bmxpbmsiLCJkb3dubGlua01heCIsImdldEVmZmVjdGl2ZVR5cGUiLCJlZmZlY3RpdmVUeXBlIiwidHlwZSIsImdldFJvdW5kVHJpcFRpbWUiLCJydHQiLCJsaXN0ZW5lciIsIlByaXZhY3lNb2RlIiwiX2lzUHJpdmF0ZSIsImFwcGx5SXNQcml2YXRlIiwiX19QUklWQUNZX01PREVfXyIsImUiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiTG9nZ2VyRmFjdG9yeSIsIlNESyIsIl9zdGFydFRpbWUiLCJfcGFnZUxvYWRUaW1lIiwic3VjY2VzcyIsInN0cmVhbUlkIiwicmVjb3JkU3RyZWFtTWV0cmljIiwiTWV0cmljc1R5cGUiLCJmYWlsIiwibWV0cmljVHlwZSIsIl9tZXRyaWNTdWJtaXR0ZWQiLCJzZXR1cFRpbWUiLCJtZXRyaWNOYW1lIiwiTWV0cmljVHlwZSIsImdldE5hbWUiLCJtZXRyaWNzU2VydmljZSIsInB1c2giLCJydW50aW1lIiwidWludDY0IiwiX2xvZ2dlciIsImluZm8iLCJEdXJhdGlvbnMiLCJ0b0lzb1N0cmluZyIsImVkZ2VBdXRoVG9rZW5QcmVmaXgiLCJFZGdlQXV0aFBhcnNlciIsInBhcnNlVG9rZW4iLCJ0b2tlbiIsImlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkIiwiZXJyb3IiLCJFZGdlVG9rZW4iLCJkZWNvZGVkVG9rZW4iLCJhdG9iIiwic3Vic3RyIiwibGVuZ3RoIiwiZWRnZVRva2VuIiwiSlNPTiIsInBhcnNlIiwic3RhcnRzV2l0aCIsIl9lZGdlVG9rZW4kdG9rZW4iLCJfZWRnZVRva2VuJHRva2VuMiIsIl9hcHBsaWNhdGlvbklkIiwiYXBwbGljYXRpb25JZCIsIl90b2tlbiIsInVyaSIsIlVSTCIsImNhcGFiaWxpdGllcyIsIkZlYXR1cmVFbmFibGVtZW50IiwiTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciIsIk1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IiLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJfbGlzdCIsImZvckVhY2giLCJ0b1N0cmluZyIsIlN0cmluZ3MiLCJFcnJvciIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiV2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlIiwibG9nZ2luZ0xldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIlRlbGVtZXRyeUxldmVsIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc0ZhY3RvcnkiLCJnZXRNZXRyaWNzU2VydmljZSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc1NlcnZpY2UiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsIlZlcnNpb25NYW5hZ2VyIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwiX3NlbmRNZXRyaWNzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJzZW5kTWV0cmljcyIsIl94IiwiYXBwbHkiLCJfc2VuZE1ldHJpY3NJZkFibGUiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIl9pc1NlbmRpbmciLCJzbGljZSIsInRoZW4iLCJyZXNwb25zZSIsImNhdGNoIiwiY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsVHlwZSIsIlByb21pc2UiLCJjYWxsYmFjayIsIlR5cGVFcnJvciIsIl9zdGF0ZSIsIl9oYW5kbGVkIiwiX3ZhbHVlIiwiX2RlZmVycmVkcyIsImRvUmVzb2x2ZSIsImRvbmUiLCJwcm9taXNlUmVzb2x2ZSIsInJlYXNvbiIsInByb21pc2VSZWplY3QiLCJuZXdWYWx1ZSIsInByb21pc2UiLCJmaW5hbGUiLCJfaW1tZWRpYXRlIiwiX3VuaGFuZGxlZFJlamVjdGlvbiIsImkiLCJsZW4iLCJoYW5kbGUiLCJkZWZlcnJlZCIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJlc3VsdCIsImFsbCIsImFyciIsInJlc29sdmUiLCJyZWplY3QiLCJpc0FycmF5IiwicHJvdG90eXBlIiwicmVtYWluaW5nIiwibWFuYWdlUmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsIl8iLCJyYWNlIiwic2V0VGltZW91dCIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImRpcmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJfYXJnczMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJjcmVhdGVQZWVyQ29ubmVjdGlvbiIsIl9yZWYiLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImNvbmZpZ3VyYXRpb24iLCJpY2VTZXJ2ZXJzIiwidXJscyIsInVzZXJuYW1lIiwiY3JlZGVudGlhbCIsInVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQiLCJSdGNDb25uZWN0aW9uTW9uaXRvciIsIm1lZGlhU3RyZWFtIiwiZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl9wZWVyQ29ubmVjdGlvbiIsIl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3RyYWNrc1RvTW9uaXRvciIsImdldFRyYWNrcyIsIm1hcCIsInRyYWNrIiwicGFyc2VkU0RQIiwiU2RwUGFyc2VyIiwiY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIiwic2RwIiwiX2VzdGltYXRlZEF1ZGlvQ29kZWMiLCJhdWRpb0NvZGVjIiwiX2VzdGltYXRlZFZpZGVvQ29kZWMiLCJ2aWRlb0NvZGVjIiwidXBkYXRlU3RhdGlzdGljIiwiX3J0Y1N0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJfdXBkYXRlU3RhdGlzdGljIiwiX2lnbm9yZWQiLCJnZXRLaW5kRm9yU2FmYXJpMTEiLCJ1cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJpZCIsImdldFN0YXRzIiwic3RhdHMiLCJydGNTdGF0aXN0aWNzIiwicm91bmRUcmlwVGltZSIsImxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCIsInJlcG9ydCIsImN1cnJlbnRSb3VuZFRyaXBUaW1lIiwibWVkaWFUeXBlIiwiY29kZWMiLCJjb2RlY0lkIiwibWltZVR5cGUiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYyIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MyIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjQiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY1IiwiYnl0ZXMiLCJieXRlc1JlY2VpdmVkIiwicHJldmlvdXNCeXRlc1JlY2VpdmVkIiwiYnl0ZXNEZWx0YSIsInRpbWVEZWx0YSIsImJpdHJhdGUiLCJmbG9vciIsInNzcmMiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwicm91bmQiLCJfdXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiZ2V0U3RhdHNMZWdhY3kiLCJuYW1lcyIsInN0YXQiLCJfc2RwIiwic2RwU3BsaXRCeUxpbmVzIiwic2RwU3BsaXRCeVRyYWNrcyIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwiX2lzQXVkaW9UcmFja0VuYWJsZWQiLCJpc1RyYWNrQnlUeXBlRW5hYmxlZCIsIl9pc1ZpZGVvVHJhY2tFbmFibGVkIiwic2RwU2VjdGlvbkZvclR5cGUiLCJmaW5kIiwic2RwVHJhY2siLCJ1c2VkQ29kZWNMaW5lIiwic2RwTGluZSIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiIsImljZUNvbm5lY3Rpb25TdGF0ZSIsImdldENvbmZpZ3VyYXRpb24iLCJzZXRDb25maWd1cmF0aW9uIiwiX2NyZWF0ZU9mZmVyIiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsImNsb3NlIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3ViamVjdCIsIl9zdWJqZWN0Iiwic3Vic2NyaWJlIiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwiX0Rpc3Bvc2FibGUiLCJfaW5oZXJpdHMiLCJfc3VwZXIiLCJfY3JlYXRlU3VwZXIiLCJsaXN0ZW5lcnMiLCJpZHgiLCJfbGlzdGVuZXJzIiwiY2hhbmdlZCIsImNvbXBhcmFibGUiLCJlcXVhbHMiLCJnZXRFbnZpcm9ubWVudEZyb21VcmwiLCJiYXNlVVJMIiwib3JpZ2luIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJfc2hha2FQbGF5ZXJMb2FkZXIiLCJfaGxzSnNMb2FkZXIiLCJfbWV0cmljc1NlcnZpY2UiLCJfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfdGVsZW1ldHJ5VXJsIiwiX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJyZXRyaWVzQW1vdW50IiwiX3RlbGVtZXRyeUxldmVsIiwiYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwidGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImNsaWVudFNlc3Npb25JZCIsImlnbm9yZWRFbnZpcm9ubWVudCIsImlnbm9yZWREaXNjb3ZlcnlVcmkiLCJ0ZWxlbWV0cnlVcmwiLCJ0ZWxlbWV0cnlBcHBlbmRlciIsImlnbm9yZWRUZW5hbmN5IiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsIkRpc2NvdmVyeVVyaSIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJkaXNjb3ZlcnlVcmkiLCJnZXRUZWxlbWV0cnlVcmwiLCJjaGFubmVsVG9rZW4iLCJ1cmlWYWx1ZSIsImJhc2VVUklWYWx1ZSIsImluaXQiLCJfaW5pdGlhbGl6ZWQiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24iLCJmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsInN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyIsIkNoYW5uZWwiLCJ2aWRlb0VsZW1lbnQiLCJjaGFubmVsQ29udGV4dE9wdGlvbnMiLCJ0YXJnZXRMYWciLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJfdG9rZW5Db250ZXh0IiwiVG9rZW5Db250ZXh0IiwiX2NoYW5uZWxDb250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJfcGVlckNvbm5lY3Rpb25Db250ZXh0IiwiUGVlckNvbm5lY3Rpb25Db250ZXh0IiwiX3N0YXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJFeHBvbmVudGlhbEJhY2tvZmYiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0IiwiVmlkZW9UZWxlbWV0cnkiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiQ2hhbm5lbFN0YXRlIiwicmVzdGFydEFmdGVyU3RvcCIsImNsZWFyRmFpbHVyZUNvdW50VGltZW91dCIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJkZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic3RhcnQiLCJwYXVzZSIsInNyY09iamVjdCIsIndpZHRoIiwidmlkZW9XaWR0aCIsImhlaWdodCIsInZpZGVvSGVpZ2h0IiwiRGltZW5zaW9uIiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJzdGF0dXMiLCJ1cGRhdGVUYXJnZXRMYWciLCJfc3RvcCIsImlzU3RhcnRpbmciLCJwcm9jZXNzU3RvcCIsImNsZWFuVXBSZXNvdXJjZXMiLCJfcmVzdW1lIiwicGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJyZXN1bWUiLCJtdXRlIiwibXV0ZWQiLCJ1bm11dGUiLCJfZGlzcG9zZSIsImlzRGlzcG9zZWQiLCJnZXRVcmkiLCJfc3RhcnQiLCJwcm9jZXNzU3RhcnQiLCJfcHJvY2Vzc1N0YXJ0IiwiX2NhbGxlZTUiLCJfdGhpczUiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwic3RyZWFtUGxheWVyIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsIlN0cmVhbUZhY3RvcnkiLCJmaW5hbGx5IiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJfcGxheSIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3IiwicGxheSIsImdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsIl9jYWxsZWU4IiwiX2NhbGxlZTgkIiwiX2NvbnRleHQ4IiwiX3RoaXM2IiwiZGVzdHJveVN0cmVhbSIsIl9yZWYyIiwicGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsIl9wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsIl9jYWxsZWU5IiwiX3RoaXM3IiwicGxheVByb21pc2UiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJDaGFubmVscyIsImNyZWF0ZUNoYW5uZWwiLCJjaGFubmVsT3B0aW9ucyIsImRlZmF1bHRUYXJnZXRMYWciLCJfb3B0aW9ucyR0YXJnZXRMYWciLCJhcHBseVN0YXR1cyIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZSIsImJpdHJhdGVNb2RlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUiLCJiaXRyYXRlU3RhdGUiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiRGlzY292ZXJ5IiwiX3ByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJkaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJfY2FjaGUiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJfZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJ0aW1lb3V0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJvayIsInRleHQiLCJFbmRQb2ludCIsImRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiZmFpbGVkUmVxdWVzdHMiLCJwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCIsIl9hcmdzMiIsInBpbmciLCJ0aW1lIiwiX2Rpc2NvdmVyeVVyaSIsImJ1aWxkRGlzY292ZXJ5VXJsIiwic2RrVmVyc2lvbiIsImFwaVZlcnNpb24iLCJfdGltZW91dCIsIl9yb3VuZFRyaXBUaW1lIiwiX3BpbmciLCJmaW5pc2hlZCIsImJ1aWxkUGluZ1VybCIsIl9zdWJzY3JpYmUiLCJsb2NhbFNlc3Npb25EZXNjcmlwdGlvbiIsImNsaWVudFZlcnNpb24iLCJib2R5V2l0aE9mZmVyIiwiYm9keVdpdGhvdXRPZmZlciIsImh0dHBSZXNwb25zZSIsInN1YnNjcmliZVJlc3BvbnNlIiwiYnVpbGRVcmwiLCJiZWFyZXJUb2tlbiIsImh0dHBSb3VuZFRyaXBUaW1lIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb24iLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uIiwibWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJfcHVibGlzaCIsIm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJwdWJsaXNoIiwiX3g1IiwiX3g2IiwiX3g3Iiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl94OCIsIl94OSIsIl9saW1pdEJpdHJhdGUiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiX2FkZEljZUNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzIiwiZGlzY292ZXJ5Q29tcGxldGVkIiwiYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2FyZ3M2IiwibWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJfeDE1IiwiX3gxNiIsIl94MTciLCJfZGVzdHJveVN0cmVhbSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfeDE4IiwiX3gxOSIsIl9kZXN0cm95U3RyZWFtT25Vbm1vdW50IiwiX25hdmlnYXRvciIsInNlbmRCZWFjb24iLCJfeDIwIiwiX3gyMSIsInBhdGgiLCJwYXRoQXNBcnJheSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjIiLCJfeDIzIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCIsInB1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3gyNCIsIl94MjUiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gyNiIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY2FsbGVlMTIiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsIl94MjciLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJfeDI4IiwiQ2h1bmtlZFN0cmVhbSIsImNoYW5uZWxDb250ZXh0Iiwib2ZmZXJTZHAiLCJvcmlnaW5TdGFydFRpbWUiLCJMaXZlU3RyZWFtaW5nIiwicGxheWVyIiwibW9uaXRvciIsIl9tb25pdG9yRGlzcG9zYWJsZXMiLCJuZXdTdHJlYW1TdGF0aXN0aWNzIiwiX3N0cmVhbVN0YXRpc3RpY3MiLCJjdXJyZW50VGltZSIsImRhdGFCdWZmZXJlZCIsIl9tb25pdG9yRmFpbHVyZUNvdW50IiwicGF1c2VkIiwiSGxzUGxheWVyIiwibWFuaWZlc3RVUkkiLCJfdmlkZW9FbGVtZW50IiwiX2tpbmQiLCJfc3RyZWFtSWQiLCJfbWFuaWZlc3RVUkkiLCJlbmNvZGVVUkkiLCJyZXBsYWNlIiwiX29wdGlvbnMiLCJfcGxheWVyIiwiZW5hYmxlV29ya2VyIiwibWF4QnVmZmVyTGVuZ3RoIiwibGl2ZUJhY2tCdWZmZXJMZW5ndGgiLCJsaXZlU3luY0R1cmF0aW9uIiwibGl2ZUR1cmF0aW9uSW5maW5pdHkiLCJsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uIiwiSW5maW5pdHkiLCJoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2QiLCJsb2FkU291cmNlIiwiYXR0YWNoTWVkaWEiLCJjYW5QbGF5VHlwZSIsInNyYyIsIm5ldHdvcmtTdGF0ZSIsIk5ldHdvcmtTdGF0ZXMiLCJOZXR3b3JrTm9Tb3VyY2UiLCJzdGF0aXN0aWNzIiwibWVkaWEiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImJ1ZmZlcmVkIiwiZW5kIiwic3RyZWFtQ29udHJvbGxlciIsInRydWVDdXJyZW50VGltZSIsIm1heCIsImRlc3Ryb3kiLCJJbnNlcnRhYmxlU3RyZWFtcyIsInNldHVwTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSIsInRyYW5zZm9ybSIsImdldFZpZGVvVHJhY2tzIiwidHJhbnNmb3JtZXIiLCJUcmFuc2Zvcm1TdHJlYW0iLCJwcm9jZXNzb3IiLCJnZW5lcmF0b3IiLCJzb3VyY2UiLCJyZWFkYWJsZSIsInNpbmsiLCJ3cml0YWJsZSIsInBpcGVUaHJvdWdoIiwicGlwZVRvIiwidHJhbnNmb3JtZWRTdHJlYW0iLCJNZWRpYVN0cmVhbSIsIl9obHNQbGF5ZXIiLCJfcGhlbml4V2ViUGxheWVyIiwiX3NoYWthIiwibG9hZGVkIiwiX3BlbmRpbmciLCJQbGF5ZXIiLCJkYXNoTWFuaWZlc3RVcmxNYXRjaCIsImhsc01hbmlmZXN0VXJsTWF0Y2giLCJtYW5pZmVzdFVybCIsInBsYXlsaXN0VXJsIiwiX29iamVjdFNwcmVhZCIsInByZWZlck5hdGl2ZSIsInNob3VsZFVzZU5hdGl2ZUhscyIsIldlYlBsYXllciIsIlNoYWthUGxheWVyIiwiaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwiLCJkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0IiwiUmVhbFRpbWVTdHJlYW0iLCJwZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc2xpY2VkVG9BcnJheSIsIl9yZWYyJCIsInN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiIsInN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiIsIl9yZWYzIiwiYXBwbHlSdGNDb25maWd1cmF0aW9uIiwic3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQiLCJjYW5jZWxEaXNjb3ZlcnkiLCJjYW5kaWRhdGUiLCJfcmVmNCIsInJldHJ5Q2FsbGJhY2siLCJvbkxpbmUiLCJyZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIm1lZGlhU3RyZWFtUHJvbWlzZSIsInN0cmVhbXMiLCJ0cmFja0xpc3RlbmVyIiwiYW5zd2VyIiwiX3JlZjUiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjU3RhdGlzdGljIiwicnRjVmlkZW9TdGF0aXN0aWMiLCJydGNBdWRpb1N0YXRpc3RpYyIsImF1ZGlvIiwiYXVkaW9UcmFja0ZhaWxlZCIsInZpZGVvVHJhY2tGYWlsZWQiLCJfYXBwbHlSdGNDb25maWd1cmF0aW9uIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJfcGVlckNvbm5lY3Rpb24kY3VycmUiLCJpc0NsaWVudE9mZmVyRmxvdyIsImljZVJlc3RhcnQiLCJvZmZlciIsInBsYXllck9wdGlvbnMiLCJhYnIiLCJkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGUiLCJtYW5pZmVzdCIsInJldHJ5UGFyYW1ldGVycyIsInN0cmVhbWluZyIsInJlYnVmZmVyaW5nR29hbCIsImJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJCZWhpbmQiLCJtYXhBdHRlbXB0cyIsImJhY2tvZmZGYWN0b3IiLCJsb2FkUGxheWVyIiwiZXN0aW1hdGVkQmFuZHdpZHRoIiwicGxheVRpbWUiLCJ1bmxvYWQiLCJwbGF5ZXJDb25maWciLCJjb25maWd1cmUiLCJsb2FkIiwiY29kZSIsImNyZWF0ZSIsInRva2VuQ2FwYWJpbGl0aWVzIiwiYmFuZHdpZHRoVG9TdGFydEF0IiwibWluVGltZUJlZm9yZU5leHRSZWxvYWQiLCJlcnJvck9iamVjdCIsImNhblJlbG9hZCIsInNldmVyaXR5IiwicmVsb2FkSWZBYmxlIiwiaXNOYXRpdmUiLCJkZWxpdmVyeVR5cGUiLCJoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZCIsIl9sYXN0UmVsb2FkVGltZSIsInJlbG9hZCIsIl9fU0RLVkVSU0lPTl9fIiwiX2RlZmF1bHRWZXJzaW9uIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJUZWxlbWV0cnlTZXJ2aWNlIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsIl9zZW5kTG9ncyIsImxvZ01lc3NhZ2VzIiwic2VuZExvZ3MiLCJfc2VuZExvZ3NJZkFibGUiLCJudW1iZXJPZkxvZ3NUb1NlbmQiLCJzaXplT2ZMb2dzVG9TZW5kIiwiZ2V0TG9nU2l6ZSIsInN1bSIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm9mZnNldCIsIm1pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJwYXJ0cyIsIlN0cmluZyIsInBhZFN0YXJ0IiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0IiwiZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5TZWNvbmRzIiwicmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZiIsInBvdyIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kIiwibWluIiwib3RoZXIiLCJfbmV0d29ya01vbml0b3IiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJldmVudCIsIm9uQ29udGludWF0aW9uIiwiX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciIsInB1c2hUaW1lVG9GaXJzdEZyYW1lIiwicHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdGltZVRvRmlyc3RGcmFtZSIsImR1cmF0aW9uU2luY2VQYWdlTG9hZCIsIl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3ZpZGVvU3RhbGxlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7OztBQ1ZBO0FBQ0E7QUFDQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBO0FBQ0Esb0NBQW9DLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0wvRjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSDdGLHVCQUF1QixtQkFBTyxDQUFDLHdGQUF1QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSmhHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7O0FDTnBHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsSUFBSSxPQUFPO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFD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V0FDQSxFOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0Esd0NBQXdDLHlDQUF5QztXQUNqRjtXQUNBO1dBQ0EsRTs7Ozs7V0NQQSxzRjs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSxzREFBc0Qsa0JBQWtCO1dBQ3hFO1dBQ0EsK0NBQStDLGNBQWM7V0FDN0QsRTs7OztVQ05BO1VBQ0E7VUFDQTtVQUNBIiwiZmlsZSI6ImNoYW5uZWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gIHJldHVybiBhcnIyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlMaWtlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShhcnIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuICByZXR1cm4gc2VsZjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7XG4gICAgdmFyIHZhbHVlID0gaW5mby52YWx1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZWplY3QoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaW5mby5kb25lKSB7XG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpO1xuICB9XG59XG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgIGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhlcnIpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7XG4gICAgICB9XG4gICAgICBfbmV4dCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXN5bmNUb0dlbmVyYXRvciwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjaywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZShcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2kgPSBudWxsID09IGFyciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gX2kpIHtcbiAgICB2YXIgX3MsXG4gICAgICBfZSxcbiAgICAgIF94LFxuICAgICAgX3IsXG4gICAgICBfYXJyID0gW10sXG4gICAgICBfbiA9ICEwLFxuICAgICAgX2QgPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKF94ID0gKF9pID0gX2kuY2FsbChhcnIpKS5uZXh0LCAwID09PSBpKSB7XG4gICAgICAgIGlmIChPYmplY3QoX2kpICE9PSBfaSkgcmV0dXJuO1xuICAgICAgICBfbiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKF9uID0gKF9zID0gX3guY2FsbChfaSkpLmRvbmUpICYmIChfYXJyLnB1c2goX3MudmFsdWUpLCBfYXJyLmxlbmd0aCAhPT0gaSk7IF9uID0gITApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgX2QgPSAhMCwgX2UgPSBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghX24gJiYgbnVsbCAhPSBfaVtcInJldHVyblwiXSAmJiAoX3IgPSBfaVtcInJldHVyblwiXSgpLCBPYmplY3QoX3IpICE9PSBfcikpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfYXJyO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVJlc3QsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCIpO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGV4cG9ydHM7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIGV4cG9ydHMgPSB7fSxcbiAgICBPcCA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHksXG4gICAgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKG9iaiwga2V5LCBkZXNjKSB7XG4gICAgICBvYmpba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgfSxcbiAgICAkU3ltYm9sID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgPyBTeW1ib2wgOiB7fSxcbiAgICBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcbiAgZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgIHdyaXRhYmxlOiAhMFxuICAgIH0pLCBvYmpba2V5XTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZShvYmosIGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yLFxuICAgICAgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpLFxuICAgICAgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcbiAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZ2VuZXJhdG9yLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dClcbiAgICB9KSwgZ2VuZXJhdG9yO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgICAgICBhcmc6IGZuLmNhbGwob2JqLCBhcmcpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IGVyclxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgZXhwb3J0cy53cmFwID0gd3JhcDtcbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBkZWZpbmUoSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJiBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpICYmIChJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAgICAgZGVmaW5lKHByb3RvdHlwZSwgbWV0aG9kLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IsIFByb21pc2VJbXBsKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKFwidGhyb3dcIiAhPT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmcsXG4gICAgICAgICAgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiBcIm9iamVjdFwiID09IF90eXBlb2YodmFsdWUpICYmIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikgPyBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkgOiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh1bndyYXBwZWQpIHtcbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQsIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICB9XG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPSBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICAgICAgaWYgKFwiZXhlY3V0aW5nXCIgPT09IHN0YXRlKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKFwiY29tcGxldGVkXCIgPT09IHN0YXRlKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IG1ldGhvZCkgdGhyb3cgYXJnO1xuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuICAgICAgZm9yIChjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZCwgY29udGV4dC5hcmcgPSBhcmc7Oykge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gY29udGV4dC5tZXRob2QpIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKFwic3VzcGVuZGVkU3RhcnRcIiA9PT0gc3RhdGUpIHRocm93IHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5hcmc7XG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBjb250ZXh0Lm1ldGhvZCAmJiBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIHN0YXRlID0gXCJleGVjdXRpbmdcIjtcbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBcImNvbXBsZXRlZFwiIDogXCJzdXNwZW5kZWRZaWVsZFwiLCByZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUgJiYgKHN0YXRlID0gXCJjb21wbGV0ZWRcIiwgY29udGV4dC5tZXRob2QgPSBcInRocm93XCIsIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZE5hbWUgPSBjb250ZXh0Lm1ldGhvZCxcbiAgICAgIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZE5hbWVdO1xuICAgIGlmICh1bmRlZmluZWQgPT09IG1ldGhvZCkgcmV0dXJuIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG1ldGhvZE5hbWUgJiYgZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQsIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpLCBcInRocm93XCIgPT09IGNvbnRleHQubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBtZXRob2ROYW1lICYmIChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBtZXRob2ROYW1lICsgXCInIG1ldGhvZFwiKSksIENvbnRpbnVlU2VudGluZWw7XG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSByZWNvcmQudHlwZSkgcmV0dXJuIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiLCBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmcsIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcbiAgICByZXR1cm4gaW5mbyA/IGluZm8uZG9uZSA/IChjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZSwgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gY29udGV4dC5tZXRob2QgJiYgKGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCIsIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkKSwgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGwsIENvbnRpbnVlU2VudGluZWwpIDogaW5mbyA6IChjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIiwgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsLCBDb250aW51ZVNlbnRpbmVsKTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHtcbiAgICAgIHRyeUxvYzogbG9jc1swXVxuICAgIH07XG4gICAgMSBpbiBsb2NzICYmIChlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV0pLCAyIGluIGxvY3MgJiYgKGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdLCBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIHJlY29yZC5hcmcsIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGl0ZXJhYmxlLm5leHQpIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLFxuICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsraSA8IGl0ZXJhYmxlLmxlbmd0aDspIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHJldHVybiBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV0sIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUgPSB1bmRlZmluZWQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmV4dDogZG9uZVJlc3VsdFxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGRvbmU6ICEwXG4gICAgfTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZVByb3BlcnR5KEdwLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgZGVmaW5lUHJvcGVydHkoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZ2VuRnVuICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFjdG9yICYmIChjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkpO1xuICB9LCBleHBvcnRzLm1hcmsgPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6IChnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZShnZW5GdW4sIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApLCBnZW5GdW47XG4gIH0sIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXdhaXQ6IGFyZ1xuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYXN5bmNJdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZXhwb3J0cy5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZXhwb3J0cy5hc3luYyA9IGZ1bmN0aW9uIChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICB2b2lkIDAgPT09IFByb21pc2VJbXBsICYmIChQcm9taXNlSW1wbCA9IFByb21pc2UpO1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCksIFByb21pc2VJbXBsKTtcbiAgICByZXR1cm4gZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCksIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoR3AsIGl0ZXJhdG9yU3ltYm9sLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoR3AsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZXhwb3J0cy5rZXlzID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHZhciBvYmplY3QgPSBPYmplY3QodmFsKSxcbiAgICAgIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBrZXlzLnB1c2goa2V5KTtcbiAgICByZXR1cm4ga2V5cy5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsga2V5cy5sZW5ndGg7KSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkgcmV0dXJuIG5leHQudmFsdWUgPSBrZXksIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGV4cG9ydHMudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoc2tpcFRlbXBSZXNldCkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB1bmRlZmluZWQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhc2tpcFRlbXBSZXNldCkgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSBcInRcIiA9PT0gbmFtZS5jaGFyQXQoMCkgJiYgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiYgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSAmJiAodGhpc1tuYW1lXSA9IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcm9vdFJlY29yZC50eXBlKSB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBleGNlcHRpb247XG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmV0dXJuIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiLCByZWNvcmQuYXJnID0gZXhjZXB0aW9uLCBjb250ZXh0Lm5leHQgPSBsb2MsIGNhdWdodCAmJiAoY29udGV4dC5tZXRob2QgPSBcIm5leHRcIiwgY29udGV4dC5hcmcgPSB1bmRlZmluZWQpLCAhIWNhdWdodDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldLFxuICAgICAgICAgIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gZW50cnkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzRmluYWxseSkgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmluYWxseUVudHJ5ICYmIChcImJyZWFrXCIgPT09IHR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0eXBlKSAmJiBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJiBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MgJiYgKGZpbmFsbHlFbnRyeSA9IG51bGwpO1xuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPSB0eXBlLCByZWNvcmQuYXJnID0gYXJnLCBmaW5hbGx5RW50cnkgPyAodGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MsIENvbnRpbnVlU2VudGluZWwpIDogdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHJlY29yZC50eXBlKSB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gcmVjb3JkLnR5cGUgfHwgXCJjb250aW51ZVwiID09PSByZWNvcmQudHlwZSA/IHRoaXMubmV4dCA9IHJlY29yZC5hcmcgOiBcInJldHVyblwiID09PSByZWNvcmQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmcsIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIiwgdGhpcy5uZXh0ID0gXCJlbmRcIikgOiBcIm5vcm1hbFwiID09PSByZWNvcmQudHlwZSAmJiBhZnRlckxvYyAmJiAodGhpcy5uZXh0ID0gYWZ0ZXJMb2MpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2goZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSByZXR1cm4gdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkoZW50cnkpLCBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gcmVjb3JkLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfSwgXCJuZXh0XCIgPT09IHRoaXMubWV0aG9kICYmICh0aGlzLmFyZyA9IHVuZGVmaW5lZCksIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9LCBleHBvcnRzO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlUmVzdCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiKTtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiKTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChfdHlwZW9mKHJlcykgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9QcmltaXRpdmUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKFwiLi90b1ByaW1pdGl2ZS5qc1wiKTtcbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gKG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMpLCBfdHlwZW9mKG9iaik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuY29uc3QgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQgPSAzMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnRGb2N1c0ludGVydmFsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0KHRoaXMuX2lzRm9yZWdyb3VuZCk7XG4gICAgdGhpcy5kZXRlY3RUYWJGb2N1c0NoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGlzRm9yZWdyb3VuZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZDtcbiAgfVxuXG4gIGdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RUYWJGb2N1c0NoYW5nZSgpOiB2b2lkIHtcbiAgICBsZXQgaGlkZGVuO1xuICAgIGxldCB2aXNpYmlsaXR5Q2hhbmdlO1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGEgZGVmaW5pdGlvbiBmb3IgJ21zSGlkZGVuJyBvciAnd2Via2l0SGlkZGVuJyB0eXBlc1xuICAgIC8vIFJlcXVpcmVkIHRvIEB0cy1pZ25vcmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50Lm1zSGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ21zSGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnbXN2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC53ZWJraXRIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnd2Via2l0SGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnd2Via2l0dmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQuaGlkZGVuICE9PSAndW5kZWZpbmVkJykgeyAvLyBPcGVyYSAxMi4xMCBhbmQgRmlyZWZveCAxOCBhbmQgbGF0ZXIgc3VwcG9ydFxuICAgICAgaGlkZGVuID0gJ2hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuXG4gICAgY29uc3QgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9ICFkb2N1bWVudFtoaWRkZW5dO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnRbaGlkZGVuXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuXG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0ZW5Gb3JEb2N1bWVudEZvY3VzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSBkb2N1bWVudC5oYXNGb2N1cygpO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9LCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IG51bGw7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc0ZvcmVncm91bmQgPT09IGlzRm9yZWdyb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRm9yZWdyb3VuZC52YWx1ZSA9IGlzRm9yZWdyb3VuZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckRldGVjdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4ID0gLyhNU0lFfCg/IUdlY2tvLispRmlyZWZveHwoPyFBcHBsZVdlYktpdC4rQ2hyb21lLispU2FmYXJpfCg/IUFwcGxlV2ViS2l0LispQ2hyb21lfEFwcGxlV2ViS2l0KD8hLitDaHJvbWV8LitTYWZhcmkpfEdlY2tvKD8hLitGaXJlZm94KSkoPzogfFxcLykoW1xcZC5hcHJlXSspL2c7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJNYWpvclZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciB7XG4gIGdldFN0cmluZ1ZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKSB8fFxuICAgICAgdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApIHx8XG4gICAgICB0aGlzLmRlZmF1bHRTdHJpbmdWYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIGdldEJvb2xlYW5WYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUZyb21VcmkgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCk7XG5cbiAgICBpZiAodmFsdWVGcm9tVXJpKSB7XG4gICAgICByZXR1cm4gdmFsdWVGcm9tVXJpID09PSAndHJ1ZScgfHwgdmFsdWVGcm9tVXJpID09PSAnMScgfHwgdmFsdWVGcm9tVXJpID09PSAnT24nO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRCb29sZWFuVmFsdWVbbmFtZV0gPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCb29sZWFuVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGFWYWx1ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT0nJHtuYW1lfSddYCk7XG5cbiAgICBpZiAoIW1ldGFWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbWV0YVZhbHVlLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZVVSSVBhcmFtZXRlck5hbWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAoIXZhbHVlVVJJUGFyYW1ldGVyTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpLmdldCh2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvclsnY29ubmVjdGlvbiddO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VmZmVjdGl2ZVR5cGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmRvd25saW5rTWF4O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm4gJ1Vua25vd24nO1xuICAgIH1cblxuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5lZmZlY3RpdmVUeXBlIHx8IG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnR5cGU7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucnR0O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgICB9O1xuXG4gICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRpc3RpY3MoKTogdm9pZCB7XG4gICAgdGhpcy5fcnR0LnZhbHVlID0gdGhpcy5nZXRSb3VuZFRyaXBUaW1lKCk7XG4gICAgdGhpcy5fZWZmZWN0aXZlVHlwZS52YWx1ZSA9IHRoaXMuZ2V0RWZmZWN0aXZlVHlwZSgpO1xuICAgIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnZhbHVlID0gdGhpcy5nZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fUFJJVkFDWV9NT0RFX186IGJvb2xlYW47XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByaXZhY3lNb2RlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2lzUHJpdmF0ZTogYm9vbGVhbjtcblxuICBzdGF0aWMgZ2V0IGlzUHJpdmF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNQcml2YXRlO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5SXNQcml2YXRlKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9pc1ByaXZhdGUgPSBfX1BSSVZBQ1lfTU9ERV9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2lzUHJpdmF0ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5Qcml2YWN5TW9kZS5hcHBseUlzUHJpdmF0ZSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGNsYXNzIFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtU2V0dXBMaXN0ZW5lcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3NTZXJ2aWNlID0gU0RLLm1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdWNjZXNzKHN0cmVhbUlkKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQsIHN0cmVhbUlkKTtcbiAgfVxuXG4gIGZhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRTdHJlYW1NZXRyaWMobWV0cmljVHlwZTogTWV0cmljc1R5cGUsIHN0cmVhbUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21ldHJpY1N1Ym1pdHRlZCkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNTdWJtaXR0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXR1cFRpbWUgPSBub3cgLSB0aGlzLl9zdGFydFRpbWU7XG4gICAgY29uc3QgbWV0cmljTmFtZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpY1R5cGUpLmdldE5hbWUoKTtcblxuICAgIHRoaXMubWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHNldHVwVGltZX0sXG4gICAgICBzdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFN0cmVhbSBtZXRyaWMgWyVzXSBpbiBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmV3IER1cmF0aW9ucyhzZXR1cFRpbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuL0VkZ2VUb2tlbic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4vRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aFBhcnNlcicpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogRWRnZVRva2VuIHtcbiAgICBpZiAoIXRoaXMuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBKU09OLnBhcnNlKGRlY29kZWRUb2tlbik7XG5cbiAgICAgIGVkZ2VUb2tlbi50b2tlbiA9IEpTT04ucGFyc2UoZWRnZVRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4oZWRnZVRva2VuKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4uc3RhcnRzV2l0aChlZGdlQXV0aFRva2VuUHJlZml4KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW50ZXJmYWNlIElUb2tlbiB7XG4gIHVyaTogVVJMIHwgbnVsbDtcbiAgY2FwYWJpbGl0aWVzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElFZGdlVG9rZW4ge1xuICBhcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHRva2VuOiBJVG9rZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VUb2tlbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW46IElUb2tlbjtcblxuICBjb25zdHJ1Y3RvcihlZGdlVG9rZW46IElFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbklkID0gZWRnZVRva2VuPy5hcHBsaWNhdGlvbklkIHx8ICcnO1xuICAgIHRoaXMuX3Rva2VuID0ge1xuICAgICAgdXJpOiBlZGdlVG9rZW4/LnRva2VuPy51cmkgPyBuZXcgVVJMKGVkZ2VUb2tlbi50b2tlbi51cmkpIDogbnVsbCxcbiAgICAgIGNhcGFiaWxpdGllczogZWRnZVRva2VuPy50b2tlbj8uY2FwYWJpbGl0aWVzIHx8IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldCB1cmkoKTogVVJMIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLnVyaTtcbiAgfVxuXG4gIGdldCBjYXBhYmlsaXRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi5jYXBhYmlsaXRpZXM7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbklkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICB0eXBlb2YgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciA9PT0gJ3VuZGVmaW5lZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXNwb3NhYmxlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGRpc3Bvc2FibGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGUgPSBkaXNwb3NhYmxlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcG9zYWJsZS5jYWxsKHRoaXMpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogSURpc3Bvc2FibGVbXSA9IFtdO1xuXG4gIGFkZChkaXNwb3NhYmxlOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QucHVzaChkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIHRoaXMuX2xpc3QubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEaXNwb3NhYmxlTGlzdFtkaXNwb3NhYmxlcz0ke3RoaXMuX2xpc3QubGVuZ3RofV1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5cbmV4cG9ydCBlbnVtIExvZ2dpbmdMZXZlbCB7XG4gIEFsbCA9IC0xLFxuICBUcmFjZSA9IDEwLFxuICBEZWJ1ZyA9IDIwLFxuICBJbmZvID0gMzAsXG4gIFdhcm4gPSA0MCxcbiAgRXJyb3IgPSA1MCxcbiAgRmF0YWwgPSA2MCxcbiAgT2ZmID0gMTAwLFxufVxuXG5leHBvcnQgdHlwZSBMb2dnaW5nTGV2ZWxUeXBlID0gJ09mZicgfCAnVHJhY2UnIHwgJ0RlYnVnJyB8ICdJbmZvJyB8ICdXYXJuJyB8ICdFcnJvcicgfCAnRmF0YWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhdGVnb3J5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGVuZGVyczogQXBwZW5kZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQ7XG5cbiAgZ2V0IGNhdGVnb3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGVnb3J5O1xuICB9XG5cbiAgZ2V0IGFwcGVuZGVycygpOiBBcHBlbmRlcnMge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdUaHJlc2hvbGQge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICB0cmFjZSguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuVHJhY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuVHJhY2UsIGFyZ3MpO1xuICB9XG5cbiAgZGVidWcoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkRlYnVnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkRlYnVnLCBhcmdzKTtcbiAgfVxuXG4gIGluZm8oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkluZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuSW5mbywgYXJncyk7XG4gIH1cblxuICB3YXJuKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLldhcm4sIGFyZ3MpO1xuICB9XG5cbiAgZXJyb3IoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkVycm9yLCBhcmdzKTtcbiAgfVxuXG4gIGZhdGFsKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5GYXRhbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5GYXRhbCwgYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGxvZyhsZXZlbDogbnVtYmVyLCBhcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5yZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3MpO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLnZhbHVlLmZvckVhY2goKGFwcGVuZGVyOiBJQXBwZW5kZXIpID0+IHtcbiAgICAgIGFwcGVuZGVyLmxvZyhsZXZlbCwgbWVzc2FnZSwgdGhpcy5jYXRlZ29yeSwgZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VQbGFjZWhvbGRlcnMoYXJnczogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IGFyZ3NbMF07XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YgJiYgYXJncy5sZW5ndGggPiAxICYmIGluZGV4ID49IDApIHtcbiAgICAgIGluZGV4ID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mKCclJywgaW5kZXgpO1xuXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEsIGluZGV4ICsgMik7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnJSc6XG4gICAgICAgICAgICAvLyBFc2NhcGVkICclJScgdHVybnMgaW50byAnJSdcbiAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpO1xuICAgICAgICAgICAgaW5kZXgrKztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICclZCcgb3IgJyVzJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy50b1N0cmluZyhhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAvLyBSZXBsYWNlICVqJyB3aXRoIHRoZSBhcmd1bWVudFxuICAgICAgICAgICAgYXJnc1swXSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSB0aGlzLnJlcGxhY2VBcmd1bWVudChcbiAgICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBhcmdzLnNwbGljZSgxLCAxKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPiAxKSB7XG4gICAgICBhcmdzID0gYXJncy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxID09PSBhcnJheS5sZW5ndGggJiYgY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIGBbJHt0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZSl9XWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoYXJnOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNhY2hlID0gW107XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhcmcgaW5zdGFuY2VvZiBFcnJvciA/IHRoaXMudG9TdHJpbmcoYXJnKSA6IGFyZyxcbiAgICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gJzxyZWN1cnNpdmU+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGUucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICAyXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnW29iamVjdCBpbnZhbGlkIEpTT04uc3RyaW5naWZ5XSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQXJndW1lbnQoYXJndW1lbnQ6IGFueSwgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgdGhpcy50b1N0cmluZyhhcmd1bWVudCkgKyByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1N0cmluZyhkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZGF0YSA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgdG9TdHJpbmdTdHIgPSAnJztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gJ1tvYmplY3QgaW52YWxpZCB0b1N0cmluZygpXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdG9TdHJpbmdTdHI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihjYXRlZ29yeTogc3RyaW5nLCBhcHBlbmRlcnM6IEFwcGVuZGVycywgdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkKSB7XG4gICAgdGhpcy5fY2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSBhcHBlbmRlcnM7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJpdmFjeU1vZGUgZnJvbSAnLi4vZG9tL1ByaXZhY3lNb2RlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRGVmYXVsdHMge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gTG9nZ2luZ0xldmVsLk9mZiA6IExvZ2dpbmdMZXZlbC5BbGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIFByaXZhY3lNb2RlLmlzUHJpdmF0ZSA/IExvZ2dpbmdMZXZlbC5PZmYgOiBMb2dnaW5nTGV2ZWwuQWxsO1xuICB9XG5cbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4vTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXIsIHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcbmltcG9ydCBDb25zb2xlQXBwZW5kZXIgZnJvbSAnLi9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbFR5cGUpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi9UZWxlbWV0cnlEZWZhdWx0JztcblxuZXhwb3J0IGVudW0gVGVsZW1ldHJ5TGV2ZWwge1xuICBPZmYgPSAxMDAsXG4gIEVzc2VudGlhbCA9IDEwLFxuICBBbGwgPSAtMVxufVxuXG5leHBvcnQgdHlwZSBUZWxlbWV0cnlMZXZlbFR5cGUgPSAnT2ZmJyB8ICdFc3NlbnRpYWwnIHwgJ0FsbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L21ldHJpY3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsID0gVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0cmljc1VybCA9IG5ldyBVUkwodXJsKTtcblxuICAgIG1ldHJpY3NVcmwucGF0aG5hbWUgPSBtZXRyaWNzVXJsLnBhdGhuYW1lICsgJy9tZXRyaWNzJztcblxuICAgIHRoaXMuX3VybCA9IG1ldHJpY3NVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4vTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uLCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi4vc2RrL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi4vc2RrL0Vudmlyb25tZW50JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0ZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2VzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBNZXRyaWNzU2VydmljZX0gPSB7fTtcblxuICBzdGF0aWMgZ2V0TWV0cmljc1NlcnZpY2UodXJsOiBzdHJpbmcpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgaWYgKHR5cGVvZiB1cmwgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VyJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcykge1xuICAgICAgcmV0dXJuIG1ldHJpY3NTZXJ2aWNlcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG5ldyBNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwoU0RLLnRlbGVtZXRyeUxldmVsKTtcblxuICAgIHJldHVybiBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF0gPSBuZXcgTWV0cmljc1NlcnZpY2UobWV0cmljc0NvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc3RhdGljIHNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsOiBUZWxlbWV0cnlMZXZlbCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE9iamVjdC52YWx1ZXMoTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlcyk7XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzICYmIG1ldHJpY3NTZXJ2aWNlcy5sZW5ndGgpIHtcbiAgICAgIG1ldHJpY3NTZXJ2aWNlcy5mb3JFYWNoKG1ldHJpY3NTZXJ2aWNlID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzU2VydmljZS5tZXRyaWNzQ29uZmlndXJhdGlvbjtcblxuICAgICAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSB0ZWxlbWV0cnlMZXZlbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBmZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByaXZhY3lNb2RlIGZyb20gJy4uL2RvbS9Qcml2YWN5TW9kZSc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gUHJpdmFjeU1vZGUuaXNQcml2YXRlID8gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsIDogVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZUhhbmRsZXIgZnJvbSAnLi9Qcm9taXNlSGFuZGxlcic7XG5cbmNsYXNzIFByb21pc2Uge1xuICBfc3RhdGU6IG51bWJlcjtcbiAgX2hhbmRsZWQ6IGJvb2xlYW47XG4gIF92YWx1ZTogUHJvbWlzZTtcbiAgX2RlZmVycmVkczogQXJyYXk8UHJvbWlzZUhhbmRsZXI+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgdGhlbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoY2FsbGJhY2spIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb21pc2VzIG11c3QgYmUgY29uc3RydWN0ZWQgdmlhIG5ldycpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ25vdCBhIGZ1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGUgPSAwO1xuICAgIHRoaXMuX2hhbmRsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBbXTtcblxuICAgIHRoaXMuZG9SZXNvbHZlKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGRvUmVzb2x2ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNhbGxiYWNrKFxuICAgICAgICB2YWx1ZSA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlamVjdChyZWFzb24pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVzb2x2ZShuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUHJvbWlzZSBSZXNvbHV0aW9uIFByb2NlZHVyZTogaHR0cHM6Ly9naXRodWIuY29tL1Byb21pc2VzLWFwbHVzL1Byb21pc2VzLXNwZWMjdGhlLVByb21pc2UtcmVzb2x1dGlvbi1wcm9jZWR1cmVcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gcHJvbWlzZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBIFByb21pc2UgY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaXQgc2VsZi4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1ZhbHVlICYmICh0eXBlb2YgbmV3VmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgY29uc3QgdGhlbiA9IG5ld1ZhbHVlLnRoZW47XG5cbiAgICAgICAgaWYgKG5ld1ZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgIHByb21pc2UuX3N0YXRlID0gMztcbiAgICAgICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgIHByb21pc2UuZmluYWxlKCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBwcm9taXNlLmRvUmVzb2x2ZShmdW5jdGlvbigpOiB2b2lkIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgICAgICAgIHRoZW4uYXBwbHkobmV3VmFsdWUsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJvbWlzZS5fc3RhdGUgPSAxO1xuICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHByb21pc2UuZmluYWxlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZWplY3QobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0ZSA9IDI7XG4gICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLmZpbmFsZSgpO1xuICB9XG5cbiAgZmluYWxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gMiAmJiB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2hhbmRsZWQpIHtcbiAgICAgICAgICBQcm9taXNlLl91bmhhbmRsZWRSZWplY3Rpb24odGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5fZGVmZXJyZWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0aGlzLmhhbmRsZSh0aGlzLl9kZWZlcnJlZHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX2RlZmVycmVkcyA9IG51bGw7XG4gIH1cblxuICBoYW5kbGUoZGVmZXJyZWQ6IFByb21pc2VIYW5kbGVyKTogdm9pZCB7XG4gICAgbGV0IHByb21pc2UgPSB0aGlzIGFzIFByb21pc2U7XG5cbiAgICB3aGlsZSAocHJvbWlzZS5fc3RhdGUgPT09IDMpIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLl92YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDApIHtcbiAgICAgIHByb21pc2UuX2RlZmVycmVkcy5wdXNoKGRlZmVycmVkKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByb21pc2UuX2hhbmRsZWQgPSB0cnVlO1xuICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFjayA9IHByb21pc2UuX3N0YXRlID09PSAxID8gZGVmZXJyZWQub25GdWxmaWxsZWQgOiBkZWZlcnJlZC5vblJlamVjdGVkO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAxKSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlc3VsdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2socHJvbWlzZS5fdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHJlc3VsdCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYWxsKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLmFsbCBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyKTtcblxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKFtdKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJlbWFpbmluZyA9IGFyZ3MubGVuZ3RoO1xuICAgICAgY29uc3QgbWFuYWdlUmVzcG9uc2UgPSAoaSwgdmFsdWUpOiB2b2lkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgY29uc3QgdGhlbiA9IHZhbHVlLnRoZW47XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB0aGVuLmNhbGwoXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gbWFuYWdlUmVzcG9uc2UoaSwgdmFsdWUpLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhcmdzW2ldID0gdmFsdWU7XG5cbiAgICAgICAgICBpZiAoLS1yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUoYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYW5hZ2VSZXNwb25zZShpLCBhcmdzW2ldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyByZXNvbHZlKHZhbHVlKTogUHJvbWlzZSB7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29uc3RydWN0b3IgPT09IFByb21pc2UpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiByZXNvbHZlKHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmVqZWN0KHZhbHVlKTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHJlamVjdCh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJhY2UoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UucmFjZSBhY2NlcHRzIGFuIGFycmF5JykpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShhcnJbaV0pLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBfaW1tZWRpYXRlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcbiAgfVxuXG4gIHN0YXRpYyBfdW5oYW5kbGVkUmVqZWN0aW9uKGVycm9yKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1Bvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjonLCBlcnJvcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgIH1cbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uKG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ3RoZW4nXSA9IGZ1bmN0aW9uKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigoKSA9PiBudWxsKTtcblxuICB0aGlzLmhhbmRsZShuZXcgUHJvbWlzZUhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpKTtcblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gPSBmdW5jdGlvbihjYWxsYmFjazogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIHZhbHVlID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiB2YWx1ZSksXG4gICAgcmVhc29uID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiBjb25zdHJ1Y3Rvci5yZWplY3QocmVhc29uKSlcbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb21pc2U7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuL1Byb21pc2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9taXNlSGFuZGxlciB7XG4gIG9uRnVsZmlsbGVkOiBGdW5jdGlvbjtcbiAgb25SZWplY3RlZDogRnVuY3Rpb247XG4gIHByb21pc2U6IFByb21pc2U7XG5cbiAgY29uc3RydWN0b3Iob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpIHtcbiAgICB0aGlzLm9uRnVsZmlsbGVkID0gdHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiBudWxsO1xuICAgIHRoaXMub25SZWplY3RlZCA9IHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVuY3Rpb24nID8gb25SZWplY3RlZCA6IG51bGw7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHtcbiAgYXVkaW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICB2aWRlb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIGxvY2FsT2ZmZXI6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSgpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlZDoge1xuICAgIGRpcmVjdGlvbj86IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uO1xuICAgIHBlZXJDb25uZWN0aW9uOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD47XG4gIH07XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fcGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUHJlY2FjaGluZ0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UucHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwcmUtY2FjaGUgcGVlciBjb25uZWN0aW9uIG9mZmVyJywgZSkpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKTogUHJvbWlzZTx7IHBlZXJDb25uZWN0aW9uOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB8IHZvaWQ+OyBkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIH0+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSB7XG4gICAgICBkaXJlY3Rpb246ICdyZWN2b25seScsXG4gICAgICBwZWVyQ29ubmVjdGlvbjogUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiA9ICdyZWN2b25seScpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIGlmIChQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCAmJiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbikge1xuICAgICAgY29uc3QgdmFsdWUgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5wZWVyQ29ubmVjdGlvbjtcblxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fcGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKClcbiAgICAgIC50aGVuKGFzeW5jIHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNBZGRUcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLnN1cHBvcnRzQWRkVHJhbnNjZWl2ZXI7XG4gICAgICAgIGxldCB2aWRlb1RyYW5zY2VpdmVyLCBhdWRpb1RyYW5zY2VpdmVyO1xuXG4gICAgICAgIGlmIChzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKSB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCdhdWRpbycsIHtkaXJlY3Rpb259KTtcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ3ZpZGVvJywge2RpcmVjdGlvbn0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIodW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25zID0gZGlyZWN0aW9uID09PSAncmVjdm9ubHknID8ge1xuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IHRydWUsXG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICB9IDoge307XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlZXJDb25uZWN0aW9uU2VydmljZSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIHtcbiAgc3RhdGljIHRydW5jYXRlSWNlU2VydmVycyhjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1cmxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB1cmwgPSBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHVybHMucHVzaChjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgIHVybHM6IHVybHMsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1N0YXRpc3RpYyB7XG4gIHNzcmM/OiBzdHJpbmc7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGJ5dGVzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGZyYW1lc0RlY29kZWQ/OiBudW1iZXI7XG4gIHBhY2tldHNMb3N0PzogbnVtYmVyO1xuICBwYWNrZXRzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGNvZGVjPzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU/OiBudW1iZXI7XG4gIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcD86IG51bWJlcjtcbn1cblxuY29uc3QgdXBkYXRlU3RhdGlzdGljVGltZW91dCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkQXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydGNTdGF0aXN0aWM6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+ID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHt9KTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgcHJpdmF0ZSBfaXNNb25pdG9yUnVubmluZyA9IHRydWU7XG4gIHByaXZhdGUgX3VwZGF0ZVRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdHJhY2tzVG9Nb25pdG9yOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgdGhpcy5fdHJhY2tzVG9Nb25pdG9yID0gbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkubWFwKHRyYWNrID0+IHRyYWNrLmtpbmQpIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmdldEN1cnJlbnRPZmZlckRpc2FibGVkKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFNEUCA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYyA9IHBhcnNlZFNEUC5hdWRpb0NvZGVjO1xuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjID0gcGFyc2VkU0RQLnZpZGVvQ29kZWM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpYygpOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZW91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMudXBkYXRlU3RhdGlzdGljTGVnYWN5KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYWZhcmkgMTEgZG9lc250IGhhdmUga2luZCBvciBtZWRpYVR5cGUgc28gd2UgbmVlZCB0byB0YWtlIGl0IGZyb20gdGhlIGluYm91bmQtcnRwIG9iamVjdCBpZFxuICAgIGNvbnN0IGdldEtpbmRGb3JTYWZhcmkxMSA9IChpdGVtKTogc3RyaW5nID0+IGl0ZW0uaWQuaW5jbHVkZXMoJ0F1ZGlvJykgPyAnYXVkaW8nIDogaXRlbS5pZC5pbmNsdWRlcygnVmlkZW8nKSA/ICd2aWRlbycgOiAnJztcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMobnVsbClcbiAgICAgIC50aGVuKHN0YXRzID0+IHtcbiAgICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcblxuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgbGV0IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgIHN0YXRzLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUpIHtcbiAgICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSAqIDEwMDA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnaW5ib3VuZC1ydHAnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSByZXBvcnQua2luZCB8fCByZXBvcnQubWVkaWFUeXBlIHx8IGdldEtpbmRGb3JTYWZhcmkxMShyZXBvcnQpO1xuICAgICAgICAgICAgICBsZXQgY29kZWMgPSAnJztcblxuICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSByZXBvcnQuY29kZWNJZCkge1xuICAgICAgICAgICAgICAgICAgY29kZWMgPSBpdGVtLm1pbWVUeXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKGtpbmQgJiYgdGhpcy5fdHJhY2tzVG9Nb25pdG9yLmluY2x1ZGVzKGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSByZXBvcnQuYnl0ZXNSZWNlaXZlZCB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQnl0ZXNSZWNlaXZlZCA9IHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy5ieXRlc1JlY2VpdmVkID8/IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNEZWx0YSA9IGJ5dGVzIC0gcHJldmlvdXNCeXRlc1JlY2VpdmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlcG9ydC50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8udGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpdHJhdGUgPSBieXRlc0RlbHRhICYmIHRpbWVEZWx0YSA/IE1hdGguZmxvb3IoOCAqIGJ5dGVzRGVsdGEgL1xuICAgICAgICAgICAgICAgICAgdGltZURlbHRhICogMTAwMCkgOiAwO1xuXG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXSA9IHtcbiAgICAgICAgICAgICAgICAgIHNzcmM6IHJlcG9ydC5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiByZXBvcnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IHJlcG9ydC5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgcGFja2V0c0xvc3Q6IHJlcG9ydC5wYWNrZXRzTG9zdCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNSZWNlaXZlZDogcmVwb3J0LnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LmZyYW1lc0RlY29kZWQ7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZwcyA9IChyZXBvcnQuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMDtcblxuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnBzJ10gPSBmcHMgPyBNYXRoLnJvdW5kKGZwcyAqIDEwMCkgLyAxMDAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHNMZWdhY3koKS50aGVuKHN0YXRzID0+IHtcbiAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG4gICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICAgIHN0YXRzLnJlc3VsdCgpLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgcmVwb3J0Lm5hbWVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2dvb2dSVFQnKSB7XG4gICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LnN0YXQobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdzc3JjJykge1xuICAgICAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IHJlcG9ydC5zdGF0KCdtZWRpYVR5cGUnKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdID0ge3RpbWVzdGFtcDogRGF0ZS5ub3coKX07XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydzc3JjJ10gPSByZXBvcnQuc3RhdCgnc3NyYycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydtZWRpYVR5cGUnXSA9IG1lZGlhVHlwZTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2J5dGVzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdieXRlc1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzTG9zdCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNMb3N0Jyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2NvZGVjJ10gPSByZXBvcnQuc3RhdCgnZ29vZ0NvZGVjTmFtZScpLnRvU3RyaW5nKCkgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShtZWRpYVR5cGUpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncm91bmRUcmlwVGltZSddID0gcm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIGlmIChtZWRpYVR5cGUgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuc3RhdCgnZnJhbWVzRGVjb2RlZCcpO1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcHMnXSA9IChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0uZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgMTAwMCB8fCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2RlY0J5VHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYztcbiAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZHBQYXJzZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZHA6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzQXVkaW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzVmlkZW9UcmFja0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2RwOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZHAgPSBzZHA7XG5cbiAgICBjb25zdCBzZHBTcGxpdEJ5TGluZXMgPSB0aGlzLl9zZHAuc3BsaXQoLyhcXHJcXG58XFxyfFxcbikvKTtcbiAgICBjb25zdCBzZHBTcGxpdEJ5VHJhY2tzID0gdGhpcy5fc2RwLnNwbGl0KCdtPScpO1xuXG4gICAgdGhpcy5fYXVkaW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygnYXVkaW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX3ZpZGVvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ3ZpZGVvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgnYXVkaW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgICB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgndmlkZW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgfVxuXG4gIGdldCBhdWRpb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29kZWM7XG4gIH1cblxuICBnZXQgdmlkZW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92aWRlb0NvZGVjO1xuICB9XG5cbiAgZ2V0IGlzQXVkaW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBnZXQgaXNWaWRlb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNUcmFja0J5VHlwZUVuYWJsZWQodHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5VHJhY2tzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNkcFNlY3Rpb25Gb3JUeXBlID0gc2RwU3BsaXRCeVRyYWNrcy5maW5kKHNkcFRyYWNrID0+IHNkcFRyYWNrLnN0YXJ0c1dpdGgodHlwZSkpO1xuXG4gICAgaWYgKCFzZHBTZWN0aW9uRm9yVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhc2RwU2VjdGlvbkZvclR5cGUuaW5jbHVkZXMoYGE9aW5hY3RpdmVgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb2RlYyh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlMaW5lczogc3RyaW5nIFtdKTogc3RyaW5nIHtcbiAgICBjb25zdCB1c2VkQ29kZWNMaW5lID0gc2RwU3BsaXRCeUxpbmVzLmZpbmQoc2RwTGluZSA9PiBzZHBMaW5lLmluY2x1ZGVzKGBhPXJ0cG1hcDoke3NkcFNwbGl0QnlMaW5lcy5maW5kKGkgPT4gaS5pbmNsdWRlcyhgbT0ke3R5cGV9YCkpLnNwbGl0KCcgJylbM119YCkpO1xuICAgIGNvbnN0IHVzZWRDb2RlYyA9IHVzZWRDb2RlY0xpbmUuc3BsaXQoJyAnKVsxXTtcbiAgICBjb25zdCBjb2RlY05hbWUgPSB1c2VkQ29kZWMuc3BsaXQoJy8nKVswXTtcblxuICAgIHJldHVybiBjb2RlY05hbWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24sIHtQZWVyQ29ubmVjdGlvbkV2ZW50c30gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge0lMZWdhY3lSVENTdGF0c1JlcG9ydH0gZnJvbSAnLi9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdWYW5pbGxhUGVlckNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb246IFJUQ1BlZXJDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24gY2xhc3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgZ2V0IG5hdGl2ZSgpOiBSVENQZWVyQ29ubmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBpY2VDb25uZWN0aW9uU3RhdGUoKTogUlRDSWNlQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuYWRkVHJhbmNlaXZlckRpc2FibGVkICYmIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlciA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmVyKG9wdGlvbnM/OiBSVENPZmZlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZU9mZmVyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFuc3dlcihvcHRpb25zPzogUlRDQW5zd2VyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlQW5zd2VyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgc2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoYXNDcnlwdG8gPSBkZXNjcmlwdGlvbi5zZHA/Lm1hdGNoKC9hPWNyeXB0bzovaSk7XG5cbiAgICBpZiAoaGFzQ3J5cHRvKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RQIGE9Y3J5cHRvIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBnZXRTZW5kZXJzKCk6IFJUQ1J0cFNlbmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U2VuZGVycygpO1xuICB9XG5cbiAgZ2V0U3RhdHMoc2VsZWN0b3I/OiBNZWRpYVN0cmVhbVRyYWNrIHwgbnVsbCk6IFByb21pc2U8UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMoc2VsZWN0b3IpO1xuICB9XG5cbiAgZ2V0U3RhdHNMZWdhY3koKTogUHJvbWlzZTxJTGVnYWN5UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAvLyBJZ25vcmVkIGR1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgbGVnYWN5ICdnZXRTdGF0cycgbWV0aG9kIHR5cGUgZGVmaW5pdGlvblxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlICdnZXRTdGF0cycgbWV0aG9kIGZvclxuICAgICAgLy8gQ2hyb21lQDw9IDY2IGRldGFpbGVkIGhlcmU6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTYyNzgxNlxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhyZXNvbHZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkVHJhbnNjZWl2ZXIobmFtZTogc3RyaW5nLCBvcHRpb25zOiBSVENSdHBUcmFuc2NlaXZlckluaXQpOiBSVENSdHBUcmFuc2NlaXZlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKG5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgYWRkU3RyZWFtKG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IHZvaWQge1xuICAgIG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhY2sodHJhY2spO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q29uZmlndXJhdGlvbigpOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpO1xuICB9XG5cbiAgc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHNldCBvbnRyYWNrKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbnRyYWNrKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENUcmFja0V2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbnRyYWNrO1xuICB9XG5cbiAgc2V0IG9uaWNlY2FuZGlkYXRlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2VjYW5kaWRhdGUoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlO1xuICB9XG5cbiAgc2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKGhhbmRsZXI6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IEFycmF5PFQ+LCBsaXN0ZW5lcjogVCkge1xuICAgIHN1cGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBBcnJheTwoVCkgPT4gdm9pZD47XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwoVCkgPT4gdm9pZD4odGhpcy5fbGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW52aXJvbm1lbnQge1xuICBzdGF0aWMgZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgcmV0dXJuIGJhc2VVUkwub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuLi9sb2dnZXIvQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBQcml2YWN5TW9kZSBmcm9tICcuLi9kb20vUHJpdmFjeU1vZGUnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4vVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL0Vudmlyb25tZW50JztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL3N0cmVhbWluZy9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5jb25zdCBwYWdlTG9hZFRpbWUgPSB3aW5kb3dbJ19fcGhlbml4UGFnZUxvYWRUaW1lJ10gfHwgd2luZG93WydfX3BhZ2VMb2FkVGltZSddIHx8IERhdGUubm93KCk7XG5cbmludGVyZmFjZSBJSW5pdE9wdGlvbnMge1xuICBkaXNjb3ZlcnlVcmk/OiBzdHJpbmc7XG4gIHBlZXJDb25uZWN0aW9uRmFjdG9yeT86IElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIHRlbGVtZXRyeUxldmVsPzogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBjb25zb2xlTG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbT86IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlPzogYm9vbGVhbjtcbiAgd2ViUGxheWVyTG9hZGVyPzogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZDtcbiAgc2hha2FQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBTaGFrYVR5cGUpID0+IHZvaWQ7XG4gIGhsc0pzTG9hZGVyPzogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF93ZWJQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHN0YXRpYyBfZW52aXJvbm1lbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5VXJsOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeScpO1xuICBwcml2YXRlIHN0YXRpYyBfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDg7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlMZXZlbDogU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4gPSBuZXcgU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4oVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCFQcml2YWN5TW9kZS5pc1ByaXZhdGUpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGVuYW5jeTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9jbGllbnRTZXNzaW9uSWQ6IHN0cmluZyA9IFN0cmluZ3MucmFuZG9tKDMyKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvYWRlZFRpbWVzdGFtcDogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU0RLJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pbml0aWFsaXplZDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5SW5pdGlhbGl6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4oU0RLLl9pbml0aWFsaXplZCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seURpc2NvdmVyeVVyaTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4oRGlzY292ZXJ5VXJpLnVyaSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5KTtcblxuICBzdGF0aWMgZ2V0IHBhZ2VMb2FkVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbmFuY3koKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgY2xpZW50U2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNESy5fY2xpZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2FkZWRUaW1lc3RhbXAoKTogRGF0ZSB7XG4gICAgcmV0dXJuIFNESy5fbG9hZGVkVGltZXN0YW1wO1xuICB9XG5cbiAgc3RhdGljIGdldCBpbml0aWFsaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5SW5pdGlhbGl6ZWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVVyaSgpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlEaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5O1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gYCR7YmFzZVVSSVZhbHVlfS9wY2FzdC9lbmRQb2ludHNgO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtYmFzZS11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGluaXQob3B0aW9ucz86IElJbml0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbmV3IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gb3B0aW9ucy5kaXNjb3ZlcnlVcmk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmXG4gICAgICAgIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlVcmwge1xuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gYmFzZVVSTC5ob3N0bmFtZS5zcGxpdCgnLicpO1xuXG4gICAgICBzd2l0Y2ggKGJhc2VVUkwucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnd3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHA6JztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3c3M6JzpcbiAgICAgICAgICBiYXNlVVJMLnByb3RvY29sID0gJ2h0dHBzOic7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAyIHx8XG4gICAgICAgICAgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMyAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXS5sZW5ndGggPD0gMiAmJiBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5sZW5ndGggPD0gMylcbiAgICAgICkge1xuICAgICAgICBzZWdtZW50cy51bnNoaWZ0KCd0ZWxlbWV0cnknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnc3RnLScpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctc3RnJykgfHwgc2VnbWVudHNbMF0uaW5jbHVkZXMoJy1zdGctJykgfHwgc2VnbWVudHNbMF0gPT09ICdzdGcnKSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeS1zdGcnO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdsb2NhbCcpIHx8IHNlZ21lbnRzWzBdLmVuZHNXaXRoKCctbG9jYWwnKSkge1xuICAgICAgICAvLyBMZWF2ZSBVUkwgdW5jaGFuZ2VkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnknO1xuICAgICAgfVxuXG4gICAgICBiYXNlVVJMLmhvc3RuYW1lID0gc2VnbWVudHMuam9pbignLicpO1xuXG4gICAgICByZXR1cm4gYCR7YmFzZVVSTC5vcmlnaW59L3RlbGVtZXRyeWA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0cmF0ZVN0YXRlVHlwZSA9ICdLZWVwJyB8ICdSZXNldCc7XG5leHBvcnQgdHlwZSBCaXRyYXRlTW9kZVR5cGUgPSAnTm9ybWFsJyB8ICdGb3JjZScgfCAnUmVzZXQnO1xuXG5leHBvcnQgZW51bSBCaXRyYXRlU3RhdGUge1xuICBLZWVwLFxuICBSZXNldFxufVxuXG5leHBvcnQgZW51bSBCaXRyYXRlTW9kZSB7XG4gIE5vcm1hbCxcbiAgRm9yY2UsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlIHtcbiAgYXBpVmVyc2lvbjogbnVtYmVyO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG4gIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IG51bWJlcjtcbiAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVUeXBlO1xuICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVUeXBlO1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IFNlc3Npb25UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vU2Vzc2lvblRlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZVN0YXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQgVG9rZW5Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvVG9rZW5Db250ZXh0JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCwge0NoYW5uZWxDb250ZXh0T3B0aW9uc30gZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmNvbnN0IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiA9ICdjbGllbnQ6dGVybWluYXRpb24nO1xuY29uc3QgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMgPSAzMDAwO1xuY29uc3Qgc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMTUwMDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8YW55LCBhbnk+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbCBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NoYW5uZWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5Db250ZXh0OiBUb2tlbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlQ29udGV4dDogU3RhdGVDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVZpZGVvRWxlbWVudDogUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb246IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvTXV0ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvUGF1c2VkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGxheWluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VGFyZ2V0TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlCaXRyYXRlTGltaXQ6IFJlYWRPbmx5U3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSZXNvbHV0aW9uOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgb3B0aW9ucz86IENoYW5uZWxPcHRpb25zKSB7XG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbENvbnRleHRPcHRpb25zOiBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7XG4gICAgICB0YXJnZXRMYWc6IG9wdGlvbnM/LnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBoYXNJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJylcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQoY2hhbm5lbENvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVZpZGVvRWxlbWVudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50KTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhdGUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b011dGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUb2tlbkV4cGlyaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRob3JpemVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkKTtcbiAgICB0aGlzLl9yZWFkT25seU9ubGluZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lKTtcbiAgICB0aGlzLl9yZWFkT25seUxvYWRpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGxheWluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGFuZGJ5ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5KTtcbiAgICB0aGlzLl9yZWFkT25seVN0b3BwZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VGFyZ2V0TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQubGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQpO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPih0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudCA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RW5kUG9pbnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludCk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbSk7XG4gICAgdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4odGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcyk7XG4gICAgdGhpcy5fcmVhZE9ubHlNZWRpYVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbSk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcbiAgICB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5ID0gbmV3IFNlc3Npb25UZWxlbWV0cnkoU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fc2Vzc2lvblRlbGVtZXRyeSk7XG4gICAgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodGhpcy52aWRlb0VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24uc3Vic2NyaWJlKHJlc29sdXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMocmVzb2x1dGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQuc3Vic2NyaWJlKGJpdHJhdGVMaW1pdCA9PiB7XG4gICAgICAgIGlmIChiaXRyYXRlTGltaXQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGJpdHJhdGVMaW1pdCxcbiAgICAgICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICAgICAgQml0cmF0ZU1vZGUuTm9ybWFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1PblVubW91bnQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtT25Vbm1vdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgJ2NsaWVudDp0ZXJtaW5hdGlvbi1vbi13aW5kb3ctdW5sb2FkJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB2aWRlb0VsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBEaW1lbnNpb24uZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVuY29kZWRFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IGF1dG9NdXRlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9NdXRlZDtcbiAgfVxuXG4gIGdldCBhdXRvUGF1c2VkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZDtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcGxheWluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBsYXlpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgdGFyZ2V0TGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRhcmdldExhZztcbiAgfVxuXG4gIGdldCBsYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TGFnO1xuICB9XG5cbiAgZ2V0IGJpdHJhdGVMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdC52YWx1ZTtcbiAgfVxuXG4gIGdldCByZXNvbHV0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0IGZhaWx1cmVDb3VudCgpOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50O1xuICB9XG5cbiAgZ2V0IGVuZFBvaW50KCk6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWNzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzZXRCaXRyYXRlTGltaXQoYml0cmF0ZUxpbWl0OiBCaXRzUGVyU2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gYml0cmF0ZUxpbWl0O1xuICB9XG5cbiAgY2xlYXJCaXRyYXRlTGltaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgY29uc3QgYml0cmF0ZUluQml0c1BlclNlY29uZCA9IDA7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgIEJpdHJhdGVNb2RlLlJlc2V0XG4gICAgICApXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFyZ2V0TGFnKGxhZzogTWlsbGlzZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC50YXJnZXRMYWcudmFsdWUgPSBsYWc7XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcuc3Vic2NyaWJlKGlzU3RhcnRpbmcgPT4ge1xuICAgICAgICBpZiAoIWlzU3RhcnRpbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTdG9wKHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgfVxuXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVubXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IFVSTCB7XG4gICAgY29uc3QgdXJsID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudXJpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyBzdGFydCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NTdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiA9IHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgICBjb25zdCBsaXN0ZW5PblN0cmVhbVNldHVwID0gdGhpcy5fc2Vzc2lvblRlbGVtZXRyeS5saXN0ZW5PblN0cmVhbVNldHVwKCk7XG5cbiAgICBpZiAoIUVkZ2VBdXRoUGFyc2VyLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjay52YWx1ZSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ2luc2VydGFibGUtc3RyZWFtcyBlbmFibGVkLCBidXQgbWlzc2luZyBjYWxsYmFjayBmdW5jdGlvbiBDcmVhdGVDaGFubmVsT3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5pc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignaW5zZXJ0YWJsZS1zdHJlYW1zIGVuYWJsZWQsIGJ1dCBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWVkaWEgU3RyZWFtIFRyYWNrIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ3JlYXRlQ2hhbm5lbE9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayBjYWxsYmFjayBmdW5jdGlvbiBmb3VuZCwgYnV0IGZlYXR1cmUgaXMgbm90IGVuYWJsZWQgdmlhIGluc2VydGFibGUtc3RyZWFtcyBjYXBhYmlsaXR5Jyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuRXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgY2hhbm5lbCcsIGUpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nIHx8ICFTREsuYXV0b21hdGljUmV0cnlPbkZhaWx1cmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLmdldFJldHJ5SW50ZXJ2YWwoKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVkaWFTdHJlYW0gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIW1lZGlhU3RyZWFtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgICByZXR1cm4gc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmV0cnkgc3RhcnQgd2l0aCBpbml0aWFsIHN0YXRlIFslc10gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlLCBDaGFubmVsU3RhdGVbdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWVdKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgdW5hdXRob3JpemVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIHJlc3RyaWN0ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gYmxvY2tlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBsYXlpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwYXVzZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgaW52b2tlIHBsYXkoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gdW5zdXBwb3J0ZWQgZmVhdHVyZSwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byBjb25maWd1cmF0aW9uIGVycm9yLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcyhyZWFzb246IHN0cmluZyA9IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbik6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUuZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG5cbiAgICBjb25zdCBwbGF5UHJvbWlzZSA9IHZpZGVvRWxlbWVudC5wbGF5KCk7XG5cbiAgICBpZiAocGxheVByb21pc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxheVByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIGNvbnN0IGhhc0F1ZGlvVHJhY2sgPSAhIW1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcih0cmFjayA9PiB7XG4gICAgICAgIHJldHVybiB0cmFjay5raW5kID09PSAnYXVkaW8nO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiA9ICFTREsuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG5cbiAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZiB8fCB2aWRlb0VsZW1lbnQubXV0ZWQgfHwgIWhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBhdXNlZCB2aWRlbyBhZnRlciBwbGF5IGZhaWxlZC4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgbXV0ZWQgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQucGxheSgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQbGF5ZWQgdmlkZW8gYWZ0ZXIgYXV0byBtdXRpbmcuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZCB0byB1bm11dGUuJywgdGhpcy5zdHJlYW1JZCk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIENoYW5uZWxTdGF0ZSB7XG4gIE9mZmxpbmUgPSAxLFxuICBTdGFydGluZyxcbiAgUGF1c2VkLFxuICBQbGF5aW5nLFxuICBSZWNvdmVyaW5nLFxuICBSZWNvbm5lY3RpbmcsXG4gIFN0YW5kQnksXG4gIFN0b3BwZWQsXG4gIFVuYXV0aG9yaXplZCxcbiAgR2VvUmVzdHJpY3RlZCxcbiAgR2VvQmxvY2tlZCxcbiAgVW5zdXBwb3J0ZWRGZWF0dXJlLFxuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIEVycm9yXG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxTdGF0ZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IENoYW5uZWwsIHtDaGFubmVsT3B0aW9uc30gZnJvbSAnLi9DaGFubmVsJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQge01pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5cbnR5cGUgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgdG9rZW46IEVuY29kZWRFZGdlVG9rZW47XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVscyB7XG4gIHN0YXRpYyBjcmVhdGVDaGFubmVsKG9wdGlvbnM6IENyZWF0ZUNoYW5uZWxPcHRpb25zKTogQ2hhbm5lbCB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbm5lbE9wdGlvbnM6IENoYW5uZWxPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zLnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFja1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IENoYW5uZWwob3B0aW9ucy52aWRlb0VsZW1lbnQsIG9wdGlvbnMudG9rZW4sIGNoYW5uZWxPcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVscyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IENoYW5uZWxzIGZyb20gJy4vQ2hhbm5lbHMnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5cbmV4cG9ydCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljLCBJUnRjU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG5jb25zdCBkZWZhdWx0VGFyZ2V0TGFnID0gMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBudW1iZXI7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPGFueSwgYW55PjtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFN1YmplY3Q8VHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT4+O1xuICBoYXNJbnNlcnRhYmxlU3RyZWFtczogU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQ2hhbm5lbENvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbERpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5yZW5kZXJlckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsSW5pdGlhbGl6YXRpb24gPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gbmV3IFN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4obnVsbCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PENoYW5uZWxTdGF0ZT4oQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nKTtcbiAgICB0aGlzLmF1dG9NdXRlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dG9QYXVzZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wbGF5aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50YXJnZXRMYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4ob3B0aW9ucz8udGFyZ2V0TGFnID8/IGRlZmF1bHRUYXJnZXRMYWcpO1xuICAgIHRoaXMubGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KDApO1xuICAgIHRoaXMuYml0cmF0ZUxpbWl0ID0gbmV3IFN1YmplY3Q8Qml0c1BlclNlY29uZD4oMCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gbmV3IFN1YmplY3Q8RGltZW5zaW9uPihEaW1lbnNpb24uZW1wdHkpO1xuICAgIHRoaXMuZmFpbHVyZUNvdW50ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICB0aGlzLmVuZFBvaW50ID0gbmV3IFN1YmplY3Q8RW5kUG9pbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IFN1YmplY3Q8SVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5ydGNTdGF0aXN0aWNzID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KG51bGwpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgdGhpcy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gbmV3IFN1YmplY3Q8VHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT4+KG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuICAgIHRoaXMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPighIW9wdGlvbnM/Lmhhc0luc2VydGFibGVTdHJlYW1zKTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25Db250ZXh0IHtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBwZWVyQ29ubmVjdGlvbjogU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVDb250ZXh0IHtcbiAgaXNTdGFydGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgaXNEaXNwb3NlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gZmFsc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5Db250ZXh0IHtcbiAgdG9rZW46IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj4odG9rZW4pO1xuICAgIHRoaXMudG9rZW5FeHBpcmluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0RGlzY292ZXJ5VXJpID0gJ2h0dHBzOi8vcGNhc3QucGhlbml4cnRzLmNvbS9wY2FzdC9lbmRQb2ludHMnO1xuXG5leHBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZU1vZGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlTW9kZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlKTogQml0cmF0ZU1vZGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVNb2RlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLk5vcm1hbDpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Gb3JjZTpcbiAgICAgICAgcmV0dXJuICdGb3JjZSc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVNb2RlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZVN0YXRlLCBCaXRyYXRlU3RhdGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlU3RhdGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUpOiBCaXRyYXRlU3RhdGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVTdGF0ZSkge1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuS2VlcDpcbiAgICAgICAgcmV0dXJuICdLZWVwJztcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVTdGF0ZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgRGlzY292ZXJ5U2VydmljZSBmcm9tICcuL0Rpc2NvdmVyeVNlcnZpY2UnO1xuXG5jb25zdCBkaXNjb3ZlcnlDYWNoZUludGVydmFsID0gNjAwMDA7XG5cbmludGVyZmFjZSBJUGVyVVJJRW5kcG9pbnQgeyBbeDogc3RyaW5nXTogUHJvbWlzZTxFbmRQb2ludD4gfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3Zlcnkge1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGU6IElQZXJVUklFbmRwb2ludCA9IHt9O1xuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJpID0gbmV3IFVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpOiBVUkwpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdKSB7XG4gICAgICByZXR1cm4gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc2NvdmVyeVNlcnZpY2UgPSBuZXcgRGlzY292ZXJ5U2VydmljZSh1cmkpO1xuICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID0gZGlzY292ZXJ5U2VydmljZS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCgpO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0udGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPT09IGNhY2hlZFZhbHVlKSB7XG4gICAgICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICAgICAgfVxuICAgICAgfSwgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgZGVsZXRlIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjYWNoZWRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbmNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkucHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIHdpdGggbm8gZGF0YSBbJHt1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzU3RyaW5nID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGFzU3RyaW5nLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBuZXcgRW5kUG9pbnQoZW5kUG9pbnQsIHRpbWVvdXQpKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KHRpbWVvdXQ6IG51bWJlciA9IGRlZmF1bHRUaW1lb3V0KTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IERpc2NvdmVyeVVyaS5idWlsZERpc2NvdmVyeVVybCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGF3YWl0IHRoaXMuZGlzY292ZXJOZWFyYnlFbmRQb2ludHMobmV3IFVSTCh1cmwpLCB0aW1lb3V0KTtcbiAgICBsZXQgZmFpbGVkUmVxdWVzdHMgPSAwO1xuICAgIGNvbnN0IHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkID0gKCk6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGZhaWxlZFJlcXVlc3RzID49IGVuZFBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmVqZWN0KGBEaXNjb3Zlcnkgb2YgWyR7ZW5kUG9pbnRzLmxlbmd0aH1dIGVuZHBvaW50cyBmcm9tIFske3VybH1dIGZhaWxlZCwgcHJldmVudGluZyBpdCBmcm9tIGNvbXBsZXRpbmdgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlbmRQb2ludCA9IGF3YWl0IFByb21pc2UucmFjZShlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IGVuZFBvaW50XG4gICAgICAucGluZygpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGluZyBlbmQgcG9pbnQgWyVzXScsIGVuZFBvaW50LCBlKTtcblxuICAgICAgICBmYWlsZWRSZXF1ZXN0cysrO1xuXG4gICAgICAgIHJldHVybiBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHRpbWUgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcmVkIGVuZCBwb2ludCBbJXNdIHdpdGggdGltZSBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSwgdGltZSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICAgICAgcnVudGltZTogKG5vdyAtIFNESy5wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgICAgICB2YWx1ZToge3VpbnQ2NDogdGltZSB8fCAwfSxcbiAgICAgICAgICByZXNvdXJjZTogZW5kUG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBraW5kOiAncGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgICAgfSkpKTtcblxuICAgIHJldHVybiBlbmRQb2ludDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9IGZyb20gJy4uL2RlZmF1bHRzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlVcmkge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZGlzY292ZXJ5VXJpOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KGRlZmF1bHREaXNjb3ZlcnlVcmkpO1xuXG4gIHN0YXRpYyBnZXQgdXJpKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeVVyaS5fZGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkRGlzY292ZXJ5VXJsKHVyaTogVVJMKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHVyaS50b1N0cmluZygpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIHVybC5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5pbXBvcnQge1xuICBJU3Vic2NyaWJlUmVzcG9uc2UsXG4gIElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdFxufSBmcm9tICcuLi9hcGkvU3Vic2NyaWJlJztcbmltcG9ydCB7SVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCwgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9TZXRSZW1vdGVEZXNjcmlwdGlvbic7XG5pbXBvcnQge0lEZXN0cm95U3RyZWFtUmVxdWVzdCwgSURlc3Ryb3lTdHJlYW1SZXNwb25zZX0gZnJvbSAnLi4vYXBpL0Rlc3Ryb3lTdHJlYW0nO1xuaW1wb3J0IHtJQWRkSWNlQ2FuZGlkYXRlc1JlcXVlc3QsIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9BZGRJY2VDYW5kaWRhdGVzJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZSwgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEJpdHJhdGVNb2RlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVNb2RlTWFwcGluZyc7XG5pbXBvcnQgQml0cmF0ZVN0YXRlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVTdGF0ZU1hcHBpbmcnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IHtcbiAgSVB1Ymxpc2hSZXNwb25zZSxcbiAgSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QsXG4gIFB1Ymxpc2hTdGF0dXNcbn0gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNztcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBSZW1vdmVUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIERlc3Ryb3lTdHJlYW1TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtIHtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3Vic2NyaWJlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtcbiAgc3RhdHVzOiBQdWJsaXNoU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn07XG5cbmludGVyZmFjZSBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzO1xuICBzZXNzaW9uRGVzY3JpcHRpb24/OiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5pbnRlcmZhY2UgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXM7XG4gIG9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXM7XG59XG5cbmludGVyZmFjZSBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kUG9pbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRW5kUG9pbnQnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXJpOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcm91bmRUcmlwVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHVyaTogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIpIHtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gICAgdGhpcy5fdGltZW91dCA9IHRpbWVvdXQ7XG5cbiAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRW5kIHBvaW50IHJlcXVpcmVzIGEgdGltZW91dGApO1xuICAgIH1cbiAgfVxuXG4gIGdldCByb3VuZFRyaXBUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRW5kUG9pbnRbdXJpPSR7dGhpcy5fdXJpfV1gO1xuICB9XG5cbiAgYXN5bmMgcGluZygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRQaW5nVXJsKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBQaW5nIHRpbWVkIG91dCBbJHt1cmx9XWApKSwgdGhpcy5fdGltZW91dClcbiAgICAgIClcbiAgICBdKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7IC8qIEhhbmRsZSAqL1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQaW5nIGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIHRoaXMuX3JvdW5kVHJpcFRpbWUgPSBmaW5pc2hlZCAtIHN0YXJ0O1xuXG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICBhc3luYyBzdWJzY3JpYmUodG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAnc3Vic2NyaWJlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYFN1YnNjcmliZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHN1YnNjcmliZSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBwdWJsaXNoKG5hbWU6IHN0cmluZywgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3B1Ymxpc2gnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgb3B0aW9uczogWyd1cGxvYWQnXSxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElQdWJsaXNoV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFsndXBsb2FkJ10sXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgbmV3IEVycm9yKGBQdWJsaXNoIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBQdWJsaXNoU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHB1Ymxpc2ggcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtOiBJU3RyZWFtLCBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzY3JpcHRpb24nLCAncmVtb3RlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICB0eXBlOiBzZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgc2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIG5ldyBFcnJvcihgU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHNldCByZW1vdGUgZGVzY3JpcHRpb24gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGxpbWl0Qml0cmF0ZShcbiAgICBzdHJlYW06IElTdHJlYW0sXG4gICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXIsXG4gICAgYml0cmF0ZUluQml0c1BlclNlY29uZDogQml0c1BlclNlY29uZCxcbiAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSxcbiAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUsXG4gICk6IFByb21pc2U8SVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdiaXRyYXRlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZSksXG4gICAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlKVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgbmV3IEVycm9yKGBTZXQgbGltaXQgYml0cmF0ZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3Qgc2V0IGxpbWl0IGJpdHJhdGUgcmVzcG9uc2UgWyVzXSBpbiBbJXNdIG1zJywgc3RhdHVzLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiB7c3RhdHVzfTtcbiAgfVxuXG4gIGFzeW5jIGFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtOiBJU3RyZWFtLCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSwgZGlzY292ZXJ5Q29tcGxldGVkOiBib29sZWFuLCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnaWNlJywgJ2NhbmRpZGF0ZXMnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBjYW5kaWRhdGVzLFxuICAgICAgZGlzY292ZXJ5Q29tcGxldGVkLFxuICAgICAgb3B0aW9uc1xuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIG5ldyBFcnJvcihgQWRkIGljZSBjYW5kaWRhdGVzIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgYWRkIElDRSBjYW5kaWRhdGVzIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbShzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBEZWxldGUgc3RyZWFtIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgc3RyZWFtJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGRlc3Ryb3kgc3RyZWFtIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGRlc3Ryb3lTdHJlYW1SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbU9uVW5tb3VudChzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFuYXZpZ2F0b3I/LnNlbmRCZWFjb24pIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmRlc3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBuYXZpZ2F0b3Iuc2VuZEJlYWNvbih1cmwsIGZvcm1EYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRVcmwocGF0aDogc3RyaW5nW10pOiBVUkwge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBwYXRoQXNBcnJheSA9IHVyaS5wYXRobmFtZS5zcGxpdCgnLycpO1xuXG4gICAgcGF0aEFzQXJyYXkubGVuZ3RoID0gcGF0aEFzQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgIHVyaS5wYXRobmFtZSA9IHBhdGhBc0FycmF5LmNvbmNhdCguLi5wYXRoKS5qb2luKCcvJyk7XG5cbiAgICByZXR1cm4gdXJpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBpbmdVcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICB1cmkuc2VhcmNoID0gYD8ke25ldyBVUkxTZWFyY2hQYXJhbXMoW1sndHlwZScsICdodHRwJ10sIFsndmVyc2lvbicsIHNka1ZlcnNpb25dLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFB1Ymxpc2hTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTdWJzY3JpYmVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IERlc3Ryb3lTdHJlYW1TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU3Vic2NyaWJlUmVzcG9uc2U7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2U6IElTdWJzY3JpYmVSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLmxhZyA9IGRhdGEubGFnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElQdWJsaXNoUmVzcG9uc2U7XG4gICAgY29uc3QgcHVibGlzaFJlc3BvbnNlOiBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHB1Ymxpc2hSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHtpY2VTZXJ2ZXJzOiBbXX07XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9IGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICB1cmxzOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSBjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSBjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y0NvbmZpZ3VyYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2hhbm5lbFN0YXRlfSBmcm9tICcuLi9jaGFubmVscyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmd9IGZyb20gJy4vTGl2ZVN0cmVhbWluZyc7XG5pbXBvcnQge0xpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENodW5rZWRTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NodW5rZWRTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfc3RyZWFtU3RhdGlzdGljczogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIHByaXZhdGUgX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IElEaXNwb3NhYmxlPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSlcbiAgICAgIC50aGVuKGVuZFBvaW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZmVyU2RwID0gY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgb3JpZ2luU3RhcnRUaW1lOiBEYXRlLm5vdygpIC0gbGFnICsgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDIsXG4gICAgICAgICAgbGFnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIExpdmVTdHJlYW1pbmcuc3RhcnQodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgb2ZmZXJTZHAsIG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4ocGxheWVyID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGxheWVyO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdMaXZlU3RyZWFtaW5nIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb25pdG9yKHBsYXllcjogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0cmVhbVN0YXRpc3RpY3MgPSBMaXZlU3RyZWFtaW5nLmdldFN0YXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQrKztcblxuICAgICAgICBpZiAodGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA+IDYpIHtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcyA9IG5ld1N0cmVhbVN0YXRpc3RpY3M7XG4gICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcbiAgICB9LCAxMDAwKTtcblxuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtJSGxzUGxheWVyVHlwZX0gZnJvbSAnLi9JSGxzUGxheWVyJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGxzUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElIbHNQbGF5ZXJUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcuaGxzUGxheWVyKSB7XG4gICAgICBpZiAoTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgTGl2ZVN0cmVhbWluZy5obHNQbGF5ZXIoe1xuICAgICAgICAgIGVuYWJsZVdvcmtlcjogdHJ1ZSxcbiAgICAgICAgICBtYXhCdWZmZXJMZW5ndGg6IDEsXG4gICAgICAgICAgbGl2ZUJhY2tCdWZmZXJMZW5ndGg6IDAsXG4gICAgICAgICAgbGl2ZVN5bmNEdXJhdGlvbjogNyxcbiAgICAgICAgICBsaXZlRHVyYXRpb25JbmZpbml0eTogdHJ1ZSxcbiAgICAgICAgICBsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uOiBJbmZpbml0eSxcbiAgICAgICAgICBoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2Q6IDFcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5sb2FkU291cmNlKHRoaXMuX21hbmlmZXN0VVJJKTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmF0dGFjaE1lZGlhKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnKSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQuc3JjID0gdGhpcy5fbWFuaWZlc3RVUkk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExpdmVTdHJlYW1pbmcuaGxzUGxheWVyICYmIExpdmVTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCk7XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICB3aWR0aDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldFdpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0SGVpZ2h0LFxuICAgICAgY3VycmVudFRpbWU6IHRoaXMuX3BsYXllci5tZWRpYS5jdXJyZW50VGltZSxcbiAgICAgIGxhZzogMC4wLFxuICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlLFxuICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnSURMRScpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRVJST1InIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRU5ERUQnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ0xPQURJTkcnKSB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnV0FJVElORycpKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgKGN1cnJlbnRUaW1lICsgKHRoaXMuX29wdGlvbnMubGFnIC8gMTAwMCkpIC0gdHJ1ZUN1cnJlbnRUaW1lKTtcblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyICYmIHRoaXMuX3BsYXllci5kZXN0cm95KSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5zZXJ0YWJsZVN0cmVhbXMge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBzdGF0aWMgc2V0dXBNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKHRyYW5zZm9ybTogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxhbnksIGFueT4sIHN0cmVhbTogTWVkaWFTdHJlYW0pIHtcbiAgICBjb25zdCB0cmFjayA9IHN0cmVhbS5nZXRWaWRlb1RyYWNrcygpWzBdO1xuXG4gICAgaWYgKHRyYWNrLmtpbmQgPT09ICd2aWRlbycpIHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtfSk7XG4gICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2t9KTtcbiAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiAndmlkZW8nfSk7XG4gICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICBzb3VyY2VcbiAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZFN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuXG4gICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuXG4gICAgICByZXR1cm4gdHJhbnNmb3JtZWRTdHJlYW07XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW5zZXJ0YWJsZVN0cmVhbXMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFdlYlBsYXllciBmcm9tICcuL1dlYlBsYXllcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgU2hha2FQbGF5ZXIgZnJvbSAnLi9TaGFrYVBsYXllcic7XG5pbXBvcnQgSGxzUGxheWVyIGZyb20gJy4vSGxzUGxheWVyJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgTGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgTGl2ZVN0cmVhbWluZyB7XG4gIHByaXZhdGUgc3RhdGljIF9wZW5kaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgc3RhdGljIF9obHNQbGF5ZXI6IEhsc1BsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9waGVuaXhXZWJQbGF5ZXI6IFdlYlBsYXllclR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYTogU2hha2FUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfb3B0aW9uczogTGl2ZVN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgc3RhdGljIF9wbGF5ZXI6IFNoYWthUGxheWVyIHwgV2ViUGxheWVyIHwgSGxzUGxheWVyO1xuXG4gIHN0YXRpYyBnZXQgaGxzUGxheWVyKCk6IEhsc1BsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9obHNQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHBoZW5peFdlYlBsYXllcigpOiBXZWJQbGF5ZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fcGhlbml4V2ViUGxheWVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYSgpOiBTaGFrYVR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zaGFrYTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBzdGFydCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKTogUHJvbWlzZTxJRGlzcG9zYWJsZT4ge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllciB8fCB0aGlzLl9zaGFrYSB8fCB0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCk7XG4gICAgfVxuXG4gICAgaWYgKCFTREsud2ViUGxheWVyTG9hZGVyICYmICFTREsuc2hha2FQbGF5ZXJMb2FkZXIgJiYgIVNESy5obHNKc0xvYWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwbGF5ZXIgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkLWZlYXR1cmUsIGFkZCBzdHJlYW0gcGxheWVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKFNESy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLmhsc0pzTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5faGxzUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsud2ViUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fcGhlbml4V2ViUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5zaGFrYVBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3NoYWthID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBsYXkoUGxheWVyOiB0eXBlb2YgV2ViUGxheWVyIHwgdHlwZW9mIFNoYWthUGxheWVyIHwgdHlwZW9mIEhsc1BsYXllciwgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucyk6IElEaXNwb3NhYmxlIHtcbiAgICBjb25zdCBkYXNoTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tcGRcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgaGxzTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tM3U4XFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IG1hbmlmZXN0VXJsID0gZGFzaE1hbmlmZXN0VXJsTWF0Y2ggJiYgZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gPyBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuICAgIGNvbnN0IHBsYXlsaXN0VXJsID0gaGxzTWFuaWZlc3RVcmxNYXRjaCAmJiBobHNNYW5pZmVzdFVybE1hdGNoWzFdID8gaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuXG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhscyB8fCAodGhpcy5faGxzUGxheWVyICYmIHRoaXMuX2hsc1BsYXllci5pc1N1cHBvcnRlZCgpKSkge1xuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdobHMnLCBzdHJlYW1JZCwgcGxheWxpc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2Rhc2gnLCBzdHJlYW1JZCwgbWFuaWZlc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZGVkKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZyk6IElEaXNwb3NhYmxlIHtcbiAgICBpZiAoIXRoaXMuX3NoYWthICYmICF0aGlzLl9waGVuaXhXZWJQbGF5ZXIgJiYgIXRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShXZWJQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2hha2EpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoU2hha2FQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gTmV0d29ya1N0YXRlcyB7XG4gIE5ldHdvcmtFbXB0eSxcbiAgTmV0d29ya0lkbGUsXG4gIE5ldHdvcmtMb2FkaW5nLFxuICBOZXR3b3JrTm9Tb3VyY2Vcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgSW5zZXJ0YWJsZVN0cmVhbXMgZnJvbSAnLi9JbnNlcnRhYmxlU3RyZWFtcyc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwLCBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgIF0pXG4gICAgICAudGhlbigoW2VuZFBvaW50LCB7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259XSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdMb2NhbCBvZmZlcjpcXG4nICsgbG9jYWxPZmZlci5zZHApO1xuXG4gICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHRyeWluZyB0byByZWNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjYXNlICdjbG9zZWQnOlxuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCByZXRyeWluZyB0byBjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgc3RyZWFtID0gZS5zdHJlYW1zWzBdO1xuXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBJbnNlcnRhYmxlU3RyZWFtcy5zZXR1cE1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0odGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjay52YWx1ZSwgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gcnRjQ29ubmVjdGlvbk1vbml0b3IucnRjU3RhdGlzdGljLnN1YnNjcmliZShzdGF0aXN0aWNzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzLnZhbHVlID0gc3RhdGlzdGljcztcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgJiYgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXVkaW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCB2aWRlb1RyYWNrRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy5hdWRpbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy5hdWRpby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgbmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nfSBmcm9tICcuL0xpdmVTdHJlYW1pbmcnO1xuaW1wb3J0IHtMaXZlU3RyZWFtaW5nT3B0aW9ucywgTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG50eXBlIFNoYWthT3B0aW9ucyA9IHtcbiAgYWJyOiB7XG4gICAgZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiBudW1iZXI7XG4gIH07XG4gIG1hbmlmZXN0OiB7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgc3RyZWFtaW5nOiB7XG4gICAgcmVidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlckJlaGluZDogbnVtYmVyO1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgICAgIGJhY2tvZmZGYWN0b3I6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2hha2Ege1xuICBjb25maWd1cmU6IChvOiBTaGFrYU9wdGlvbnMpID0+IHZvaWQ7XG4gIGxvYWQ6ICh1cmk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZ2V0U3RhdHM6ICgpID0+IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xuICBkZXN0cm95OiAoKSA9PiB2b2lkO1xuICB1bmxvYWQ6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYWthUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NoYWthUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJU2hha2E7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IExpdmVTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoTGl2ZVN0cmVhbWluZy5zaGFrYSkge1xuICAgICAgY29uc3QgcGxheWVyT3B0aW9uczogU2hha2FPcHRpb25zID0ge1xuICAgICAgICBhYnI6IHtkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGU6IDIwMDAwMDB9LFxuICAgICAgICBtYW5pZmVzdDoge3JldHJ5UGFyYW1ldGVyczoge3RpbWVvdXQ6IDEwMDAwfX0sXG4gICAgICAgIHN0cmVhbWluZzoge1xuICAgICAgICAgIHJlYnVmZmVyaW5nR29hbDogMixcbiAgICAgICAgICBidWZmZXJpbmdHb2FsOiAxMCxcbiAgICAgICAgICBidWZmZXJCZWhpbmQ6IDMwLFxuICAgICAgICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogMTAsXG4gICAgICAgICAgICBiYWNrb2ZmRmFjdG9yOiAxLjFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLnNoYWthLlBsYXllcih0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgdGhpcy5sb2FkUGxheWVyKHBsYXllck9wdGlvbnMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHMoKTogTGl2ZVN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgICAgbGFnOiAwLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICAuLi50aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKSxcbiAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgbGFnOiAwXG4gICAgfTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gbGFnO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MucGxheVRpbWUgPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIudW5sb2FkKCk7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQbGF5ZXIocGxheWVyQ29uZmlnOiBTaGFrYU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuY29uZmlndXJlKHBsYXllckNvbmZpZyk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGxheWVyLmxvYWQodGhpcy5fbWFuaWZlc3RVUkkpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gREFTSCBsaXZlIHN0cmVhbSBoYXMgYmVlbiBsb2FkZWQnLCB0aGlzLl9zdHJlYW1JZCk7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQucGxheSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQucGxheSgpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEVycm9yIHdoaWxlIGxvYWRpbmcgREFTSCBsaXZlIHN0cmVhbSBbJXNdJywgdGhpcy5fc3RyZWFtSWQsIGUuY29kZSwgZSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQgQ2h1bmtlZFN0cmVhbSBmcm9tICcuL0NodW5rZWRTdHJlYW0nO1xuaW1wb3J0IFJlYWxUaW1lU3RyZWFtIGZyb20gJy4vUmVhbFRpbWVTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtaW5nJyk7XG5cbiAgc3RhdGljIGNyZWF0ZSh0b2tlbjogc3RyaW5nLCBjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogSVN0cmVhbSB7XG4gICAgY29uc3QgdG9rZW5DYXBhYmlsaXRpZXMgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS5jYXBhYmlsaXRpZXM7XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3J0bXAnKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdTREsgZG9lcyBub3Qgc3VwcG9ydCBSVE1QIHBsYXliYWNrLicpO1xuICAgICAgY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdzdHJlYW1pbmcnKSkge1xuICAgICAgcmV0dXJuIG5ldyBDaHVua2VkU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlYWxUaW1lU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJlYW1GYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ30gZnJvbSAnLi9MaXZlU3RyZWFtaW5nJztcbmltcG9ydCB7TGl2ZVN0cmVhbWluZ09wdGlvbnMsIExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuY29uc3QgYmFuZHdpZHRoVG9TdGFydEF0ID0gMzAwMDAwMDsgLy8gQ29ycmVzcG9uZHMgdG8gNzIwcCBpbiBtb3N0IHNldHVwc1xuY29uc3QgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgPSAxNTAwMDtcblxudHlwZSBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyID0gKGV2dDogV2ViUGxheWVyRXZlbnQpID0+IHZvaWQ7XG50eXBlIFdlYlBsYXllckV2ZW50ID0ge1xuICBjb2RlOiBudW1iZXI7XG4gIHNldmVyaXR5OiBudW1iZXI7XG4gIGVycm9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElXZWJQbGF5ZXIge1xuICBzdGFydDogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIpOiB2b2lkO1xuICBkaXNwb3NlKCk6IHZvaWQ7XG4gIGVycm9yczoge1xuICAgIHNldmVyaXR5OiB7XG4gICAgICBSRUNPVkVSQUJMRTogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGdldFN0YXRzKCk6IExpdmVTdHJlYW1pbmdTdGF0aXN0aWNzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignV2ViUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJV2ViUGxheWVyO1xuICBwcml2YXRlIF9sYXN0UmVsb2FkVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBMaXZlU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKExpdmVTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zID0ge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBiYW5kd2lkdGhUb1N0YXJ0QXRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBMaXZlU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5XZWJQbGF5ZXIodGhpcy5fbG9nZ2VyLCB0aGlzLl92aWRlb0VsZW1lbnQsIHBsYXllck9wdGlvbnMpO1xuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KHRoaXMuX21hbmlmZXN0VVJJKTtcblxuICAgICAgdGhpcy5fcGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JPYmplY3QgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5SZWxvYWQoKSAmJiBlcnJvck9iamVjdCAmJiAoZXJyb3JPYmplY3QuY29kZSA9PT0gMyB8fCBlcnJvck9iamVjdC5zZXZlcml0eSA9PT0gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuZXJyb3JzLnNldmVyaXR5LlJFQ09WRVJBQkxFKSkge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSBhZnRlciBlcnJvciBldmVudCBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgICAgIHRoaXMucmVsb2FkSWZBYmxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZWxvYWQgd2l0aCBlcnJvciBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIgJiYgTGl2ZVN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuaXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXRTdGF0cygpOiBMaXZlU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlLFxuICAgICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lIHx8IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXTtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5pc05hdGl2ZSAmJiBzdGF0aXN0aWNzLmRlbGl2ZXJ5VHlwZSA9PT0gJ0hscycpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSAtIHN0YXRpc3RpY3MubGFnO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5jdXJyZW50VGltZSkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5pc05hdGl2ZSkge1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5SZWxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQgPSAhdGhpcy5fbGFzdFJlbG9hZFRpbWUgfHwgRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RSZWxvYWRUaW1lID4gbWluVGltZUJlZm9yZU5leHRSZWxvYWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fdmlkZW9FbGVtZW50ICYmIHRoaXMuX3BsYXllciAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoICE9PSAwICYmIGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRJZkFibGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbG9hZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gdGhhdCB3YXMgYWN0aXZlIGZvciBhdCBsZWFzdCBbJXNdIHNlY29uZHMnLCB0aGlzLl9zdHJlYW1JZCwgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgLyAxMDAwKTtcblxuICAgIHRoaXMuX2xhc3RSZWxvYWRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1NES1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0VmVyc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICBzdGF0aWMgZ2V0IHNka1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF9fU0RLVkVSU0lPTl9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmVyc2lvbjtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBzZXQgdXJsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVsZW1ldHJ5VXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgdGVsZW1ldHJ5VXJsLnBhdGhuYW1lID0gdGVsZW1ldHJ5VXJsLnBhdGhuYW1lICsgJy9sb2dzJztcblxuICAgIHRoaXMuX3VybCA9IHRlbGVtZXRyeVVybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXQgdGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBfbG9nczogQXJyYXk8SUxvZ0l0ZW0+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gbG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIHRpbWVzdGFtcDogRGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluXG4gICAgfTtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgdGhpcy5fbG9ncy5wdXNoKGxvZ1JlY29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvZ3MudW5zaGlmdChsb2dSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzKGxvZ01lc3NhZ2VzOiBBcnJheTxJTG9nSXRlbT4pOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IGxvZ01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRMb2dzSWZBYmxlKCk6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2xvZ3MubGVuZ3RoIDw9IDAgfHwgdGhpcy5faXNTZW5kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG51bWJlck9mTG9nc1RvU2VuZCA9IDA7XG4gICAgbGV0IHNpemVPZkxvZ3NUb1NlbmQgPSAwO1xuXG4gICAgdGhpcy5faXNTZW5kaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBpdGVtLmxlbmd0aCA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAyMDAwO1xuY29uc3QgZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAxO1xuY29uc3QgZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAzMDAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9uZW50aWFsQmFja29mZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRcbiAgKSB7XG4gICAgdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gIH1cblxuICBnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KGZhaWx1cmVDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMgPSB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIC8gMTAwMDtcbiAgICBjb25zdCByYW5kb21pemF0aW9uID0gMC41ICsgKDAuNSAqIE1hdGgucmFuZG9tKCkpOyAvLyBbMC41LCAxKVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZiA9IE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcywgZmFpbHVyZUNvdW50IC0gMik7IC8vICBbMS80IDEvMiAxIDIgNCA4IC4uLi5dXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gPSBNYXRoLmZsb29yKGV4cG9uZW50aWFsQmFja29mZikgKiByYW5kb21pemF0aW9uO1xuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCA9IE1hdGguY2VpbChNYXRoLm1heChleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiAqIDEwMDAsIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpKTtcblxuICAgIHJldHVybiBNYXRoLm1pbihleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQsIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpbWVuc2lvbiBpbXBsZW1lbnRzIElDb21wYXJhYmxlPERpbWVuc2lvbj4ge1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xuICByZWFkb25seSBoZWlnaHQ6IG51bWJlcjtcblxuICBzdGF0aWMgZ2V0IGVtcHR5KCk6IERpbWVuc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMCwgMCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogRGltZW5zaW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyICYmIHRoaXMud2lkdGggPT09IG90aGVyLndpZHRoICYmIHRoaXMuaGVpZ2h0ID09PSBvdGhlci5oZWlnaHQ7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLndpZHRofXgke3RoaXMuaGVpZ2h0fWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBOZXR3b3JrTW9uaXRvciBmcm9tICcuLi9kb20vTmV0d29ya01vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmludGVyZmFjZSBJTmV0d29ya1N0YXRpc3RpY3Mge1xuICBydHQ/OiBudW1iZXI7XG4gIGVmZmVjdGl2ZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2Vzc2lvblRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gU0RLLmFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrTW9uaXRvcjogTmV0d29ya01vbml0b3IgPSBuZXcgTmV0d29ya01vbml0b3IoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9sYXN0TmV0d29ya1N0YXRpc3RpY3M6IElOZXR3b3JrU3RhdGlzdGljcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yKTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLl9uZXR3b3JrTW9uaXRvci5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5pc0ZvcmVncm91bmQuc3Vic2NyaWJlKGlzRm9yZWdyb3VuZCA9PiB7XG4gICAgICB0aGlzLnJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLnJ0dC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrUlRUVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmVmZmVjdGl2ZVR5cGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gIH1cblxuICBsaXN0ZW5PblN0cmVhbVNldHVwKCk6IFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICAgIHJldHVybiBuZXcgU3RyZWFtU2V0dXBMaXN0ZW5lcih0aGlzLl9wYWdlTG9hZFRpbWUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lU2luY2VMYXN0Q2hhbmdlID0gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBpc0ZvcmVncm91bmQgPyBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQgOiBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlTGFzdENoYW5nZX1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ0FwcGxpY2F0aW9uIGhhcyBnb25lIGludG8gdGhlIFslc10gYWZ0ZXIgWyVzXSBtcycsXG4gICAgICBpc0ZvcmVncm91bmQgPyAnZm9yZWdyb3VuZCcgOiAnYmFja2dyb3VuZCcsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZUxhc3RDaGFuZ2UpLnRvSXNvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1JUVFVwZGF0ZShuZXdSVFQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkUnR0ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dDtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQgPSBuZXdSVFQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogbmV3UlRUfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFJ0dCA/IHt1aW50NjQ6IG9sZFJ0dH0gOiB1bmRlZmluZWQsXG4gICAgICByZXNvdXJjZTogJ25hdmlnYXRvcidcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBSVFQgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld1JUVCxcbiAgICAgIG9sZFJ0dFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKG5ld05ldHdvcmtUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZE5ldHdvcmtUeXBlID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGU7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZSA9IG5ld05ldHdvcmtUeXBlO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdOZXR3b3JrVHlwZX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGROZXR3b3JrVHlwZSA/IHtzdHJpbmc6IG9sZE5ldHdvcmtUeXBlfSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGVmZmVjdGl2ZSB0eXBlIGhhcyBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3TmV0d29ya1R5cGUsXG4gICAgICBvbGROZXR3b3JrVHlwZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZShuZXdDYXBhY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRDYXBhY2l0eSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSA9IG5ld0NhcGFjaXR5O1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7ZmxvYXQ6IG5ld0NhcGFjaXR5fSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZENhcGFjaXR5ID8ge2Zsb2F0OiBvbGRDYXBhY2l0eX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBkb3dubGluayB0aHJvdWdocHV0IGNhcGFjaXR5IGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdDYXBhY2l0eSxcbiAgICAgIG9sZENhcGFjaXR5XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlb1RlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF9saXN0ZW5Ub0ZpcnN0VGltZTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yU3RhbGw6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvckNvbnRpbnVhdGlvbjogKGV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvU3RhbGxlZDogbnVtYmVyO1xuICBwcml2YXRlIF9sYXN0UHJvZ3Jlc3M6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9SZXNvbHV0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyOiBEaXNwb3NhYmxlO1xuICBwcml2YXRlIF9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXI6IERpc3Bvc2FibGU7XG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtSWQ6IHN0cmluZywgcGFnZUxvYWRUaW1lOiBudW1iZXIsIGNoYW5uZWxTdGFydFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IGNoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSA9ICgpOiB2b2lkID0+IHRoaXMuY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB9KTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIpO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuRm9yU3RhbGwgPSAoKTogdm9pZCA9PiB0aGlzLm9uU3RhbGwoKTtcblxuICAgIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbiA9IChldmVudCk6IHZvaWQgPT4gdGhpcy5vbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcblxuICAgIHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZHVyYXRpb25TaW5jZVBhZ2VMb2FkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHJldHVybiBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTtcbiAgICB0aGlzLnB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lci5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fdGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBGaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIENoYW5uZWwgY3JlYXRpb24gdG8gZmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlkZW9TdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5TdGFsbGVkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHN0YWxsZWQnLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk6IHZvaWQge1xuICAgIGlmICghdmlkZW8uYnVmZmVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB2aWRlby5idWZmZXJlZC5sZW5ndGg7XG4gICAgY29uc3QgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQgPSBldmVudC50eXBlID09PSAncGxheWluZydcbiAgICB8fCBidWZmZXJMZW5ndGggPiAwID8gKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcydcbiAgICAgIHx8IGV2ZW50LnR5cGUgPT09ICd0aW1ldXBkYXRlJylcbiAgICAgICYmIHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKSA9PT0gdGhpcy5fbGFzdFByb2dyZXNzIDogdHJ1ZTtcblxuICAgIGlmICghdGhpcy5fdmlkZW9TdGFsbGVkIHx8IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lU2luY2VTdG9wID0gRGF0ZS5ub3coKSAtIHRoaXMuX3ZpZGVvU3RhbGxlZDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQnVmZmVyaW5nLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VTdG9wfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgcmVjb3ZlcmVkIGZyb20gc3RhbGwgYWZ0ZXIgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VTdG9wKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBudWxsO1xuICB9XG5cbiAgb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKG5ld1Jlc29sdXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld1Jlc29sdXRpb259LFxuICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5fdmlkZW9SZXNvbHV0aW9uID8ge3N0cmluZzogdGhpcy5fdmlkZW9SZXNvbHV0aW9ufSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9SZXNvbHV0aW9uID0gbmV3UmVzb2x1dGlvbjtcbiAgfVxufSIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdGlmKF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0pIHtcblx0XHRyZXR1cm4gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gbW9kdWxlWydkZWZhdWx0J10gOlxuXHRcdCgpID0+IG1vZHVsZTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gbW9kdWxlIGV4cG9ydHMgbXVzdCBiZSByZXR1cm5lZCBmcm9tIHJ1bnRpbWUgc28gZW50cnkgaW5saW5pbmcgaXMgZGlzYWJsZWRcbi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xucmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9
|