@phenixrts/sdk 2024.2.9-beta.379 → 2024.2.9-beta.380
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/channels/debug/channels.js +6 -2
- package/channels/debug/package.json +1 -1
- package/channels/debug.private/channels.js +6 -2
- package/channels/debug.private/package.json +1 -1
- package/channels/es5.debug.private/channels.js +1 -1
- package/channels/es5.debug.private/package.json +1 -1
- package/channels/min/channels.js +1 -1
- package/channels/min/channels.js.map +1 -1
- package/channels/min/package.json +1 -1
- package/channels/min.private/channels.js +1 -1
- package/channels/min.private/channels.js.map +1 -1
- package/channels/min.private/package.json +1 -1
- package/channels/package.json +1 -1
- package/full/debug/full.js +6 -2
- package/full/debug/package.json +1 -1
- package/full/debug.private/full.js +6 -2
- package/full/debug.private/package.json +1 -1
- package/full/min/full.js +1 -1
- package/full/min/full.js.map +1 -1
- package/full/min/package.json +1 -1
- package/full/min.private/full.js +1 -1
- package/full/min.private/full.js.map +1 -1
- package/full/min.private/package.json +1 -1
- package/full/package.json +1 -1
- package/package.json +1 -1
- package/publish/debug/package.json +1 -1
- package/publish/debug/publish.js +6 -2
- package/publish/debug.private/package.json +1 -1
- package/publish/debug.private/publish.js +6 -2
- package/publish/min/package.json +1 -1
- package/publish/min/publish.js +1 -1
- package/publish/min/publish.js.map +1 -1
- package/publish/min.private/package.json +1 -1
- package/publish/min.private/publish.js +1 -1
- package/publish/min.private/publish.js.map +1 -1
- package/publish/package.json +1 -1
|
@@ -2872,10 +2872,14 @@ Promise.prototype['finally'] = function (callback) {
|
|
|
2872
2872
|
return this.then(function (value) {
|
|
2873
2873
|
return constructor.resolve(callback()).then(function () {
|
|
2874
2874
|
return value;
|
|
2875
|
+
}, function () {
|
|
2876
|
+
return null;
|
|
2875
2877
|
});
|
|
2876
2878
|
}, function (reason) {
|
|
2877
2879
|
return constructor.resolve(callback()).then(function () {
|
|
2878
2880
|
return constructor.reject(reason);
|
|
2881
|
+
}, function () {
|
|
2882
|
+
return null;
|
|
2879
2883
|
});
|
|
2880
2884
|
});
|
|
2881
2885
|
};
|
|
@@ -11529,7 +11533,7 @@ var VersionManager = /*#__PURE__*/function () {
|
|
|
11529
11533
|
key: "sdkVersion",
|
|
11530
11534
|
get: function get() {
|
|
11531
11535
|
try {
|
|
11532
|
-
return "2025-01-
|
|
11536
|
+
return "2025-01-08T19:13:18.090Z (2024.2.9-beta.380)";
|
|
11533
11537
|
} catch (e) {
|
|
11534
11538
|
return this._defaultVersion;
|
|
11535
11539
|
}
|
|
@@ -13307,4 +13311,4 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
13307
13311
|
/******/ })()
|
|
13308
13312
|
;
|
|
13309
13313
|
});
|
|
13310
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBQSxPQUFYQSxXQUFXO0FBQUEsRUFBWEEsV0FBVztBQW1DaEIsK0RBQWVBLFdBQVc7Ozs7Ozs7Ozs7O0FDdkMxQjtBQUNBO0FBQ0E7QUFGQSxJQUlLQyxjQUFjLDBCQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxD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QUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFBRTtFQUN4TGdpQixHQUFHLEVBQUUsSUFBSWhpQixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztFQUN6U2lpQixHQUFHLEVBQUUsSUFBSWppQixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFB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O0FBQ0EsYUFBYTtBQUNiLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixlQUFlO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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Q0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7Ozs7OztVQ2RBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7O1dDdEJBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxpQ0FBaUMsV0FBVztXQUM1QztXQUNBOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EseUNBQXlDLHdDQUF3QztXQUNqRjtXQUNBO1dBQ0E7Ozs7O1dDUEE7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0EsdURBQXVELGlCQUFpQjtXQUN4RTtXQUNBLGdEQUFnRCxhQUFhO1dBQzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ05BO0FBQ0E7QUFDQTs7QUFFeUI7QUFDUztBQUNRO0FBSzVCO0FBR2QsK0RBQWU7RUFDYnBoRCxHQUFHLEVBQUhBLDRDQUFHO0VBQ0htekIsUUFBUSxFQUFSQSxpREFBUTtFQUNSbE4sWUFBWSxFQUFaQSxxREFBWUE7QUFDZCxDQUFDLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9Ccm93c2VyRGV0ZWN0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9OZXR3b3JrTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL1N0cmVhbVNldHVwTGlzdGVuZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlVG9rZW4udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9nbG9iYWxTY29wZS9HbG9iYWxTY29wZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGVMaXN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL051bWJlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvU3RyaW5ncy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9VaW50OEFycmF5cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9hc3NlcnRVbnJlYWNoYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0FwcGVuZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0NvbnNvbGVBcHBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckRlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nVGhyZXNob2xkLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc0ZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljc1R5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZUhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvU2RwUGFyc2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvUmVhZE9ubHlTdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9TdWJqZWN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvRW52aXJvbm1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9TREsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9UZWxlbWV0cnlVcmwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbFN0YXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9GcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9TdGF0ZUNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1Rva2VuQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vQml0c3RyZWFtUmVhZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L0gyNjRCaXRzdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvbmFsVW5pdC9OYWxVbml0VHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9uYWxVbml0L1NlaVBheWxvYWRUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L3BhcnNlL0FubmV4QkJ5dGVTdHJlYW1QYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L3BhcnNlL1BpY3R1cmVUaW1pbmdQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvdmNsL1BoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjNWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L3BhcnNlL3ZjbC9WYW5pbGxhVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vZGVjb2RlcnMvQml0c3RyZWFtRGVjb2RlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2RlY29kZXJzL0gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2RlY29kZXJzL1BoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9lbmNvZGluZy8yMDIzL1BoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvZXZlbnQvRXZlbnRFbWl0dGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2V2ZW50L0V2ZW50UHVibGlzaGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2V2ZW50L2V2ZW50cy9FbmNvZGVkTWVkaWFTdHJlYW1FdmVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVNb2RlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlU3RhdGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9FbmRQb2ludC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2ZyYW1lVGltaW5nL0gyNjRGcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9DaHVua2VkU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbWluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9IbHNQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTmV0d29ya1N0YXRlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TaGFrYVBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1dlYlBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0R1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0V4cG9uZW50aWFsQmFja29mZi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vRGltZW5zaW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9TZXNzaW9uVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9WaWRlb1RlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1RyYW5zZm9ybVN0cmVhbS53b3JrZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL3dvcmtlci1sb2FkZXIvZGlzdC9ydW50aW1lL2lubGluZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheUxpa2VUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aEhvbGVzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVJlc3QuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVTcHJlYWQuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1Byb3BlcnR5S2V5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsICgpID0+IHtcbnJldHVybiAiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5cbmNvbnN0IHZpc2liaWxpdHlDaGFuZ2VFdmVudCA9ICd2aXNpYmlsaXR5Y2hhbmdlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlJc0ZvcmVncm91bmQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNGb3JlZ3JvdW5kOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2U6IG51bWJlciA9IERhdGUubm93KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0KHRoaXMuX2lzRm9yZWdyb3VuZCk7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBnZXQgaXNGb3JlZ3JvdW5kKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kO1xuICB9XG5cbiAgcHVibGljIGdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCkgPT4gdGhpcy5faXNGb3JlZ3JvdW5kLnZhbHVlID0gIUdsb2JhbFNjb3BlLmRvY3VtZW50SXNIaWRkZW47XG4gICAgY29uc3QgdXNlRXZlbnRDYXB0dXJlUGhhc2UgPSBmYWxzZTtcblxuICAgIEdsb2JhbFNjb3BlLmFkZERvY3VtZW50RXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlRXZlbnQsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIHVzZUV2ZW50Q2FwdHVyZVBoYXNlKTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiBHbG9iYWxTY29wZS5yZW1vdmVEb2N1bWVudEV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZUV2ZW50LCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCB1c2VFdmVudENhcHR1cmVQaGFzZSkpKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckRldGVjdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4ID0gLyhNU0lFfCg/IUdlY2tvLispRmlyZWZveHwoPyFBcHBsZVdlYktpdC4rQ2hyb21lLispU2FmYXJpfCg/IUFwcGxlV2ViS2l0LispQ2hyb21lfEFwcGxlV2ViS2l0KD8hLitDaHJvbWV8LitTYWZhcmkpfEdlY2tvKD8hLitGaXJlZm94KSkoPzogfFxcLykoW1xcZC5hcHJlXSspL2c7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJNYWpvclZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzTW9iaWxlID0gKC9BbmRyb2lkfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxPcGVyYSBNaW5pL2kpLnRlc3QobmF2aWdhdG9yPy51c2VyQWdlbnQpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNBbmRyb2lkID0gKC9BbmRyb2lkL2kpLnRlc3QobmF2aWdhdG9yPy51c2VyQWdlbnQpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTY5ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS82OS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzAgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcwLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzEuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcyID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Mi4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzQgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc0LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzUuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc2ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ni4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzcgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc3LicpO1xuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9icm93c2VyTWFqb3JWZXJzaW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0FuZHJvaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNBbmRyb2lkO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTY5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNjk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcxO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc1O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc2KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc01vYmlsZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUFuZFZlcnNpb24gPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgpO1xuXG4gICAgaWYgKGJyb3dzZXJOYW1lQW5kVmVyc2lvbiAmJiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF0pIHtcbiAgICAgIHJldHVybiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJOYW1lTGlzdCB8fCAhYnJvd3Nlck5hbWVMaXN0WzBdKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJyb3dzZXJOYW1lTGlzdFswXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJWZXJzaW9uTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgICBpZiAoIWJyb3dzZXJWZXJzaW9uTGlzdCB8fCAhYnJvd3NlclZlcnNpb25MaXN0WzFdKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsVmVyc2lvbiA9IGJyb3dzZXJWZXJzaW9uTGlzdFsxXTtcblxuICAgIGlmICghZnVsbFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXIoZnVsbFZlcnNpb24uc3BsaXQoJy4nKVswXSkgfHwgMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgY29uc3QgbXNpZSA9IHVzZXJBZ2VudC5pbmRleE9mKCdNU0lFICcpO1xuXG4gICAgaWYgKG1zaWUgPiAwKSB7XG4gICAgICAvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKG1zaWUgKyA1LCB1c2VyQWdlbnQuaW5kZXhPZignLicsIG1zaWUpKSwgMTApfWA7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpZGVudCA9IHVzZXJBZ2VudC5pbmRleE9mKCdUcmlkZW50LycpO1xuXG4gICAgaWYgKHRyaWRlbnQgPiAwKSB7XG4gICAgICAvLyBJRSAxMSA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB1c2VyQWdlbnQuaW5kZXhPZigncnY6Jyk7XG5cbiAgICAgIHJldHVybiBgSUUvJHtwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKHZlcnNpb24gKyAzLCB1c2VyQWdlbnQuaW5kZXhPZignLicsIHZlcnNpb24pKSwgMTApfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQgTG9nZ2luZ0xldmVsTWFwcGluZyBmcm9tICcuLi9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZyc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIHtcbiAgcHVibGljIHN0YXRpYyBnZXRTdHJpbmdWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSkgfHxcbiAgICAgIENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKSB8fFxuICAgICAgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5kZWZhdWx0U3RyaW5nVmFsdWVbbmFtZV07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldEJvb2xlYW5WYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUZyb21VcmkgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCk7XG5cbiAgICBpZiAodmFsdWVGcm9tVXJpKSB7XG4gICAgICByZXR1cm4gdmFsdWVGcm9tVXJpID09PSAndHJ1ZScgfHwgdmFsdWVGcm9tVXJpID09PSAnMScgfHwgdmFsdWVGcm9tVXJpID09PSAnT24nO1xuICAgIH1cblxuICAgIHJldHVybiBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmRlZmF1bHRCb29sZWFuVmFsdWVbbmFtZV0gPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXQgZGVmYXVsdFN0cmluZ1ZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZ30ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LW1ldHJpY3MtbGV2ZWwnOiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpLFxuICAgICAgJ3BoZW5peC1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jb25zb2xlLWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC10ZWxlbWV0cnktbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY2hhbm5lbC10b2tlbic6ICcnLFxuICAgICAgJ3BoZW5peC11cmknOiAnJyxcbiAgICAgICdwaGVuaXgtYmFzZS11cmknOiAnJ1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXQgZGVmYXVsdEJvb2xlYW5WYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZSc6IHRydWUsXG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbic6IHRydWUsXG4gICAgICAncGhlbml4LWZvcmNlLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1yZXN0YXJ0JzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBtZXRhVmFsdWUgPSBHbG9iYWxTY29wZS5kb2N1bWVudFF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT0nJHtuYW1lfSddYCk7XG5cbiAgICBpZiAoIW1ldGFWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbWV0YVZhbHVlLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdmFsdWVVUklQYXJhbWV0ZXJOYW1lID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKCF2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG5ldyBHbG9iYWxTY29wZS5VUkxTZWFyY2hQYXJhbXMoR2xvYmFsU2NvcGUubG9jYXRpb25TZWFyY2gpLmdldCh2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciB7XG4gIHN0YXRpYyBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc0ZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb25TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQpIHtcbiAgICAgIEdsb2JhbFNjb3BlLnF1ZXVlTWljcm90YXNrKHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uLmJpbmQodGhpcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uLmJpbmQodGhpcyksIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBsZXQgaW1nOiBIVE1MSW1hZ2VFbGVtZW50IHwgbnVsbCA9IEdsb2JhbFNjb3BlLmRvY3VtZW50Q3JlYXRlRWxlbWVudDxIVE1MSW1hZ2VFbGVtZW50PignaW1nJyk7XG5cbiAgICBpbWcuc3JjID0gR2xvYmFsU2NvcGUuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbmV3IEFycmF5QnVmZmVyKDEwZSs3KV0pKTsgLy8gMTAwTWIgb3IgbGVzcyBvciBtb3JlIGRlcGVuZGluZyBvbiBhcyB5b3Ugd2lzaCB0byBmb3JjZS9pbnZva2UgR0MgY3ljbGUgcnVuXG4gICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIEdsb2JhbFNjb3BlLlVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5zcmMpO1xuXG4gICAgICBpbWcgPSBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkOiBib29sZWFuID0gR2xvYmFsU2NvcGUubmF2aWdhdG9yQ29ubmVjdGlvbiAhPT0gdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VmZmVjdGl2ZVR5cGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIEdsb2JhbFNjb3BlLm5hdmlnYXRvckNvbm5lY3Rpb24/LmRvd25saW5rID8/IEdsb2JhbFNjb3BlLm5hdmlnYXRvckNvbm5lY3Rpb24/LmRvd25saW5rTWF4ID8/IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEdsb2JhbFNjb3BlLm5hdmlnYXRvckNvbm5lY3Rpb24/LmVmZmVjdGl2ZVR5cGUgPz8gR2xvYmFsU2NvcGUubmF2aWdhdG9yQ29ubmVjdGlvbj8udHlwZSA/PyAnVW5rbm93bic7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUubmF2aWdhdG9yQ29ubmVjdGlvbj8ucnR0ID8/IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcblxuICAgIEdsb2JhbFNjb3BlLm5hdmlnYXRvckNvbm5lY3Rpb24/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiBHbG9iYWxTY29wZS5uYXZpZ2F0b3JDb25uZWN0aW9uPy5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcikpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGlzdGljcygpOiB2b2lkIHtcbiAgICB0aGlzLl9ydHQudmFsdWUgPSB0aGlzLmdldFJvdW5kVHJpcFRpbWUoKTtcbiAgICB0aGlzLl9lZmZlY3RpdmVUeXBlLnZhbHVlID0gdGhpcy5nZXRFZmZlY3RpdmVUeXBlKCk7XG4gICAgdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkudmFsdWUgPSB0aGlzLmdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVNldHVwTGlzdGVuZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXRyaWNzU2VydmljZSA9IFNESy5tZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIF9tZXRyaWNTdWJtaXR0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3VjY2VzcyhzdHJlYW1JZCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkLCBzdHJlYW1JZCk7XG4gIH1cblxuICBmYWlsKCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkU3RyZWFtTWV0cmljKG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLCBzdHJlYW1JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tZXRyaWNTdWJtaXR0ZWQpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljU3VibWl0dGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0dXBUaW1lID0gbm93IC0gdGhpcy5fc3RhcnRUaW1lO1xuICAgIGNvbnN0IG1ldHJpY05hbWUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWNUeXBlKS5nZXROYW1lKCk7XG5cbiAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBzZXR1cFRpbWV9LFxuICAgICAgc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBTdHJlYW0gbWV0cmljIFslc10gaW4gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5ldyBEdXJhdGlvbnMoc2V0dXBUaW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlVG9rZW4gZnJvbSAnLi9FZGdlVG9rZW4nO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5jb25zdCBlZGdlQXV0aFRva2VuUHJlZml4ID0gJ0RJR0VTVDonO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlQXV0aFBhcnNlciB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRWRnZUF1dGhQYXJzZXInKTtcblxuICBzdGF0aWMgcGFyc2VUb2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IEVkZ2VUb2tlbiB7XG4gICAgaWYgKCF0aGlzLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignVG9rZW4gaXMgbm90IHZhbGlkIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSBhdG9iKHRva2VuLnN1YnN0cihlZGdlQXV0aFRva2VuUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgY29uc3QgZWRnZVRva2VuID0gSlNPTi5wYXJzZShkZWNvZGVkVG9rZW4pO1xuXG4gICAgICBlZGdlVG9rZW4udG9rZW4gPSBKU09OLnBhcnNlKGVkZ2VUb2tlbi50b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKGVkZ2VUb2tlbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignQ2Fubm90IHBhcnNlIHRva2VuIHZhbHVlJywgZSk7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRva2VuICYmIHRva2VuLnN0YXJ0c1dpdGgoZWRnZUF1dGhUb2tlblByZWZpeCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5cbmludGVyZmFjZSBJVG9rZW4ge1xuICB1cmk6IFVSTCB8IG51bGw7XG4gIGNhcGFiaWxpdGllczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJRWRnZVRva2VuIHtcbiAgYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICB0b2tlbjogSVRva2VuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlVG9rZW4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuOiBJVG9rZW47XG5cbiAgY29uc3RydWN0b3IoZWRnZVRva2VuOiBJRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fYXBwbGljYXRpb25JZCA9IGVkZ2VUb2tlbj8uYXBwbGljYXRpb25JZCB8fCAnJztcbiAgICB0aGlzLl90b2tlbiA9IHtcbiAgICAgIHVyaTogZWRnZVRva2VuPy50b2tlbj8udXJpID8gbmV3IEdsb2JhbFNjb3BlLlVSTChlZGdlVG9rZW4udG9rZW4udXJpKSA6IG51bGwsXG4gICAgICBjYXBhYmlsaXRpZXM6IGVkZ2VUb2tlbj8udG9rZW4/LmNhcGFiaWxpdGllcyB8fCBbXVxuICAgIH07XG4gIH1cblxuICBnZXQgdXJpKCk6IFVSTCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi51cmk7XG4gIH1cblxuICBnZXQgY2FwYWJpbGl0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4uY2FwYWJpbGl0aWVzO1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25JZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZGVjbGFyZSBjb25zdCBfX0ZFQVRVUkVTX186IHtcbiAgc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHNlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkRmVhdHVyZXMge1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2dzKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9ncztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZE1ldHJpY3MoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZE1ldHJpY3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ1RvQ29uc29sZSgpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nVG9Db25zb2xlO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RmVhdHVyZXMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gX19GRUFUVVJFU19fO1xuXG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gJ3NlbmRMb2NhbENhbmRpZGF0ZXMnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyA6IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdzZW5kTG9ncycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9ncyA6ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnc2VuZE1ldHJpY3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZE1ldHJpY3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdsb2dUb0NvbnNvbGUnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMubG9nVG9Db25zb2xlIDogJ0FsbCc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdBbGwnO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZEZlYXR1cmVzLmFwcGx5RmVhdHVyZXMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0VHJhbnNjZWl2ZXJzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiB0eXBlb2YgR2xvYmFsU2NvcGUuZG9jdW1lbnRDcmVhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uID49IDcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc01vYmlsZSgpO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgdHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IgPT09ICd1bmRlZmluZWQnKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBSVENSdHBSZWNlaXZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFJUQ1J0cFJlY2VpdmVyLnByb3RvdHlwZS5jcmVhdGVFbmNvZGVkU3RyZWFtcyAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgUlRDUnRwU2NyaXB0VHJhbnNmb3JtICE9PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNSZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hhbm5lbEZyYW1lVGltaW5nSW5mb3JtYXRpb25TdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEZlYXR1cmVFbmFibGVtZW50LmlzUmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFja1N1cHBvcnRlZFxuICAgICAgJiYgKEZlYXR1cmVFbmFibGVtZW50LmlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkIHx8IEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZXJyb3JTdGFja0Fsc29IYXNFcnJvck1lc3NhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ1NhZmFyaSc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19QQVJBTUVURVJTX186IHtcbiAgZGlzY292ZXJ5OiBJRGlzY292ZXJ5UGFyYW1ldGVyO1xufTtcblxuaW50ZXJmYWNlIElEaXNjb3ZlcnlQYXJhbWV0ZXJ7XG4gIGludGVudGlvbnM6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIHByaXZhdGUgc3RhdGljIF9kaXNjb3ZlcnlQYXJhbWV0ZXJzOiBJRGlzY292ZXJ5UGFyYW1ldGVyIDtcblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVBhcmFtZXRlcnMoKTogSURpc2NvdmVyeVBhcmFtZXRlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnM7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlQYXJhbWV0ZXJzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gX19QQVJBTUVURVJTX187XG5cbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSAnZGlzY292ZXJ5JyBpbiBwYXJhbWV0ZXJzID8gcGFyYW1ldGVycy5kaXNjb3ZlcnkgOiB7aW50ZW50aW9uczogJyd9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSB7aW50ZW50aW9uczogJyd9O1xuICAgIH1cbiAgfVxufVxuXG5QYXJhbWV0ZXJzLmFwcGx5UGFyYW1ldGVycygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElHbG9iYWxTY29wZSBmcm9tICcuL0lHbG9iYWxTY29wZSc7XG5pbXBvcnQgSURvY3VtZW50IGZyb20gJy4vSURvY3VtZW50JztcbmltcG9ydCBJTG9jYXRpb24gZnJvbSAnLi9JTG9jYXRpb24nO1xuaW1wb3J0IElOZXR3b3JrSW5mb3JtYXRpb24gZnJvbSAnLi9JTmV0d29ya0luZm9ybWF0aW9uJztcbmltcG9ydCBJTmF2aWdhdG9yIGZyb20gJy4vSU5hdmlnYXRvcic7XG5pbXBvcnQgSVdpbmRvdyBmcm9tICcuL0lXaW5kb3cnO1xuXG5leHBvcnQgY2xhc3MgR2xvYmFsU2NvcGUgaW1wbGVtZW50cyBJR2xvYmFsU2NvcGUge1xuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IElHbG9iYWxTY29wZSA9IG5ldyBHbG9iYWxTY29wZSgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb2N1bWVudDogSURvY3VtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2NhdGlvbjogSUxvY2F0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uYXZpZ2F0b3I6IElOYXZpZ2F0b3I7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpbmRvdzogSVdpbmRvdztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgIHRoaXMuX2xvY2F0aW9uID0gbG9jYXRpb247XG4gICAgdGhpcy5fbmF2aWdhdG9yID0gbmF2aWdhdG9yO1xuICAgIHRoaXMuX3dpbmRvdyA9IHdpbmRvdztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UoKTogSUdsb2JhbFNjb3BlIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUuX2luc3RhbmNlO1xuICB9XG5cbiAgZ2V0IEZvcm1EYXRhKCk6IHR5cGVvZiBGb3JtRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5Gb3JtRGF0YTtcbiAgfVxuXG4gIGdldCBVUkwoKTogdHlwZW9mIFVSTCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5VUkw7XG4gIH1cblxuICBnZXQgVVJMU2VhcmNoUGFyYW1zKCk6IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuVVJMU2VhcmNoUGFyYW1zO1xuICB9XG5cbiAgZ2V0IGFkZERvY3VtZW50RXZlbnRMaXN0ZW5lcigpOiAodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucykgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIuYmluZCh0aGlzLl9kb2N1bWVudCk7XG4gIH1cblxuICBnZXQgYWRkV2luZG93RXZlbnRMaXN0ZW5lcigpOiAodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucykgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBjbGVhckludGVydmFsKCk6IChpZD86IG51bWJlciB8IHVuZGVmaW5lZCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5jbGVhckludGVydmFsLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBjbGVhclRpbWVvdXQoKTogKGlkPzogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LmNsZWFyVGltZW91dC5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgZG9jdW1lbnRDcmVhdGVFbGVtZW50KCk6IDxFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQ+KHRhZzogc3RyaW5nKSA9PiBFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudC5iaW5kKHRoaXMuX2RvY3VtZW50KTtcbiAgfVxuXG4gIGdldCBkb2N1bWVudEhhc0ZvY3VzKCk6ICgpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5oYXNGb2N1cy5iaW5kKHRoaXMuX2RvY3VtZW50KTtcbiAgfVxuXG4gIGdldCBkb2N1bWVudElzSGlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuX2RvY3VtZW50LmhpZGRlbjtcbiAgfVxuXG4gIGdldCBkb2N1bWVudFF1ZXJ5U2VsZWN0b3IoKTogPEVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudD4odGFnOiBzdHJpbmcpID0+IEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3Rvci5iaW5kKHRoaXMuX2RvY3VtZW50KTtcbiAgfVxuXG4gIGdldCBmZXRjaCgpOiAoaW5wdXQ6IHN0cmluZyB8IFVSTCB8IFJlcXVlc3QsIGluaXQ/OiBSZXF1ZXN0SW5pdCkgPT4gUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuZmV0Y2guYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IGxvY2F0aW9uSG9zdG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbG9jYXRpb24uaG9zdG5hbWU7XG4gIH1cblxuICBnZXQgbG9jYXRpb25TZWFyY2goKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbG9jYXRpb24uc2VhcmNoO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRvckNvbm5lY3Rpb24oKTogSU5ldHdvcmtJbmZvcm1hdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRvci5jb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRvcklzT25MaW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0b3Iub25MaW5lO1xuICB9XG5cbiAgZ2V0IHF1ZXVlTWljcm90YXNrKCk6IChtaWNyb3Rhc2s6ICgpID0+IHZvaWQpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cucXVldWVNaWNyb3Rhc2suYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IHJlbW92ZURvY3VtZW50RXZlbnRMaXN0ZW5lcigpOiAodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucykgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh0aGlzLl9kb2N1bWVudCk7XG4gIH1cblxuICBnZXQgcmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lcigpOiAodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucykgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBzZXRJbnRlcnZhbCgpOiAoaGFuZGxlcjogc3RyaW5nIHwgRnVuY3Rpb24sIHRpbWVvdXQ/OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5zZXRJbnRlcnZhbC5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgc2V0VGltZW91dCgpOiAoaGFuZGxlcjogc3RyaW5nIHwgRnVuY3Rpb24sIHRpbWVvdXQ/OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5zZXRUaW1lb3V0LmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHbG9iYWxTY29wZS5nZXRJbnN0YW5jZSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIF9kaXNwb3NlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGlzcG9zYWJsZTogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihkaXNwb3NhYmxlOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fZGlzcG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlID0gZGlzcG9zYWJsZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3Bvc2FibGUuY2FsbCh0aGlzKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4vSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNwb3NhYmxlTGlzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3Q6IElEaXNwb3NhYmxlW10gPSBbXTtcblxuICBhZGQoZGlzcG9zYWJsZTogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LnB1c2goZGlzcG9zYWJsZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QuZm9yRWFjaChkaXNwb3NhYmxlID0+IGRpc3Bvc2FibGUuZGlzcG9zZSgpKTtcbiAgICB0aGlzLl9saXN0Lmxlbmd0aCA9IDA7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRGlzcG9zYWJsZUxpc3RbZGlzcG9zYWJsZXM9JHt0aGlzLl9saXN0Lmxlbmd0aH1dYDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLy8gQXMgZmxvYXQgaW4gRUNNQVNjcmlwdCB1c2UgNjQtYml0IGZvcm1hdCBpdCBjYW5ub3QgaGF2ZS9oYW5kbGUgbW9yZSB0aGFuIDE1IHN5bWJvbHMgYWZ0ZXIgZG90LlxuY29uc3QgbWF4RGlnaXRzSW5GbG9hdEFmdGVyRG90ID0gMTU7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE51bWJlcnMge1xuICBzdGF0aWMgY291bnROdW1iZXJMZW5ndGgodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGluY3JlbWVudEZvck5lZ2F0aXZlVmFsdWUgPSAwO1xuICAgIGxldCBudW1iZXIgPSB2YWx1ZTtcblxuICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICBudW1iZXIgKj0gLTE7XG4gICAgICBpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcnMuY291bnREaWdpdHNCZWZvcmVEZWNpbWFsKG51bWJlcikgKyBpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlICsgKG51bWJlciAhPT0gTWF0aC5mbG9vcihudW1iZXIpID8gTnVtYmVycy5jb3VudERpZ2l0c0FmdGVyRGVjaW1hbChudW1iZXIpICsgMSA6IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZml4Um91bmRpbmcodmFsdWU6IG51bWJlciwgcHJlY2lzaW9uOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHBvd2VyID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbik7XG5cbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIHBvd2VyKSAvIHBvd2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY291bnREaWdpdHNCZWZvcmVEZWNpbWFsKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBkaWdpdHNCZWZvcmVEZWNpbWFsID0gMTtcbiAgICBsZXQgbnVtYmVyID0gdmFsdWU7XG5cbiAgICB3aGlsZSAobnVtYmVyID49IDEwKSB7XG4gICAgICBudW1iZXIgPSBudW1iZXIgLyAxMDtcbiAgICAgIGRpZ2l0c0JlZm9yZURlY2ltYWwrKztcbiAgICB9XG5cbiAgICByZXR1cm4gZGlnaXRzQmVmb3JlRGVjaW1hbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvdW50RGlnaXRzQWZ0ZXJEZWNpbWFsKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB2YWx1ZTtcbiAgICBsZXQgbW9kaWZpZWRWYWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpO1xuICAgIGxldCBjb3VudCA9IDA7XG5cbiAgICB3aGlsZSAobW9kaWZpZWRWYWx1ZSAhPT0gb3JpZ2luYWxWYWx1ZSAmJiBjb3VudCA8IG1heERpZ2l0c0luRmxvYXRBZnRlckRvdCkge1xuICAgICAgY291bnQrKztcbiAgICAgIG1vZGlmaWVkVmFsdWUgPSBOdW1iZXJzLmZpeFJvdW5kaW5nKG9yaWdpbmFsVmFsdWUsIGNvdW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTnVtYmVycyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ3Mge1xuICBzdGF0aWMgcmFuZG9tKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5kb20xM0NoYXJhY3RlcnMgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMiwgMTUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29wczogbnVtYmVyID0gTWF0aC5jZWlsKGxlbmd0aCAvIDEzKTtcblxuICAgIHJldHVybiBuZXcgQXJyYXkobG9vcHMpLmZpbGwocmFuZG9tMTNDaGFyYWN0ZXJzKS5yZWR1Y2UoKHN0cmluZywgZnVuYykgPT4ge1xuICAgICAgcmV0dXJuIHN0cmluZyArIGZ1bmMoKTtcbiAgICB9LCAnJykuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5ncyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVpbnQ4QXJyYXlzIHtcbiAgcHVibGljIHN0YXRpYyBpc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZSh0YXJnZXRCeXRlU2VxdWVuY2U6IFVpbnQ4QXJyYXksIGRhdGE6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgdGFyZ2V0Qnl0ZVNlcXVlbmNlLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgIGlmICh0YXJnZXRCeXRlU2VxdWVuY2VbaWR4XSAhPT0gZGF0YVtvZmZzZXQgKyBpZHhdKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZmluZFRhcmdldEJ5dGVTZXF1ZW5jZUluZGV4RnJvbU9mZnNldCh0YXJnZXRCeXRlU2VxdWVuY2U6IFVpbnQ4QXJyYXksIGRhdGE6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyLCByZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZCA9IC0xKTogbnVtYmVyIHtcbiAgICBmb3IgKGxldCBjdXJyZW50SW5kZXggPSBvZmZzZXQ7IGN1cnJlbnRJbmRleCA8PSBkYXRhLmJ5dGVMZW5ndGg7IGN1cnJlbnRJbmRleCsrKSB7XG4gICAgICBpZiAoVWludDhBcnJheXMuaXNEYXRhQXRPZmZzZXRUYXJnZXRCeXRlU2VxdWVuY2UodGFyZ2V0Qnl0ZVNlcXVlbmNlLCBkYXRhLCBjdXJyZW50SW5kZXgpKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlV2hlbk5vdEZvdW5kO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRVdWlkU3RyaW5nRnJvbVVpbnQ4QXJyYXkoZGF0YTogVWludDhBcnJheSwgdXVpZEJ5dGVMZW5ndGggPSAxNik6IHN0cmluZyB7XG4gICAgY29uc3QgdXVpZDogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHV1aWRCeXRlTGVuZ3RoOyBpZHgrKykge1xuICAgICAgY29uc3QgYnl0ZUhleCA9IGRhdGFbaWR4XS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKTtcblxuICAgICAgdXVpZC5wdXNoKGJ5dGVIZXgpO1xuXG4gICAgICBpZiAoaWR4ID09PSAzIHx8IGlkeCA9PT0gNSB8fCBpZHggPT09IDcgfHwgaWR4ID09PSA5KSB7XG4gICAgICAgIHV1aWQucHVzaCgnLScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1dWlkLmpvaW4oJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VpbnQ4QXJyYXlzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFVucmVhY2hhYmxlKHg6IG5ldmVyKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgWyR7eH1dLiBUaGlzIHNob3VsZCBuZXZlciBiZSByZWFjaGVkYCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGFzc2VydFVucmVhY2hhYmxlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBwZW5kZXJzIHtcbiAgcHJpdmF0ZSBfYXBwZW5kZXJzOiBBcnJheTxJQXBwZW5kZXI+ID0gW107XG5cbiAgZ2V0IHZhbHVlKCk6IEFycmF5PElBcHBlbmRlcj4ge1xuICAgIHJldHVybiB0aGlzLl9hcHBlbmRlcnM7XG4gIH1cblxuICBhZGQoYXBwZW5kZXI6IElBcHBlbmRlcik6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5wdXNoKGFwcGVuZGVyKTtcbiAgfVxuXG4gIHJlbW92ZShhcHBlbmRlcik6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IHRoaXMuX2FwcGVuZGVycy5yZWR1Y2UoKGl0ZW1zLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIShpdGVtID09PSBhcHBlbmRlcikpIHtcbiAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH0sIFtdIGFzIEFycmF5PElBcHBlbmRlcj4pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uc29sZUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gYCR7ZGF0ZS50b0lTT1N0cmluZygpfSBbJHtjYXRlZ29yeX1dIFske0xvZ2dpbmdMZXZlbFtsb2dMZXZlbF19XSAke21lc3NhZ2V9YDtcblxuICAgIGlmIChsb2dMZXZlbCA8IExvZ2dpbmdMZXZlbC5XYXJuKSB7XG4gICAgICBjb25zb2xlLmxvZyhmdWxsTWVzc2FnZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGZ1bGxNZXNzYWdlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuZXhwb3J0IGVudW0gTG9nZ2luZ0xldmVsIHtcbiAgQWxsID0gLTEsXG4gIFRyYWNlID0gMTAsXG4gIERlYnVnID0gMjAsXG4gIEluZm8gPSAzMCxcbiAgV2FybiA9IDQwLFxuICBFcnJvciA9IDUwLFxuICBGYXRhbCA9IDYwLFxuICBPZmYgPSAxMDAsXG59XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdMZXZlbFR5cGUgPSAnT2ZmJyB8ICdUcmFjZScgfCAnRGVidWcnIHwgJ0luZm8nIHwgJ1dhcm4nIHwgJ0Vycm9yJyB8ICdGYXRhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2F0ZWdvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwZW5kZXJzOiBBcHBlbmRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZDtcblxuICBnZXQgY2F0ZWdvcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcnk7XG4gIH1cblxuICBnZXQgYXBwZW5kZXJzKCk6IEFwcGVuZGVycyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ1RocmVzaG9sZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHRyYWNlKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5UcmFjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5UcmFjZSwgYXJncyk7XG4gIH1cblxuICBkZWJ1ZyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRGVidWcsIGFyZ3MpO1xuICB9XG5cbiAgaW5mbyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5JbmZvLCBhcmdzKTtcbiAgfVxuXG4gIHdhcm4oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuV2FybiwgYXJncyk7XG4gIH1cblxuICBlcnJvciguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRXJyb3IsIGFyZ3MpO1xuICB9XG5cbiAgZmF0YWwoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkZhdGFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkZhdGFsLCBhcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nKGxldmVsOiBudW1iZXIsIGFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcnMoYXJncyk7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMudmFsdWUuZm9yRWFjaCgoYXBwZW5kZXI6IElBcHBlbmRlcikgPT4ge1xuICAgICAgYXBwZW5kZXIubG9nKGxldmVsLCBtZXNzYWdlLCB0aGlzLmNhdGVnb3J5LCBkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gYXJnc1swXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZiAmJiBhcmdzLmxlbmd0aCA+IDEgJiYgaW5kZXggPj0gMCkge1xuICAgICAgaW5kZXggPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YoJyUnLCBpbmRleCk7XG5cbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSwgaW5kZXggKyAyKTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIC8vIEVzY2FwZWQgJyUlJyB0dXJucyBpbnRvICclJ1xuICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJyVkJyBvciAnJXMnIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nKGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJWonIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnN0cmluZ2lmeShhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MgPSBhcmdzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPT09IGFycmF5Lmxlbmd0aCAmJiBjdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5lcnJvclN0YWNrQWxzb0hhc0Vycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgJ1xcbicgKyB0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZS5zdGFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgJ1xcbicgKyB0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZS5tZXNzYWdlKSArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgYFske3RoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlKX1dYDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShhcmc6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FjaGUgPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGFyZyBpbnN0YW5jZW9mIEVycm9yID8gdGhpcy50b1N0cmluZyhhcmcpIDogYXJnLFxuICAgICAgICAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPHJlY3Vyc2l2ZT4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICdbb2JqZWN0IGludmFsaWQgSlNPTi5zdHJpbmdpZnldJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBcmd1bWVudChhcmd1bWVudDogYW55LCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyB0aGlzLnRvU3RyaW5nKGFyZ3VtZW50KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMik7XG4gIH1cblxuICBwcml2YXRlIHRvU3RyaW5nKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkYXRhID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCB0b1N0cmluZ1N0ciA9ICcnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSAnW29iamVjdCBpbnZhbGlkIHRvU3RyaW5nKCldJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1N0cmluZ1N0cjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIGFwcGVuZGVyczogQXBwZW5kZXJzLCB0aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQpIHtcbiAgICB0aGlzLl9jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IGFwcGVuZGVycztcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJEZWZhdWx0cyB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTG9nc107XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLmxvZ1RvQ29uc29sZV07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlciwge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcnM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IElMb2dnZXJ9ID0ge307XG4gIHByaXZhdGUgc3RhdGljIF9hcHBlbmRlcnM6IEFwcGVuZGVycyA9IG5ldyBBcHBlbmRlcnMoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCA9IG5ldyBMb2dnaW5nVGhyZXNob2xkKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uID0gbmV3IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0TG9nZ2VyKGNhdGVnb3J5OiBzdHJpbmcpOiBJTG9nZ2VyIHtcbiAgICBpZiAodHlwZW9mIGNhdGVnb3J5ICE9PSAnc3RyaW5nJykge1xuICAgICAgY2F0ZWdvcnkgPSAnU0RLJztcbiAgICB9XG5cbiAgICBjb25zdCBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldID0gbmV3IExvZ2dlcihjYXRlZ29yeSwgdGhpcy5fYXBwZW5kZXJzLCB0aGlzLl90aHJlc2hvbGQpO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dpbmdMZXZlbCgpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgnY29uc29sZScsIExvZ2dlckZhY3RvcnkuYXBwbHlDb25zb2xlTG9nZ2VyLmJpbmQodGhpcykpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgndGVsZW1ldHJ5JywgTG9nZ2VyRmFjdG9yeS5hcHBseVRlbGVtZXRyeUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5TG9nZ2luZ0xldmVsKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWxvZ2dpbmctbGV2ZWwnKTtcblxuICAgIGlmIChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKSB7XG4gICAgICB0aGlzLl90aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwobmFtZTogc3RyaW5nLCBhcHBseUFwcGVuZGVyOiAobGV2ZWw6IExvZ2dpbmdMZXZlbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZShgcGhlbml4LSR7bmFtZX0tbG9nZ2luZy1sZXZlbGApO1xuXG4gICAgaWYgKHBhcmFtZXRlclZhbHVlID09PSAnT2ZmJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFwcGx5QXBwZW5kZXIoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUNvbnNvbGVMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlUZWxlbWV0cnlMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gbGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5Mb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShsb2dnaW5nTGV2ZWw6IExvZ2dpbmdMZXZlbCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsKSB7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLlRyYWNlOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkRlYnVnOlxuICAgICAgICByZXR1cm4gJ0RlYnVnJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkluZm86XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuV2FybjpcbiAgICAgICAgcmV0dXJuICdXYXJuJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkVycm9yOlxuICAgICAgICByZXR1cm4gJ0Vycm9yJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkZhdGFsOlxuICAgICAgICByZXR1cm4gJ0ZhdGFsJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChsb2dnaW5nTGV2ZWxUeXBlOiBMb2dnaW5nTGV2ZWxUeXBlKTogTG9nZ2luZ0xldmVsIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnVHJhY2UnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLlRyYWNlO1xuICAgICAgY2FzZSAnRGVidWcnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkRlYnVnO1xuICAgICAgY2FzZSAnSW5mbyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgICAgIGNhc2UgJ1dhcm4nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLldhcm47XG4gICAgICBjYXNlICdFcnJvcic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRXJyb3I7XG4gICAgICBjYXNlICdGYXRhbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRmF0YWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ1RocmVzaG9sZCB7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbDtcblxuICBnZXQgdmFsdWUoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0VGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljVHlwZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3M6IE1ldHJpY3NUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3M6IE1ldHJpY3NUeXBlKSB7XG4gICAgdGhpcy5fbWV0cmljcyA9IG1ldHJpY3M7XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1ldHJpY3NUeXBlW3RoaXMuX21ldHJpY3NdO1xuICB9XG5cbiAgZ2V0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGhpcy5fbWV0cmljcykge1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TdGFsbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5CdWZmZXJpbmc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9tZXRyaWNzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUZWxlbWV0cnlMZXZlbCB7XG4gIE9mZiA9IDEwMCxcbiAgRXNzZW50aWFsID0gMTAsXG4gIEFsbCA9IC0xXG59XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUxldmVsVHlwZSA9ICdPZmYnIHwgJ0Vzc2VudGlhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbWV0cmljcyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwgPSBUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRyaWNzVXJsID0gbmV3IEdsb2JhbFNjb3BlLlVSTCh1cmwpO1xuXG4gICAgbWV0cmljc1VybC5wYXRobmFtZSA9IG1ldHJpY3NVcmwucGF0aG5hbWUgKyAnL21ldHJpY3MnO1xuXG4gICAgdGhpcy5fdXJsID0gbWV0cmljc1VybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuLi9zZGsvVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi9zZGsvRW52aXJvbm1lbnQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZXM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IE1ldHJpY3NTZXJ2aWNlfSA9IHt9O1xuXG4gIHN0YXRpYyBnZXRNZXRyaWNzU2VydmljZSh1cmw6IHN0cmluZyk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXJsIG11c3QgYmUgYSBzdHJpbmcgaW5zdGVhZCByZWNlaXZlZCBbJHt0eXBlb2YgdXJsfV1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF07XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4gbWV0cmljc1NlcnZpY2VzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbmV3IE1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodXJsKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChTREsudGVsZW1ldHJ5TGV2ZWwpO1xuXG4gICAgcmV0dXJuIE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXSA9IG5ldyBNZXRyaWNzU2VydmljZShtZXRyaWNzQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogdm9pZCB7XG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gT2JqZWN0LnZhbHVlcyhNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzKTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMgJiYgbWV0cmljc1NlcnZpY2VzLmxlbmd0aCkge1xuICAgICAgbWV0cmljc1NlcnZpY2VzLmZvckVhY2gobWV0cmljc1NlcnZpY2UgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IHRlbGVtZXRyeUxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldHJpY3NGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgTWV0cmljVHlwZSBmcm9tICcuL01ldHJpY1R5cGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uIGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gMTAyNDtcbmNvbnN0IG1heEJ1ZmZlcmVkUmVjb3JkcyA9IDIwNDg7XG5cbmludGVyZmFjZSBJVmFsdWUge1xuICBzdHJpbmc/OiBzdHJpbmc7XG4gIHVpbnQ2ND86IG51bWJlcjtcbiAgZmxvYXQ/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBJTWV0cmljUmVjb3JkIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIG1ldHJpYzogc3RyaW5nO1xuICB2YWx1ZTogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlOiBJVmFsdWU7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIElNZXRyaWMge1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgbWV0cmljVHlwZTogTWV0cmljc1R5cGU7XG4gIHZhbHVlPzogSVZhbHVlO1xuICBwcmV2aW91c1ZhbHVlPzogSVZhbHVlO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdNZXRyaWNzU2VydmljZScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cG9uZW50aWFsQmFja29mZjogRXhwb25lbnRpYWxCYWNrb2ZmO1xuICBwcml2YXRlIF9tZXRyaWNzOiBBcnJheTxJTWV0cmljUmVjb3JkPiA9IFtdO1xuICBwcml2YXRlIF9pc1NlbmRpbmc6IGJvb2xlYW47XG4gIHByaXZhdGUgX2ZhaWx1cmVDb3VudCA9IDA7XG4gIHByaXZhdGUgX2RvbWFpbiA9IEdsb2JhbFNjb3BlLmxvY2F0aW9uSG9zdG5hbWU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBtZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgICB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYgPSBuZXcgRXhwb25lbnRpYWxCYWNrb2ZmKCk7XG4gIH1cblxuICBnZXQgbWV0cmljc0NvbmZpZ3VyYXRpb24oKTogTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobWV0cmljOiBJTWV0cmljKTogdm9pZCB7XG4gICAgY29uc3Qge3N0cmVhbUlkLCB2YWx1ZSwgcHJldmlvdXNWYWx1ZSwgcnVudGltZSwgcmVzb3VyY2UsIGtpbmR9ID0gbWV0cmljO1xuICAgIGNvbnN0IG1ldHJpY1R5cGUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWMubWV0cmljVHlwZSk7XG5cbiAgICBpZiAodGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID4gbWV0cmljVHlwZS5nZXRUZWxlbWV0cnlMZXZlbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICBzdHJlYW1JZCxcbiAgICAgIG1ldHJpYzogbWV0cmljVHlwZS5nZXROYW1lKCksXG4gICAgICB2YWx1ZSxcbiAgICAgIHByZXZpb3VzVmFsdWUsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIHJ1bnRpbWUsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIGtpbmRcbiAgICB9O1xuXG4gICAgdGhpcy5fbWV0cmljcy5wdXNoKG1ldHJpY1JlY29yZCk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXM6IEFycmF5PElNZXRyaWNSZWNvcmQ+KTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLkZvcm1EYXRhKCk7XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoe3JlY29yZHM6IG1ldHJpY3NNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBHbG9iYWxTY29wZS5mZXRjaCh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZE1ldHJpY3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgbWV0cmljc01lc3NhZ2VzID0gdGhpcy5fbWV0cmljcy5zbGljZSgwLCByZXF1ZXN0U2l6ZUxpbWl0KTtcblxuICAgIHRoaXMuX21ldHJpY3MgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZE1ldHJpY3MobWV0cmljc01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmICh0aGlzLmlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlKHJlc3BvbnNlKSkge1xuICAgICAgICBpZiAodGhpcy5fbWV0cmljcy5sZW5ndGggPD0gbWF4QnVmZmVyZWRSZWNvcmRzKSB7XG4gICAgICAgICAgdGhpcy5fZmFpbHVyZUNvdW50Kys7XG5cbiAgICAgICAgICBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX21ldHJpY3MgPSBbLi4ubWV0cmljc01lc3NhZ2VzLCAuLi50aGlzLl9tZXRyaWNzXTtcblxuICAgICAgICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgICAgICAgfSwgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmLmdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQodGhpcy5fZmFpbHVyZUNvdW50KSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RvbyBtYW55IGNhY2hlZCBtZXRyaWMgcmVjb3JkcyBbJXNdLCBkcm9wcGluZyBbJXNdIHJlY29yZHMnLCB0aGlzLl9tZXRyaWNzLmxlbmd0aCwgbWV0cmljc01lc3NhZ2VzLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fZmFpbHVyZUNvdW50ID0gMDtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Jlc3BvbnNlU3RhdHVzQ29kZVJldHJ5YWJsZSh7c3RhdHVzfTogUmVzcG9uc2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL141XFxkezJ9JC8udGVzdChzdGF0dXMudG9TdHJpbmcoKSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gTWV0cmljc1R5cGUge1xuICBUaW1lVG9GaXJzdEZyYW1lLFxuICBDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICBTdGFsbGVkLFxuICBCdWZmZXJpbmcsXG4gIFNldHVwQ29tcGxldGVkLFxuICBTZXR1cEZhaWxlZCxcbiAgUm91bmRUcmlwVGltZSxcbiAgRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gIE5ldHdvcmtUeXBlLFxuICBSZXNvbHV0aW9uQ2hhbmdlZCxcbiAgQXBwbGljYXRpb25Gb3JlZ3JvdW5kLFxuICBBcHBsaWNhdGlvbkJhY2tncm91bmRcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWV0cmljc1R5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKHRlbGVtZXRyeUxldmVsKSB7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw6XG4gICAgICAgIHJldHVybiAnRXNzZW50aWFsJztcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsVHlwZTogVGVsZW1ldHJ5TGV2ZWxUeXBlKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnRXNzZW50aWFsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0ZWxlbWV0cnlMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5RGVmYXVsdCB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTWV0cmljc107XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8vIE5vdGU6IFRoaXMgUHJvbWlzZSBwb2x5ZmlsbCBpcyBpbmNsdWRlZCBmb3IgYnJvd3NlciBidWlsZHMgb25seSB0byBhZGRyZXNzIGNvbXBhdGliaWxpdHkgaXNzdWVzXG4vLyB3aXRoIG9sZGVyIGJyb3dzZXJzIHdob3NlIG5hdGl2ZSBQcm9taXNlIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgLmZpbmFsbHkuXG5cbmltcG9ydCBQcm9taXNlSGFuZGxlciBmcm9tICcuL1Byb21pc2VIYW5kbGVyJztcblxuY2xhc3MgUHJvbWlzZSB7XG4gIF9zdGF0ZTogbnVtYmVyO1xuICBfaGFuZGxlZDogYm9vbGVhbjtcbiAgX3ZhbHVlOiBQcm9taXNlO1xuICBfZGVmZXJyZWRzOiBBcnJheTxQcm9taXNlSGFuZGxlcj47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICB0aGVuKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZDtcblxuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9IDA7XG4gICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdO1xuXG4gICAgdGhpcy5kb1Jlc29sdmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZG9SZXNvbHZlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soXG4gICAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICByZWFzb24gPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLnByb21pc2VSZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZXNvbHZlKG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRwczovL2dpdGh1Yi5jb20vUHJvbWlzZXMtYXBsdXMvUHJvbWlzZXMtc3BlYyN0aGUtUHJvbWlzZS1yZXNvbHV0aW9uLXByb2NlZHVyZVxuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgUHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdCBzZWxmLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBjb25zdCB0aGVuID0gbmV3VmFsdWUudGhlbjtcblxuICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSAzO1xuICAgICAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgcHJvbWlzZS5maW5hbGUoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHByb21pc2UuZG9SZXNvbHZlKGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgdGhlbi5hcHBseShuZXdWYWx1ZSwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IDE7XG4gICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgcHJvbWlzZS5maW5hbGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlamVjdChuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlID0gMjtcbiAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuZmluYWxlKCk7XG4gIH1cblxuICBmaW5hbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAyICYmIHRoaXMuX2RlZmVycmVkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faGFuZGxlZCkge1xuICAgICAgICAgIFByb21pc2UuX3VuaGFuZGxlZFJlamVjdGlvbih0aGlzLl92YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuaGFuZGxlKHRoaXMuX2RlZmVycmVkc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVmZXJyZWRzID0gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZShkZWZlcnJlZDogUHJvbWlzZUhhbmRsZXIpOiB2b2lkIHtcbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHdoaWxlIChwcm9taXNlLl9zdGF0ZSA9PT0gMykge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMCkge1xuICAgICAgcHJvbWlzZS5fZGVmZXJyZWRzLnB1c2goZGVmZXJyZWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvbWlzZS5faGFuZGxlZCA9IHRydWU7XG4gICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvbWlzZS5fc3RhdGUgPT09IDEgPyBkZWZlcnJlZC5vbkZ1bGZpbGxlZCA6IGRlZmVycmVkLm9uUmVqZWN0ZWQ7XG5cbiAgICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDEpIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhwcm9taXNlLl92YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhbGwoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoW10pO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVtYWluaW5nID0gYXJncy5sZW5ndGg7XG4gICAgICBjb25zdCBtYW5hZ2VSZXNwb25zZSA9IChpLCB2YWx1ZSk6IHZvaWQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCB0aGVuID0gdmFsdWUudGhlbjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiBtYW5hZ2VSZXNwb25zZShpLCB2YWx1ZSksXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFyZ3NbaV0gPSB2YWx1ZTtcblxuICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hbmFnZVJlc3BvbnNlKGksIGFyZ3NbaV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmUodmFsdWUpOiBQcm9taXNlIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJlc29sdmUodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByZWplY3QodmFsdWUpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gcmVqZWN0KHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmFjZShhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5yYWNlIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGFycltpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIF9pbW1lZGlhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgaWdub3JlZCA9IHdpbmRvdy5zZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcbiAgfVxuXG4gIHN0YXRpYyBfdW5oYW5kbGVkUmVqZWN0aW9uKGVycm9yKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1Bvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjonLCBlcnJvcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgIH1cbiAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZVsnY2F0Y2gnXSA9IGZ1bmN0aW9uKG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ3RoZW4nXSA9IGZ1bmN0aW9uKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcigoKSA9PiBudWxsKTtcblxuICB0aGlzLmhhbmRsZShuZXcgUHJvbWlzZUhhbmRsZXIob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpKTtcblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gPSBmdW5jdGlvbihjYWxsYmFjazogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIGNvbnN0IGNvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIHZhbHVlID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiB2YWx1ZSksXG4gICAgcmVhc29uID0+IGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiBjb25zdHJ1Y3Rvci5yZWplY3QocmVhc29uKSlcbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFByb21pc2U7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgUHJvbWlzZSBmcm9tICcuL1Byb21pc2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9taXNlSGFuZGxlciB7XG4gIG9uRnVsZmlsbGVkOiBGdW5jdGlvbjtcbiAgb25SZWplY3RlZDogRnVuY3Rpb247XG4gIHByb21pc2U6IFByb21pc2U7XG5cbiAgY29uc3RydWN0b3Iob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIHByb21pc2UpIHtcbiAgICB0aGlzLm9uRnVsZmlsbGVkID0gdHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiBudWxsO1xuICAgIHRoaXMub25SZWplY3RlZCA9IHR5cGVvZiBvblJlamVjdGVkID09PSAnZnVuY3Rpb24nID8gb25SZWplY3RlZCA6IG51bGw7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHtcbiAgYXVkaW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICB2aWRlb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIGxvY2FsT2ZmZXI6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PihuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSgpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlZDoge1xuICAgIGRpcmVjdGlvbj86IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uO1xuICAgIHBlZXJDb25uZWN0aW9uOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD47XG4gIH07XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fcGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB9XG5cbiAgc3RhdGljIGluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUHJlY2FjaGluZ0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UucHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwcmUtY2FjaGUgcGVlciBjb25uZWN0aW9uIG9mZmVyJywgZSkpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKTogUHJvbWlzZTx7IHBlZXJDb25uZWN0aW9uOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB8IHZvaWQ+OyBkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIH0+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSB7XG4gICAgICBkaXJlY3Rpb246ICdyZWN2b25seScsXG4gICAgICBwZWVyQ29ubmVjdGlvbjogUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiA9ICdyZWN2b25seScsIGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IGZhbHNlKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+IHtcbiAgICBpZiAoUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgJiYgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQuZGlyZWN0aW9uID09PSBkaXJlY3Rpb24gJiYgIWVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcykge1xuICAgICAgY29uc3QgdmFsdWUgPSBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5wZWVyQ29ubmVjdGlvbjtcblxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQgPSBudWxsO1xuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IEZlYXR1cmVFbmFibGVtZW50LmlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkID8ge2VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc30gOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbilcbiAgICAgIC50aGVuKGFzeW5jIHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydHNBZGRUcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLnN1cHBvcnRzQWRkVHJhbnNjZWl2ZXI7XG4gICAgICAgIGxldCB2aWRlb1RyYW5zY2VpdmVyLCBhdWRpb1RyYW5zY2VpdmVyO1xuXG4gICAgICAgIGlmIChzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKSB7XG4gICAgICAgICAgYXVkaW9UcmFuc2NlaXZlciA9IHBlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyKCdhdWRpbycsIHtkaXJlY3Rpb259KTtcbiAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ3ZpZGVvJywge2RpcmVjdGlvbn0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1ZGlvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICB2aWRlb1RyYW5zY2VpdmVyLFxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb246IHBlZXJDb25uZWN0aW9uLFxuICAgICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIodW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25zID0gZGlyZWN0aW9uID09PSAncmVjdm9ubHknID8ge1xuICAgICAgICAgIG9mZmVyVG9SZWNlaXZlQXVkaW86IHRydWUsXG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICB9IDoge307XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgbG9jYWxPZmZlcjogYXdhaXQgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucylcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlZXJDb25uZWN0aW9uU2VydmljZSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmcoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIHtcbiAgc3RhdGljIHRydW5jYXRlSWNlU2VydmVycyhjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB1cmxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMjsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCB1cmwgPSBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF07XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHVybHMucHVzaChjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJsc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgIHVybHM6IHVybHMsXG4gICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuXG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgU2RwUGFyc2VyIGZyb20gJy4vU2RwUGFyc2VyJztcblxuZXhwb3J0IGludGVyZmFjZSBJUnRjTW9uaXRvclN0YXRpc3RpYyB7XG4gIFtraW5kOiBzdHJpbmddOiBJUnRjU3RhdGlzdGljO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydCB7XG4gIHJlc3VsdDogKCkgPT4gSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW0gZXh0ZW5kcyBSVENTdGF0c1JlcG9ydCB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZXM6ICgpID0+IHN0cmluZ1tdO1xuICBzdGF0OiAobmFtZSkgPT4gbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNTdGF0aXN0aWMge1xuICBzc3JjPzogc3RyaW5nO1xuICBtZWRpYVR5cGU/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBiaXRyYXRlPzogbnVtYmVyO1xuICBieXRlc1JlY2VpdmVkPzogbnVtYmVyO1xuICBmcmFtZXNEZWNvZGVkPzogbnVtYmVyO1xuICBwYWNrZXRzTG9zdD86IG51bWJlcjtcbiAgcGFja2V0c1JlY2VpdmVkPzogbnVtYmVyO1xuICBjb2RlYz86IHN0cmluZztcbiAgZnBzPzogbnVtYmVyO1xuICByb3VuZFRyaXBUaW1lPzogbnVtYmVyO1xuICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmNvbnN0IHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQgPSAxMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdGNDb25uZWN0aW9uTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRWaWRlb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZEF1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRjU3RhdGlzdGljOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih7fSk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb247XG4gIHByaXZhdGUgX2lzTW9uaXRvclJ1bm5pbmcgPSB0cnVlO1xuICBwcml2YXRlIF91cGRhdGVUaW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3RyYWNrc1RvTW9uaXRvcjogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtLCBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IHBlZXJDb25uZWN0aW9uO1xuICAgIHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUgPSBlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgIHRoaXMuX3RyYWNrc1RvTW9uaXRvciA9IG1lZGlhU3RyZWFtLmdldFRyYWNrcygpLm1hcCh0cmFjayA9PiB0cmFjay5raW5kKSB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbikge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5nZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCkge1xuICAgICAgICBjb25zdCBwYXJzZWRTRFAgPSBuZXcgU2RwUGFyc2VyKHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWMgPSBwYXJzZWRTRFAuYXVkaW9Db2RlYztcbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYyA9IHBhcnNlZFNEUC52aWRlb0NvZGVjO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWMoKTogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9ydGNTdGF0aXN0aWM7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fdXBkYXRlVGltZW91dCkge1xuICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZVRpbWVvdXQpO1xuICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTdGF0aXN0aWMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLnVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2FmYXJpIDExIGRvZXNudCBoYXZlIGtpbmQgb3IgbWVkaWFUeXBlIHNvIHdlIG5lZWQgdG8gdGFrZSBpdCBmcm9tIHRoZSBpbmJvdW5kLXJ0cCBvYmplY3QgaWRcbiAgICBjb25zdCBnZXRLaW5kRm9yU2FmYXJpMTEgPSAoaXRlbSk6IHN0cmluZyA9PiBpdGVtLmlkLmluY2x1ZGVzKCdBdWRpbycpID8gJ2F1ZGlvJyA6IGl0ZW0uaWQuaW5jbHVkZXMoJ1ZpZGVvJykgPyAndmlkZW8nIDogJyc7XG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKG51bGwpXG4gICAgICAudGhlbihzdGF0cyA9PiB7XG4gICAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG5cbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgbGV0IHJvdW5kVHJpcFRpbWUgPSB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lO1xuICAgICAgICAgIGxldCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICBzdGF0cy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lKSB7XG4gICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUgKiAxMDAwO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5yb3VuZFRyaXBUaW1lID0gcm91bmRUcmlwVGltZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjYW5kaWRhdGUtcGFpcicgJiYgcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWydhdWRpbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1snYXVkaW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2luYm91bmQtcnRwJykge1xuICAgICAgICAgICAgICBjb25zdCBraW5kID0gcmVwb3J0LmtpbmQgfHwgcmVwb3J0Lm1lZGlhVHlwZSB8fCBnZXRLaW5kRm9yU2FmYXJpMTEocmVwb3J0KTtcbiAgICAgICAgICAgICAgbGV0IGNvZGVjID0gJyc7XG5cbiAgICAgICAgICAgICAgc3RhdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gcmVwb3J0LmNvZGVjSWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvZGVjID0gaXRlbS5taW1lVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmIChraW5kICYmIHRoaXMuX3RyYWNrc1RvTW9uaXRvci5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVwb3J0LmJ5dGVzUmVjZWl2ZWQgfHwgMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0J5dGVzUmVjZWl2ZWQgPSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8uYnl0ZXNSZWNlaXZlZCA/PyAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzRGVsdGEgPSBieXRlcyAtIHByZXZpb3VzQnl0ZXNSZWNlaXZlZDtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lRGVsdGEgPSByZXBvcnQudGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LnRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICBjb25zdCBiaXRyYXRlID0gYnl0ZXNEZWx0YSAmJiB0aW1lRGVsdGEgPyBNYXRoLmZsb29yKDggKiBieXRlc0RlbHRhIC9cbiAgICAgICAgICAgICAgICAgIHRpbWVEZWx0YSAqIDEwMDApIDogMDtcblxuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0gPSB7XG4gICAgICAgICAgICAgICAgICBzc3JjOiByZXBvcnQuc3NyYyxcbiAgICAgICAgICAgICAgICAgIG1lZGlhVHlwZToga2luZCxcbiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVwb3J0LnRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgIGJpdHJhdGUsXG4gICAgICAgICAgICAgICAgICBieXRlc1JlY2VpdmVkOiByZXBvcnQuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNMb3N0OiByZXBvcnQucGFja2V0c0xvc3QsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzUmVjZWl2ZWQ6IHJlcG9ydC5wYWNrZXRzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBjb2RlYzogY29kZWMgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShraW5kKSxcbiAgICAgICAgICAgICAgICAgIHJvdW5kVHJpcFRpbWVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgfHwgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChraW5kID09PSAndmlkZW8nICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5mcmFtZXNEZWNvZGVkO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBmcHMgPSAocmVwb3J0LmZyYW1lc0RlY29kZWQgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8uZnJhbWVzRGVjb2RlZCkgL1xuICAgICAgICAgICAgICAgICAgICAocnRjU3RhdGlzdGljc1traW5kXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAgICAgICAgIDEwMDA7XG5cbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF1bJ2ZwcyddID0gZnBzID8gTWF0aC5yb3VuZChmcHMgKiAxMDApIC8gMTAwIDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHNMZWdhY3koKS50aGVuKHN0YXRzID0+IHtcbiAgICAgIGNvbnN0IHJ0Y1N0YXRpc3RpY3M6IElSdGNNb25pdG9yU3RhdGlzdGljID0ge307XG4gICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG5cbiAgICAgIHN0YXRzLnJlc3VsdCgpLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgcmVwb3J0Lm5hbWVzKCkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2dvb2dSVFQnKSB7XG4gICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LnN0YXQobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdzc3JjJykge1xuICAgICAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IHJlcG9ydC5zdGF0KCdtZWRpYVR5cGUnKS50b1N0cmluZygpO1xuXG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdID0ge3RpbWVzdGFtcDogRGF0ZS5ub3coKX07XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydzc3JjJ10gPSByZXBvcnQuc3RhdCgnc3NyYycpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydtZWRpYVR5cGUnXSA9IG1lZGlhVHlwZTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2J5dGVzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdieXRlc1JlY2VpdmVkJyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzTG9zdCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNMb3N0Jyk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydwYWNrZXRzUmVjZWl2ZWQnXSA9IHJlcG9ydC5zdGF0KCdwYWNrZXRzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2NvZGVjJ10gPSByZXBvcnQuc3RhdCgnZ29vZ0NvZGVjTmFtZScpLnRvU3RyaW5nKCkgfHwgdGhpcy5nZXRDb2RlY0J5VHlwZShtZWRpYVR5cGUpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsncm91bmRUcmlwVGltZSddID0gcm91bmRUcmlwVGltZTtcblxuICAgICAgICAgIGlmIChtZWRpYVR5cGUgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuc3RhdCgnZnJhbWVzRGVjb2RlZCcpO1xuICAgICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydmcHMnXSA9IChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0uZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgMTAwMCB8fCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzTW9uaXRvclJ1bm5pbmcpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNkcFBhcnNlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NkcDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNBdWRpb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNWaWRlb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzZHA6IHN0cmluZykge1xuICAgIHRoaXMuX3NkcCA9IHNkcDtcblxuICAgIGNvbnN0IHNkcFNwbGl0QnlMaW5lcyA9IHRoaXMuX3NkcC5zcGxpdCgvKFxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGNvbnN0IHNkcFNwbGl0QnlUcmFja3MgPSB0aGlzLl9zZHAuc3BsaXQoLyg/Ol58W1xcclxcbl0pbT0vKTtcblxuICAgIHRoaXMuX2F1ZGlvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ2F1ZGlvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl92aWRlb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCd2aWRlbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ2F1ZGlvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gICAgdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZCA9IHRoaXMuaXNUcmFja0J5VHlwZUVuYWJsZWQoJ3ZpZGVvJywgc2RwU3BsaXRCeVRyYWNrcyk7XG4gIH1cblxuICBnZXQgYXVkaW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hdWRpb0NvZGVjO1xuICB9XG5cbiAgZ2V0IHZpZGVvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmlkZW9Db2RlYztcbiAgfVxuXG4gIGdldCBpc0F1ZGlvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgZ2V0IGlzVmlkZW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzVHJhY2tCeVR5cGVFbmFibGVkKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeVRyYWNrczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBzZHBTZWN0aW9uRm9yVHlwZSA9IHNkcFNwbGl0QnlUcmFja3MuZmluZChzZHBUcmFjayA9PiBzZHBUcmFjay5zdGFydHNXaXRoKHR5cGUpKTtcblxuICAgIGlmICghc2RwU2VjdGlvbkZvclR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXNkcFNlY3Rpb25Gb3JUeXBlLmluY2x1ZGVzKGBhPWluYWN0aXZlYCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q29kZWModHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5TGluZXM6IHN0cmluZyBbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdXNlZENvZGVjTGluZSA9IHNkcFNwbGl0QnlMaW5lcy5maW5kKHNkcExpbmUgPT4gc2RwTGluZS5pbmNsdWRlcyhgYT1ydHBtYXA6JHtzZHBTcGxpdEJ5TGluZXMuZmluZChpID0+IGkuaW5jbHVkZXMoYG09JHt0eXBlfWApKS5zcGxpdCgnICcpWzNdfWApKTtcbiAgICBjb25zdCB1c2VkQ29kZWMgPSB1c2VkQ29kZWNMaW5lLnNwbGl0KCcgJylbMV07XG4gICAgY29uc3QgY29kZWNOYW1lID0gdXNlZENvZGVjLnNwbGl0KCcvJylbMF07XG5cbiAgICByZXR1cm4gY29kZWNOYW1lO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uLCB7UGVlckNvbm5lY3Rpb25FdmVudHN9IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IHtJTGVnYWN5UlRDU3RhdHNSZXBvcnR9IGZyb20gJy4vUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb24gaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb24ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignVmFuaWxsYVBlZXJDb25uZWN0aW9uJyk7XG4gIHByaXZhdGUgX3BlZXJDb25uZWN0aW9uOiBSVENQZWVyQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbikge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC53ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIGNsYXNzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGdldCBuYXRpdmUoKTogUlRDUGVlckNvbm5lY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgY3VycmVudExvY2FsRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uO1xuICB9XG5cbiAgZ2V0IGNvbm5lY3Rpb25TdGF0ZSgpOiBSVENQZWVyQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IGljZUNvbm5lY3Rpb25TdGF0ZSgpOiBSVENJY2VDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0VHJhbnNjZWl2ZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuZ2V0VHJhbnNjZWl2ZXJzRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycyA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuYWRkVHJhbmNlaXZlckRpc2FibGVkICYmIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlciA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmVyKG9wdGlvbnM/OiBSVENPZmZlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZU9mZmVyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFuc3dlcihvcHRpb25zPzogUlRDQW5zd2VyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlQW5zd2VyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgc2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoYXNDcnlwdG8gPSBkZXNjcmlwdGlvbi5zZHA/Lm1hdGNoKC9hPWNyeXB0bzovaSk7XG5cbiAgICBpZiAoaGFzQ3J5cHRvKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RQIGE9Y3J5cHRvIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBnZXRTZW5kZXJzKCk6IFJUQ1J0cFNlbmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U2VuZGVycygpO1xuICB9XG5cbiAgZ2V0UmVjZWl2ZXJzKCk6IFJUQ1J0cFJlY2VpdmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRSZWNlaXZlcnMoKTtcbiAgfVxuXG4gIGdldFN0YXRzKHNlbGVjdG9yPzogTWVkaWFTdHJlYW1UcmFjayB8IG51bGwpOiBQcm9taXNlPFJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHNlbGVjdG9yKTtcbiAgfVxuXG4gIGdldFN0YXRzTGVnYWN5KCk6IFByb21pc2U8SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgLy8gSWdub3JlZCBkdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGxlZ2FjeSAnZ2V0U3RhdHMnIG1ldGhvZCB0eXBlIGRlZmluaXRpb25cbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnZ2V0U3RhdHMnIG1ldGhvZCBmb3JcbiAgICAgIC8vIENocm9tZUA8PSA2NiBkZXRhaWxlZCBoZXJlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02Mjc4MTZcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldFRyYW5zY2VpdmVycygpOiBSVENSdHBUcmFuc2NlaXZlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCk7XG4gIH1cblxuICBhZGRUcmFuc2NlaXZlcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCk6IFJUQ1J0cFRyYW5zY2VpdmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIobmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRTdHJlYW0obWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogdm9pZCB7XG4gICAgbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFjayh0cmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCk6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBzZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc2V0IG9udHJhY2soaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2sgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9udHJhY2soKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2s7XG4gIH1cblxuICBzZXQgb25pY2VjYW5kaWRhdGUoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNhbmRpZGF0ZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGU7XG4gIH1cblxuICBzZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBzZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seVN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJqZWN0OiBTdWJqZWN0PFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHN1YmplY3Q6IFN1YmplY3Q8VD4pIHtcbiAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBBcnJheTxUPiwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogQXJyYXk8KFQpID0+IHZvaWQ+O1xuICBwcml2YXRlIF92YWx1ZTogVDtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICBsZXQgY2hhbmdlZCA9IHRoaXMuX3ZhbHVlICE9PSB2YWx1ZTtcblxuICAgIGlmIChjaGFuZ2VkICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBjb21wYXJhYmxlID0gdmFsdWUgYXMgdW5rbm93biBhcyBJQ29tcGFyYWJsZTxUPjtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wYXJhYmxlLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGFuZ2VkID0gIWNvbXBhcmFibGUuZXF1YWxzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgbGlzdGVuZXIodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHN0YXRpYyBnZXRFbnZpcm9ubWVudEZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IEdsb2JhbFNjb3BlLlVSTCh1cmwpO1xuXG4gICAgICByZXR1cm4gYmFzZVVSTC5vcmlnaW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuLi9sb2dnZXIvQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcbmltcG9ydCBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciBmcm9tICcuLi9kb20vQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3InO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi4vcnRjL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlVcmwgZnJvbSAnLi9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4vRW52aXJvbm1lbnQnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBTaGFrYVR5cGUsIFdlYlBsYXllclR5cGV9IGZyb20gJy4vc3RyZWFtaW5nL1N0cmVhbVR5cGVzJztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmNvbnN0IHBhZ2VMb2FkVGltZSA9IHdpbmRvd1snX19waGVuaXhQYWdlTG9hZFRpbWUnXSB8fCB3aW5kb3dbJ19fcGFnZUxvYWRUaW1lJ10gfHwgRGF0ZS5ub3coKTtcblxuaW50ZXJmYWNlIElJbml0T3B0aW9ucyB7XG4gIGRpc2NvdmVyeVVyaT86IHN0cmluZztcbiAgcGVlckNvbm5lY3Rpb25GYWN0b3J5PzogSVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgdGVsZW1ldHJ5TGV2ZWw/OiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGNvbnNvbGVMb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtPzogYm9vbGVhbjtcbiAgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU/OiBib29sZWFuO1xuICB3ZWJQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkO1xuICBzaGFrYVBsYXllckxvYWRlcj86IChwbGF5ZXI6IFNoYWthVHlwZSkgPT4gdm9pZDtcbiAgaGxzSnNMb2FkZXI/OiAocGxheWVyOiBIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTREsge1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJyk7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWZvcmNlLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1yZXN0YXJ0Jyk7XG4gIHByaXZhdGUgc3RhdGljIF9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJyk7XG4gIHByaXZhdGUgc3RhdGljIF93ZWJQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHN0YXRpYyBfZW52aXJvbm1lbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5VXJsOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeScpO1xuICBwcml2YXRlIHN0YXRpYyBfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDg7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlMZXZlbDogU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4gPSBuZXcgU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4oVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KEJ1aWxkRmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90ZW5hbmN5OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2NsaWVudFNlc3Npb25JZDogc3RyaW5nID0gU3RyaW5ncy5yYW5kb20oMzIpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9hZGVkVGltZXN0YW1wOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTREsnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2luaXRpYWxpemVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbml0aWFsaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPihTREsuX2luaXRpYWxpemVkKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5RGlzY292ZXJ5VXJpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPihEaXNjb3ZlcnlVcmkudXJpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5OiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpO1xuXG4gIHN0YXRpYyBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVuYW5jeSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc3RhdGljIGdldCBjbGllbnRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU0RLLl9jbGllbnRTZXNzaW9uSWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvYWRlZFRpbWVzdGFtcCgpOiBEYXRlIHtcbiAgICByZXR1cm4gU0RLLl9sb2FkZWRUaW1lc3RhbXA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGluaXRpYWxpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlJbml0aWFsaXplZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5VXJpKCk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seURpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnBhZ2VMb2FkVGltZSA9IFNESy5wYWdlTG9hZFRpbWU7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgVVJMIHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyICYmIHRlbmFuY3kpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgdGVuYW5jeSB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKERpc2NvdmVyeVVyaS51cmkudmFsdWUpO1xuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBTREsuX21ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbWV0cmljcy1sZXZlbCcpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbChUZWxlbWV0cnlMZXZlbFt2YWx1ZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWRUZWxlbWV0cnlMZXZlbCA9IFNESy5fdGVsZW1ldHJ5TGV2ZWwuc3Vic2NyaWJlKHRlbGVtZXRyeUxldmVsID0+IHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1NraXAgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG1vYmlsZSBkZXZpY2VzIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5O1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBjb25zdCB1cmkgPSBuZXcgR2xvYmFsU2NvcGUuVVJMKGJhc2VVUklWYWx1ZSk7XG5cbiAgICAgIHVyaS5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmkudG9TdHJpbmcoKTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LWJhc2UtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpbml0KG9wdGlvbnM/OiBJSW5pdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCk7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnU2tpcCBnYXJiYWdlIGNvbGxlY3Rpb24gb24gbW9iaWxlIGRldmljZXMgb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpO1xuXG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG5ldyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXNjb3ZlcnlVcmkpIHtcbiAgICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IG9wdGlvbnMuZGlzY292ZXJ5VXJpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpIHtcbiAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZSA9IG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCAmJiBUZWxlbWV0cnlMZXZlbFtvcHRpb25zLnRlbGVtZXRyeUxldmVsXSkge1xuICAgICAgICBTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5sb2dnaW5nTGV2ZWwgJiYgTG9nZ2luZ0xldmVsW29wdGlvbnMubG9nZ2luZ0xldmVsXSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIudGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5sb2dnaW5nTGV2ZWwpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsXSkge1xuICAgICAgICBjb25zdCBjb25zb2xlQXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBDb25zb2xlQXBwZW5kZXIpO1xuXG4gICAgICAgIGlmIChjb25zb2xlQXBwZW5kZXIpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZShjb25zb2xlQXBwZW5kZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAhPT0gJ09mZicpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLndlYlBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl93ZWJQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLndlYlBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9obHNKc0xvYWRlciA9IG9wdGlvbnMuaGxzSnNMb2FkZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBzdGF0aWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5HbG9iYWxTY29wZS5hZGRXaW5kb3dFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmluaXQoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVVybCB7XG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IEdsb2JhbFNjb3BlLlVSTCh1cmwpO1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBiYXNlVVJMLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG5cbiAgICAgIHN3aXRjaCAoYmFzZVVSTC5wcm90b2NvbCkge1xuICAgICAgICBjYXNlICd3czonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cDonO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dzczonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cHM6JztcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDIgfHxcbiAgICAgICAgICAoc2VnbWVudHMubGVuZ3RoID09PSAzICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDJdLmxlbmd0aCA8PSAyICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmxlbmd0aCA8PSAzKVxuICAgICAgKSB7XG4gICAgICAgIHNlZ21lbnRzLnVuc2hpZnQoJ3RlbGVtZXRyeScpO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdzdGctJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1zdGcnKSB8fCBzZWdtZW50c1swXS5pbmNsdWRlcygnLXN0Zy0nKSB8fCBzZWdtZW50c1swXSA9PT0gJ3N0ZycpIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5LXN0Zyc7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ2xvY2FsJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1sb2NhbCcpKSB7XG4gICAgICAgIC8vIExlYXZlIFVSTCB1bmNoYW5nZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeSc7XG4gICAgICB9XG5cbiAgICAgIGJhc2VVUkwuaG9zdG5hbWUgPSBzZWdtZW50cy5qb2luKCcuJyk7XG5cbiAgICAgIHJldHVybiBgJHtiYXNlVVJMLm9yaWdpbn0vdGVsZW1ldHJ5YDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgdHlwZSBCaXRyYXRlU3RhdGVUeXBlID0gJ0tlZXAnIHwgJ1Jlc2V0JztcbmV4cG9ydCB0eXBlIEJpdHJhdGVNb2RlVHlwZSA9ICdOb3JtYWwnIHwgJ0ZvcmNlJyB8ICdSZXNldCc7XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVTdGF0ZSB7XG4gIEtlZXAsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVNb2RlIHtcbiAgTm9ybWFsLFxuICBGb3JjZSxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUge1xuICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgYml0cmF0ZUluQml0c1BlclNlY29uZDogbnVtYmVyO1xuICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZVR5cGU7XG4gIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZVR5cGU7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi8uLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi8uLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQgU2Vzc2lvblRlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9TZXNzaW9uVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCBFZGdlVG9rZW4gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZVRva2VuJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCBUb2tlbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9Ub2tlbkNvbnRleHQnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0LCB7Q2hhbm5lbENvbnRleHRPcHRpb25zfSBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBFbmNvZGVkU3RyZWFtU2luaywge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuaW1wb3J0IFN0cmVhbVRyYWNrVHJhbnNmb3JtLCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCwge1N0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zfSBmcm9tICcuLi9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RhdGVDb250ZXh0JztcbmltcG9ydCBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0JztcbmltcG9ydCB7RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24sIFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbn0gZnJvbSAnLi4vZnJhbWVUaW1pbmcvRnJhbWVUaW1pbmdJbmZvcm1hdGlvbic7XG5pbXBvcnQgU3RyZWFtRmFjdG9yeSBmcm9tICcuLi9zdHJlYW1pbmcvU3RyZWFtRmFjdG9yeSc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmNvbnN0IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiA9ICdjbGllbnQ6dGVybWluYXRpb24nO1xuY29uc3QgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMgPSAzMDAwO1xuY29uc3Qgc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMTUwMDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+O1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2hhbm5lbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbkNvbnRleHQ6IFRva2VuQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhdGVDb250ZXh0OiBTdGF0ZUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0OiBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbjogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhdGU6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9NdXRlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dG9QYXVzZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUb2tlbkV4cGlyaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0aG9yaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU9ubGluZTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxvYWRpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlQbGF5aW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RhbmRieTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0b3BwZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlUYXJnZXRMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUJpdHJhdGVMaW1pdDogUmVhZE9ubHlTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJlc29sdXRpb246IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUZhaWx1cmVDb3VudDogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RW5kUG9pbnQ6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RyZWFtOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UnRjU3RhdGlzdGljczogUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlNZWRpYVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlJc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25FbmFibGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb246IFJlYWRPbmx5U3ViamVjdDxEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjogUmVhZE9ubHlTdWJqZWN0PFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+O1xuXG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvblRlbGVtZXRyeTogU2Vzc2lvblRlbGVtZXRyeTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIG9wdGlvbnM/OiBDaGFubmVsT3B0aW9ucykge1xuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pO1xuICAgIGNvbnN0IGNoYW5uZWxDb250ZXh0T3B0aW9uczogQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge3RhcmdldExhZzogb3B0aW9ucz8udGFyZ2V0TGFnfTtcbiAgICBjb25zdCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9uczogU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMgPSB7XG4gICAgICBoYXNJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJyksXG4gICAgICBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2VuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zJyksXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogb3B0aW9ucz8uYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zPy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rXG4gICAgfTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dCA9IG5ldyBUb2tlbkNvbnRleHQodG9rZW4pO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gbmV3IENoYW5uZWxDb250ZXh0KGNoYW5uZWxDb250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0ID0gbmV3IFBlZXJDb25uZWN0aW9uQ29udGV4dCgpO1xuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQgPSBuZXcgU3RyZWFtVHJhbnNmb3JtQ29udGV4dChzdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyk7XG4gICAgdGhpcy5fc3RhdGVDb250ZXh0ID0gbmV3IFN0YXRlQ29udGV4dCgpO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5KTtcbiAgICB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIgPSB0aGlzLmhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCA9IG5ldyBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCgpO1xuICAgIHRoaXMuY29uZmlndXJlRnJhbWVUaW1pbmdJbmZvcm1hdGlvbihlZGdlVG9rZW4pO1xuICAgIHRoaXMuX3JlYWRPbmx5SXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uRW5hYmxlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuaXNFbmFibGVkKTtcbiAgICB0aGlzLl9yZWFkT25seURlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+KHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LmRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seVJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiA9IG5ldyBSZWFkT25seVN1YmplY3Q8UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD4odGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQucmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uKTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQuc3Vic2NyaWJlKHZpZGVvRWxlbWVudCA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnN1YnNjcmliZShzdHJlYW0gPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkuZGlzcG9zZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3RyZWFtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLnZpZGVvRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICAgICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSA9IG5ldyBWaWRlb1RlbGVtZXRyeSh0aGlzLnN0cmVhbUlkLCBTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9jaGFubmVsU3RhcnRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkuc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh0aGlzLnZpZGVvRWxlbWVudCk7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkuc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHRoaXMudmlkZW9FbGVtZW50KTtcblxuICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnJlc3RhcnRBZnRlclN0b3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KSB7XG4gICAgICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB9LCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24uc3Vic2NyaWJlKHJlc29sdXRpb24gPT4ge1xuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMocmVzb2x1dGlvbi50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQuc3Vic2NyaWJlKGJpdHJhdGVMaW1pdCA9PiB7XG4gICAgICAgIGlmIChiaXRyYXRlTGltaXQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGJpdHJhdGVMaW1pdCxcbiAgICAgICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICAgICAgQml0cmF0ZU1vZGUuTm9ybWFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1PblVubW91bnQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtT25Vbm1vdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgJ2NsaWVudDp0ZXJtaW5hdGlvbi1vbi13aW5kb3ctdW5sb2FkJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIEdsb2JhbFNjb3BlLmFkZFdpbmRvd0V2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBHbG9iYWxTY29wZS5yZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgdmlkZW9FbGVtZW50KCk6IEhUTUxWaWRlb0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG4gIH1cblxuICBzZXQgdmlkZW9FbGVtZW50KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcblxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLkluaXRpYWxpemluZykge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5yZXNvbHV0aW9uLnZhbHVlLndpZHRoICE9PSB2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCB8fCB0aGlzLnJlc29sdXRpb24udmFsdWUuaGVpZ2h0ICE9PSB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IG5ldyBEaW1lbnNpb24odmlkZW9FbGVtZW50LnZpZGVvV2lkdGgsIHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBEaW1lbnNpb24uZW1wdHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRva2VuKCk6IEVuY29kZWRFZGdlVG9rZW4ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gIH1cblxuICBzZXQgdG9rZW4odG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUgPSB0b2tlbjtcbiAgICB0aGlzLl90b2tlbkNvbnRleHQudG9rZW5FeHBpcmluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpO1xuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG5cbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlID0gZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnaW5zZXJ0YWJsZS1zdHJlYW1zJyk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcycpO1xuXG4gICAgdGhpcy5jb25maWd1cmVGcmFtZVRpbWluZ0luZm9ybWF0aW9uKGVkZ2VUb2tlbik7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgcGVlckNvbm5lY3Rpb24oKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGF0ZTtcbiAgfVxuXG4gIGdldCBhdXRvTXV0ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQ7XG4gIH1cblxuICBnZXQgYXV0b1BhdXNlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9QYXVzZWQ7XG4gIH1cblxuICBnZXQgdG9rZW5FeHBpcmluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmc7XG4gIH1cblxuICBnZXQgYXV0aG9yaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQ7XG4gIH1cblxuICBnZXQgb25saW5lKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5T25saW5lO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMb2FkaW5nO1xuICB9XG5cbiAgZ2V0IHBsYXlpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQbGF5aW5nO1xuICB9XG5cbiAgZ2V0IHN0YW5kYnkoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGFuZGJ5O1xuICB9XG5cbiAgZ2V0IHN0b3BwZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdG9wcGVkO1xuICB9XG5cbiAgZ2V0IHRhcmdldExhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWc7XG4gIH1cblxuICBnZXQgbGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxhZztcbiAgfVxuXG4gIGdldCBiaXRyYXRlTGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQudmFsdWU7XG4gIH1cblxuICBnZXQgcmVzb2x1dGlvbigpOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbjtcbiAgfVxuXG4gIGdldCBmYWlsdXJlQ291bnQoKTogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudDtcbiAgfVxuXG4gIGdldCBlbmRQb2ludCgpOiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlFbmRQb2ludDtcbiAgfVxuXG4gIGdldCBzdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdHJlYW07XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQ7XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljcygpOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzO1xuICB9XG5cbiAgZ2V0IG1lZGlhU3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgZ2V0IGlzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkVuYWJsZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25FbmFibGVkO1xuICB9XG5cbiAgZ2V0IGRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjtcbiAgfVxuXG4gIGdldCByZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb247XG4gIH1cblxuICBzZXRCaXRyYXRlTGltaXQoYml0cmF0ZUxpbWl0OiBCaXRzUGVyU2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gYml0cmF0ZUxpbWl0O1xuICB9XG5cbiAgY2xlYXJCaXRyYXRlTGltaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgY29uc3QgYml0cmF0ZUluQml0c1BlclNlY29uZCA9IDA7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgIEJpdHJhdGVNb2RlLlJlc2V0XG4gICAgICApXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFyZ2V0TGFnKGxhZzogTWlsbGlzZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC50YXJnZXRMYWcudmFsdWUgPSBsYWc7XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcuc3Vic2NyaWJlKGlzU3RhcnRpbmcgPT4ge1xuICAgICAgICBpZiAoIWlzU3RhcnRpbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTdG9wKHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgfVxuXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVubXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IFVSTCB7XG4gICAgY29uc3QgdXJsID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudXJpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IEdsb2JhbFNjb3BlLlVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyBzdGFydCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NTdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuXG4gICAgY29uc3QgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4gPSB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gICAgY29uc3QgbGlzdGVuT25TdHJlYW1TZXR1cCA9IHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkubGlzdGVuT25TdHJlYW1TZXR1cCgpO1xuXG4gICAgaWYgKCFFZGdlQXV0aFBhcnNlci5pc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbikpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IFN0cmVhbVRyYWNrVHJhbnNmb3JtLnZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSgndmlkZW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBTdHJlYW1UcmFja1RyYW5zZm9ybS52YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0oJ2F1ZGlvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gRW5jb2RlZFN0cmVhbVNpbmsudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygndmlkZW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmspO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBFbmNvZGVkU3RyZWFtU2luay52YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKCdhdWRpbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgJiYgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQm90aCBpbnNlcnRhYmxlLXN0cmVhbXMgYW5kIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGFyZSBlbmFibGVkLCBvbmx5IHVzZSBvbmUgb3IgdGhlIG90aGVyJyk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgPSB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPT09ICdmdW5jdGlvbic7XG4gICAgY29uc3QgaGFzRW5jb2RlZFN0cmVhbVNpbmsgPSB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmsgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgJiYgaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQm90aCBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGNhbGxiYWNrIGFuZCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgc2luayBmdW5jdGlvbiBmb3VuZCwgb25seSB1c2Ugb25lIHR5cGUgb3IgdGhlIG90aGVyJyk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYSBTdHJlYW0gVHJhY2sgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbiBpcyBtaXNzaW5nOyBob3dldmVyLCBpbnNlcnRhYmxlLXN0cmVhbXMgaXMgZW5hYmxlZCcpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoYENyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbiBmb3VuZDsgaG93ZXZlciwgaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghKEZlYXR1cmVFbmFibGVtZW50LmlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkIHx8IEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNFbmNvZGVkU3RyZWFtU2luaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBzaW5rIGZ1bmN0aW9uIGlzIG1pc3Npbmc7IGhvd2V2ZXIsIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIGVuYWJsZWQnKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGBDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gc2luayBmdW5jdGlvbiBmb3VuZDsgaG93ZXZlciwgZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMgaXMgbm90IGVuYWJsZWRgKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBDaGFubmVsU3RhdGUuRXJyb3IgfHwgc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nKSB7XG4gICAgICAgICAgRGlzY292ZXJ5LmNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQsIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlQ2FsbGJhY2spO1xuXG4gICAgaWYgKCFzdHJlYW1QbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtUGxheWVyLnN0YXJ0KFxuICAgICAgdXJpLFxuICAgICAgdG9rZW4sXG4gICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLFxuICAgICAgdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudC5iaW5kKHRoaXMpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLmZhaWwoKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUrKztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpjbGVhbnVwLWFmdGVyLWZhaWxlZC1zZXR1cCcpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNsaWVudFN0YXJ0RXJyb3I7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgY2hhbm5lbCcsIGUpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nIHx8ICFTREsuYXV0b21hdGljUmV0cnlPbkZhaWx1cmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0aGlzLmdldFJldHJ5SW50ZXJ2YWwoKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc3RhcnRBZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBsYXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWVkaWFTdHJlYW0gPSB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIW1lZGlhU3RyZWFtKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmV0cnlJbnRlcnZhbCgpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkluaXRpYWxpemluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgICByZXR1cm4gc3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhcnRpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjpcbiAgICAgICAgLy8gRmlyc3QgYW5kIHNlY29uZCBhdHRlbXB0IGZhc3QsIGFmdGVyIHRoYXQgZXhwb25lbnRpYWwgd2l0aCBiYWNrb2ZmIGludGVydmFsXG4gICAgICAgIHJldHVybiB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlU3RyZWFtRmFpbHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlKSB7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YW5kQnk6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5PZmZsaW5lOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNsaWVudFN0YXJ0RXJyb3I6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZXRyeSBzdGFydCB3aXRoIGluaXRpYWwgc3RhdGUgWyVzXSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUsIENoYW5uZWxTdGF0ZVt0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyB1bmF1dGhvcml6ZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBnZW8gcmVzdHJpY3RlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyBibG9ja2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RvcHBlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuSW5pdGlhbGl6aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IGluaXRpYWxpemluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gY29uZmlndXJhdGlvbiBlcnJvciwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUuZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ3VyZUZyYW1lVGltaW5nSW5mb3JtYXRpb24odG9rZW46IEVkZ2VUb2tlbik6IHZvaWQge1xuICAgIGNvbnN0IGZyYW1lVGltaW5nSW5mb3JtYXRpb25DYXBhYmlsaXR5ID0gdG9rZW4uY2FwYWJpbGl0aWVzLmZpbmQoY2FwYWJpbGl0eSA9PiBjYXBhYmlsaXR5LnN0YXJ0c1dpdGgoJ2ZyYW1lLXRpbWluZy1pbmZvcm1hdGlvbj0nKSk7XG5cbiAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZWNvZGUudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZXN0YW1wcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LmlzRW5hYmxlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKCFmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ2FwYWJpbGl0eSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2FibGluZyBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gYXMgbm8gY2FwYWJpbGl0eSB3YXMgZm91bmQnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuaXNDaGFubmVsRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2FibGluZyBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gYXMgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgaXQgWyVzXScsIGZyYW1lVGltaW5nSW5mb3JtYXRpb25DYXBhYmlsaXR5KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZyYW1lVGltaW5nSW5mb3JtYXRpb25DYXBhYmlsaXR5LnNwbGl0KCc9JylbMV1cbiAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAubWFwKG9wdGlvbiA9PiBvcHRpb24udHJpbSgpKVxuICAgICAgLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgc3dpdGNoIChvcHRpb24pIHtcbiAgICAgICAgICBjYXNlICd0aW1lY29kZSc6XG4gICAgICAgICAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZWNvZGUudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd0aW1lc3RhbXBzJzpcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lc3RhbXBzLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdJZ25vcmluZyB1bmtub3duIGZyYW1lIHRpbWluZyBpbmZvcm1hdGlvbiBvcHRpb24gWyVzXScsIG9wdGlvbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gY29uZmlndXJhdGlvbiBbKHRpbWVjb2RlIFslc10sIHRpbWVzdGFtcHMgWyVzXSldJywgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlLCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZXN0YW1wcy52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgfVxuXG4gICAgY29uc3QgcGxheVByb21pc2UgPSB2aWRlb0VsZW1lbnQucGxheSgpO1xuXG4gICAgaWYgKHBsYXlQcm9taXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYXlQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBjb25zdCBoYXNBdWRpb1RyYWNrID0gISFtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIodHJhY2sgPT4ge1xuICAgICAgICByZXR1cm4gdHJhY2sua2luZCA9PT0gJ2F1ZGlvJztcbiAgICAgIH0pLmxlbmd0aDtcbiAgICAgIGNvbnN0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmID0gIVNESy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcblxuICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIHx8IHZpZGVvRWxlbWVudC5tdXRlZCB8fCAhaGFzQXVkaW9UcmFjaykge1xuICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgIGlmIChhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZU9mZikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBhdXNlZCB2aWRlbyBhZnRlciBwbGF5IGZhaWxlZC4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0F1ZGlvVHJhY2spIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgbXV0ZWQgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB2aWRlb0VsZW1lbnQucGxheSgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQbGF5ZWQgdmlkZW8gYWZ0ZXIgYXV0byBtdXRpbmcuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZCB0byB1bm11dGUuJywgdGhpcy5zdHJlYW1JZCk7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgICAgdmlkZW9FbGVtZW50LnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIENoYW5uZWxTdGF0ZSB7XG4gIEluaXRpYWxpemluZyA9IDAsXG4gIE9mZmxpbmUgPSAxLFxuICBTdGFydGluZyA9IDIsXG4gIFBhdXNlZCA9IDMsXG4gIFBsYXlpbmcgPSA0LFxuICBSZWNvdmVyaW5nID0gNSxcbiAgUmVjb25uZWN0aW5nID0gNixcbiAgU3RhbmRCeSA9IDcsXG4gIFN0b3BwZWQgPSA4LFxuICBVbmF1dGhvcml6ZWQgPSA5LFxuICBHZW9SZXN0cmljdGVkID0gMTAsXG4gIEdlb0Jsb2NrZWQgPSAxMSxcbiAgVW5zdXBwb3J0ZWRGZWF0dXJlID0gMTIsXG4gIENvbmZpZ3VyYXRpb25FcnJvciA9IDEzLFxuICBUcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3IgPSAxNCxcbiAgQ29ubmVjdGlvbkVycm9yID0gMTUsXG4gIENsaWVudFN0YXJ0RXJyb3IgPSAxNixcbiAgRXJyb3IgPSAxN1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaGFubmVsU3RhdGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge01pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IENoYW5uZWwsIHtDaGFubmVsT3B0aW9uc30gZnJvbSAnLi9DaGFubmVsJztcblxudHlwZSBDcmVhdGVDaGFubmVsT3B0aW9ucyA9IHtcbiAgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbjtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxPcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBjaGFubmVsT3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldCBpc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25TdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEZlYXR1cmVFbmFibGVtZW50LmlzQ2hhbm5lbEZyYW1lVGltaW5nSW5mb3JtYXRpb25TdXBwb3J0ZWQ7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBEaW1lbnNpb24gZnJvbSAnLi4vLi4vdmlkZW8vRGltZW5zaW9uJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW0sIFN1YnNjcmliZVN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBWaWRlb1RlbGVtZXRyeSBmcm9tICcuLi8uLi92aWRlby9WaWRlb1RlbGVtZXRyeSc7XG5pbXBvcnQge0lSdGNNb25pdG9yU3RhdGlzdGljLCBJUnRjU3RhdGlzdGljfSBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuXG5jb25zdCBkZWZhdWx0VGFyZ2V0TGFnID0gMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbENvbnRleHRPcHRpb25zID0ge1xuICB0YXJnZXRMYWc/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsQ29udGV4dCB7XG4gIGNoYW5uZWxJbml0aWFsaXphdGlvbjogRGF0ZTtcbiAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICBjaGFubmVsRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICByZW5kZXJlckRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgdmlkZW9FbGVtZW50OiBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBzdGF0ZTogU3ViamVjdDxDaGFubmVsU3RhdGU+O1xuICBhdXRvTXV0ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dG9QYXVzZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGF1dGhvcml6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIG9ubGluZTogU3ViamVjdDxib29sZWFuPjtcbiAgbG9hZGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgcGxheWluZzogU3ViamVjdDxib29sZWFuPjtcbiAgc3RhbmRieTogU3ViamVjdDxib29sZWFuPjtcbiAgc3RvcHBlZDogU3ViamVjdDxib29sZWFuPjtcbiAgdGFyZ2V0TGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgbGFnOiBTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgYml0cmF0ZUxpbWl0OiBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+O1xuICByZXNvbHV0aW9uOiBTdWJqZWN0PERpbWVuc2lvbj47XG4gIGZhaWx1cmVDb3VudDogU3ViamVjdDxudW1iZXI+O1xuICBlbmRQb2ludDogU3ViamVjdDxFbmRQb2ludD47XG4gIHN0cmVhbTogU3ViamVjdDxJU3RyZWFtPjtcbiAgcnRjU3RhdGlzdGljczogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHZpZGVvVGVsZW1ldHJ5OiBWaWRlb1RlbGVtZXRyeTtcbiAgcnRjQXVkaW9TdGF0aXN0aWM6IElSdGNTdGF0aXN0aWM7XG4gIHJ0Y1ZpZGVvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQ2hhbm5lbENvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbERpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5yZW5kZXJlckRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsSW5pdGlhbGl6YXRpb24gPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMudmlkZW9FbGVtZW50ID0gbmV3IFN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD4obnVsbCk7XG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdWJqZWN0PENoYW5uZWxTdGF0ZT4oQ2hhbm5lbFN0YXRlLkluaXRpYWxpemluZyk7XG4gICAgdGhpcy5hdXRvTXV0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRvUGF1c2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KG9wdGlvbnM/LnRhcmdldExhZyA/PyBkZWZhdWx0VGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPigwKTtcbiAgICB0aGlzLmJpdHJhdGVMaW1pdCA9IG5ldyBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+KDApO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG5ldyBTdWJqZWN0PERpbWVuc2lvbj4oRGltZW5zaW9uLmVtcHR5KTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmb3JiaWRkZW4tdGFnJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICBjYXNlICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24sIFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbn0gZnJvbSAnLi4vZnJhbWVUaW1pbmcvRnJhbWVUaW1pbmdJbmZvcm1hdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IHtcbiAgcHVibGljIHJlYWRvbmx5IHNob3VsZEV4dHJhY3RUaW1lY29kZTogU3ViamVjdDxib29sZWFuPjtcbiAgcHVibGljIHJlYWRvbmx5IHNob3VsZEV4dHJhY3RUaW1lc3RhbXBzOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaWMgcmVhZG9ubHkgaXNFbmFibGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaWMgcmVhZG9ubHkgZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb246IFN1YmplY3Q8RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPjtcbiAgcHVibGljIHJlYWRvbmx5IHJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjogU3ViamVjdDxSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNob3VsZEV4dHJhY3RUaW1lY29kZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnNob3VsZEV4dHJhY3RUaW1lc3RhbXBzID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuaXNFbmFibGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSBuZXcgU3ViamVjdDxEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+KG51bGwpO1xuICAgIHRoaXMucmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uID0gbmV3IFN1YmplY3Q8UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD4obnVsbCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25Db250ZXh0IHtcbiAgbWVkaWFTdHJlYW06IFN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBwZWVyQ29ubmVjdGlvbjogU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tZWRpYVN0cmVhbSA9IG5ldyBTdWJqZWN0PE1lZGlhU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPihudWxsKTtcbiAgICB0aGlzLnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVDb250ZXh0IHtcbiAgaXNTdGFydGluZzogU3ViamVjdDxib29sZWFuPjtcbiAgaXNEaXNwb3NlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmlzU3RhcnRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0Rpc3Bvc2VkID0gZmFsc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zID0ge1xuICBoYXNJbnNlcnRhYmxlU3RyZWFtczogYm9vbGVhbjtcbiAgaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zOiBib29sZWFuO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+IHwgdW5kZWZpbmVkO1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCB7XG4gIHJlYWRvbmx5IGhhc0luc2VydGFibGVTdHJlYW1zOiBTdWJqZWN0PGJvb2xlYW4+O1xuICByZWFkb25seSBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmhhc0luc2VydGFibGVTdHJlYW1zID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4ob3B0aW9ucy5oYXNJbnNlcnRhYmxlU3RyZWFtcyk7XG4gICAgdGhpcy5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPihvcHRpb25zLmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyk7XG4gICAgdGhpcy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gb3B0aW9ucy52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9IG9wdGlvbnMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaztcbiAgICB0aGlzLmVuY29kZWRWaWRlb1N0cmVhbVNpbmsgPSBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbms7XG4gICAgdGhpcy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID0gb3B0aW9ucy5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRva2VuQ29udGV4dCB7XG4gIHRva2VuOiBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+O1xuICB0b2tlbkV4cGlyaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGNvbnN0cnVjdG9yKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy50b2tlbiA9IG5ldyBTdWJqZWN0PEVuY29kZWRFZGdlVG9rZW4+KHRva2VuKTtcbiAgICB0aGlzLnRva2VuRXhwaXJpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0c3RyZWFtUmVhZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YTogVWludDhBcnJheTtcbiAgcHJpdmF0ZSBfYml0T2Zmc2V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogVWludDhBcnJheSkge1xuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgIHRoaXMuX2JpdE9mZnNldCA9IDA7XG4gIH1cblxuICBwdWJsaWMgcmVhZEJpdHMoYml0c1RvUmVhZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5fYml0T2Zmc2V0ICsgYml0c1RvUmVhZCA+IHRoaXMuX2RhdGEubGVuZ3RoICogOCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVhZCBbJHtiaXRzVG9SZWFkfV0gYml0cyAtIG9ubHkgWyR7dGhpcy5nZXRSZW1haW5pbmdCaXRzKCl9XSBiaXRzIHJlbWFpbmluZyBpbiBzdHJlYW1gKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsdWUgPSAwO1xuICAgIGxldCBiaXRzUmVtYWluaW5nID0gYml0c1RvUmVhZDtcblxuICAgIHdoaWxlIChiaXRzUmVtYWluaW5nID4gMCkge1xuICAgICAgY29uc3QgYnl0ZU9mZnNldCA9IE1hdGguZmxvb3IodGhpcy5fYml0T2Zmc2V0IC8gOCk7XG4gICAgICBjb25zdCBiaXRQb3NpdGlvbkluQnl0ZSA9IHRoaXMuX2JpdE9mZnNldCAlIDg7XG4gICAgICBjb25zdCBiaXRzQXZhaWxhYmxlSW5CeXRlID0gOCAtIGJpdFBvc2l0aW9uSW5CeXRlO1xuICAgICAgY29uc3QgYml0c1RvUmVhZCA9IE1hdGgubWluKGJpdHNSZW1haW5pbmcsIGJpdHNBdmFpbGFibGVJbkJ5dGUpO1xuICAgICAgLy8gQ3JlYXRlIGEgbWFzayBmb3IgdGhlIGJpdHMgd2Ugd2FudCB0byByZWFkXG4gICAgICBjb25zdCBtYXNrID0gKDEgPDwgYml0c1RvUmVhZCkgLSAxO1xuICAgICAgLy8gU2hpZnQgcmlnaHQgdG8gZ2V0IHJpZCBvZiBsb3dlciBiaXRzIHdlIGRvbid0IHdhbnRcbiAgICAgIGNvbnN0IGJ5dGVWYWx1ZSA9ICh0aGlzLl9kYXRhW2J5dGVPZmZzZXRdID4+IChiaXRzQXZhaWxhYmxlSW5CeXRlIC0gYml0c1RvUmVhZCkpO1xuICAgICAgLy8gTWFzayB0byBrZWVwIG9ubHkgdGhlIGJpdHMgd2Ugd2FudFxuICAgICAgY29uc3QgYml0cyA9IGJ5dGVWYWx1ZSAmIG1hc2s7XG5cbiAgICAgIC8vIEFkZCB0aGVzZSBiaXRzIHRvIG91ciByZXN1bHRcbiAgICAgIHZhbHVlID0gKHZhbHVlIDw8IGJpdHNUb1JlYWQpIHwgYml0cztcblxuICAgICAgYml0c1JlbWFpbmluZyAtPSBiaXRzVG9SZWFkO1xuICAgICAgdGhpcy5fYml0T2Zmc2V0ICs9IGJpdHNUb1JlYWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNraXBCaXRzKGJpdHNUb1NraXA6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9iaXRPZmZzZXQgKyBiaXRzVG9Ta2lwID4gdGhpcy5fZGF0YS5sZW5ndGggKiA4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBza2lwIFske2JpdHNUb1NraXB9XSBiaXRzIC0gb25seSBbJHt0aGlzLmdldFJlbWFpbmluZ0JpdHMoKX1dIGJpdHMgcmVtYWluaW5nIGluIHN0cmVhbWApO1xuICAgIH1cblxuICAgIHRoaXMuX2JpdE9mZnNldCArPSBiaXRzVG9Ta2lwO1xuICB9XG5cbiAgcHVibGljIGdldFJlbWFpbmluZ0JpdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMuX2RhdGEubGVuZ3RoICogOCkgLSB0aGlzLl9iaXRPZmZzZXQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBFdmVudFB1Ymxpc2hlciBmcm9tICcuLi8uLi8uLi9ldmVudC9FdmVudFB1Ymxpc2hlcic7XG5pbXBvcnQgSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0fSBmcm9tICcuLi8uLi8uLi9ldmVudC9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IHtFbmNvZGVkTWVkaWFTdHJlYW1FdmVudH0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvZXZlbnRzL0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCBOYWxVbml0IGZyb20gJy4vbmFsVW5pdC9OYWxVbml0JztcbmltcG9ydCBTZWlQYXlsb2FkIGZyb20gJy4vbmFsVW5pdC9TZWlQYXlsb2FkJztcbmltcG9ydCBOYWxVbml0VHlwZSBmcm9tICcuL25hbFVuaXQvTmFsVW5pdFR5cGUnO1xuaW1wb3J0IFNlaVBheWxvYWRUeXBlIGZyb20gJy4vbmFsVW5pdC9TZWlQYXlsb2FkVHlwZSc7XG5pbXBvcnQgRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkIGZyb20gJy4uLy4uL0VuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEgyNjRCaXRzdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuXG4gIGNvbnN0cnVjdG9yKGV2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlcikge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyID0gZXZlbnRQdWJsaXNoZXI7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlVG9OYWxVbml0KG5hbFVuaXRUeXBlOiBOYWxVbml0VHlwZSwgaGFuZGxlcjogKGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8TmFsVW5pdD4pID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPE5hbFVuaXQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Lk5hbFVuaXQsIG5hbFVuaXRFdmVudCA9PiB7XG4gICAgICBpZiAobmFsVW5pdEV2ZW50LmRhdGEudHlwZSA9PT0gbmFsVW5pdFR5cGUpIHtcbiAgICAgICAgaGFuZGxlcihuYWxVbml0RXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvU2VpUGF5bG9hZFR5cGUoc2VpUGF5bG9hZFR5cGU6IFNlaVBheWxvYWRUeXBlLCBoYW5kbGVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxTZWlQYXlsb2FkPikgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8U2VpUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuU2VpUGF5bG9hZCwgc2VpUGF5bG9hZEV2ZW50ID0+IHtcbiAgICAgIGlmIChzZWlQYXlsb2FkRXZlbnQuZGF0YS50eXBlID09PSBzZWlQYXlsb2FkVHlwZSkge1xuICAgICAgICBoYW5kbGVyKHNlaVBheWxvYWRFdmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlVG9QYXlsb2FkKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwgcGF5bG9hZFV1aWQ6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8RW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkPikgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyLnB1Ymxpc2g8c3RyaW5nPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5QYXlsb2FkU3Vic2NyaXB0aW9uLCB7XG4gICAgICBjb250ZXh0LFxuICAgICAgZGF0YTogcGF5bG9hZFV1aWRcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8RW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5QYXlsb2FkLCBwYXlsb2FkRXZlbnQgPT4ge1xuICAgICAgaWYgKHBheWxvYWRFdmVudC5kYXRhLnV1aWQgPT09IHBheWxvYWRVdWlkKSB7XG4gICAgICAgIGhhbmRsZXIocGF5bG9hZEV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5lbnVtIE5hbFVuaXRUeXBlIHtcbiAgVW5zcGVjaWZpZWQgPSAwLFxuICBTbGljZUxheWVyTm9uSWRyRGF0YSA9IDEsXG4gIFNsaWNlRGF0YVBhcnRpdGlvbkFMYXllciA9IDIsXG4gIFNsaWNlRGF0YVBhcnRpdGlvbkJMYXllciA9IDMsXG4gIFNsaWNlRGF0YVBhcnRpdGlvbkNMYXllciA9IDQsXG4gIFNsaWNlTGF5ZXJJZHJEYXRhID0gNSxcbiAgU3VwcGxlbWVudGFsRW5oYW5jZW1lbnRJbmZvcm1hdGlvbiA9IDYsXG4gIFNlcXVlbmNlUGFyYW1ldGVyU2V0ID0gNyxcbiAgUGljdHVyZVBhcmFtZXRlclNldCA9IDgsXG4gIEFjY2Vzc1VuaXREZWxpbWl0ZXIgPSA5LFxuICBFbmRPZlNlcXVlbmNlID0gMTAsXG4gIEVuZE9mU3RyZWFtID0gMTEsXG4gIEZpbGxlckRhdGEgPSAxMixcbiAgU2VxdWVuY2VQYXJhbXRlclNldEV4dGVuc2lvbiA9IDEzLFxuICBQcmVmaXhOYWxVbml0ID0gMTQsXG4gIFN1YnNldFNlcXVlbmNlUGFyYW10ZXJTZXQgPSAxNSxcbiAgRGVwdGhQYXJhbXRlclNldCA9IDE2LFxuICBSZXNlcnZlZDE3ID0gMTcsXG4gIFJlc2VydmVkMTggPSAxOCxcbiAgU2xpY2VMYXllckF1eGlsaWFyeSA9IDE5LFxuICBTbGljZUV4dGVuc2lvbiA9IDIwLFxuICBTbGljZUV4dGVuc2lvbkRlcHRoVmlld0NvbXBvbmVudCA9IDIxLFxuICBSZXNlcnZlZDIyID0gMjIsXG4gIFJlc2VydmVyZDIzID0gMjMsXG4gIFVuc3BlY2lmaWVkMjQgPSAyNCxcbiAgVW5zcGVjaWZpZWQyNSA9IDI1LFxuICBVbnNwZWNpZmllZDI2ID0gMjYsXG4gIFVuc3BlY2lmaWVkMjcgPSAyNyxcbiAgVW5zcGVjaWZpZWQyOCA9IDI4LFxuICBVbnNwZWNpZmllZDI5ID0gMjksXG4gIFVuc3BlY2lmaWVkMzAgPSAzMCxcbiAgVW5zcGVjaWZpZWQzMSA9IDMxXG59XG5cbmV4cG9ydCBkZWZhdWx0IE5hbFVuaXRUeXBlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5lbnVtIFNlaVBheWxvYWRUeXBlIHtcbiAgQnVmZmVyaW5nUGVyaW9kID0gMCxcbiAgUGljdHVyZVRpbWluZyA9IDEsXG4gIFBhblNjYW5SZWN0ID0gMixcbiAgRmlsbGVyUGF5bG9hZCA9IDMsXG4gIFVzZXJEYXRhUmVnaXN0ZXJlZCA9IDQsXG4gIFVzZXJEYXRhVW5yZWdpc3RlcmVkID0gNSxcbiAgUmVjb3ZlcnlQb2ludCA9IDYsXG4gIERlY1JlZlBpY01hcmtpbmdSZXBlaXRpb24gPSA3LFxuICBTcGFyZVBpYyA9IDgsXG4gIFNjZW5lSW5mbyA9IDksXG4gIFN1YlNlcUluZm8gPSAxMCxcbiAgU3ViU2VxTGF5ZXJDaGFyYWN0ZXJpc3RpY3MgPSAxMSxcbiAgU3ViU2VxQ2hhcmFjdGVyaXN0aWNzID0gMTIsXG4gIEZ1bGxGcmFtZUZyZWV6ZSA9IDEzLFxuICBGdWxsRnJhbWVGcmVlemVSZWxlYXNlID0gMTQsXG4gIEZ1bGxGcmFtZVNuYXBzaG90ID0gMTUsXG4gIFByb2dyZXNzaXZlUmVmaW5lbWVudFNlZ21lbnRTdGFydCA9IDE2LFxuICBQcm9ncmVzc2l2ZVJlZmluZW1lbnRTZWdtZW50RW5kID0gMTcsXG4gIE1vdGlvbkNvbnN0cmFpbmVkU2xpY2VHcm91cFNldCA9IDE4LFxuICBGaWxtR3JhaW5DaGFyYWN0ZXJpc3RpYyA9IDE5LFxuICBEZWJsb2NraW5nRmlsdGVyRGlzcGxheVJlZmVyZW5jZSA9IDIwLFxuICBTdGVyZW9WaWRlb0luZm8gPSAyMSxcbiAgUG9zdEZpbHRlckhpbnQgPSAyMixcbiAgVG9uZU1hcHBpbmdJbmZvID0gMjMsXG4gIFNjYWxhYmlsaXR5SW5mbyA9IDI0LFxuICBTdWJQaWNTY2FsYWJsZUxheWVyID0gMjUsXG4gIE5vblJlcXVpcmVkTGF5ZXJSZXAgPSAyNixcbiAgUGFyaW9yaXR5TGF5ZXJJbmZvID0gMjcsXG4gIExheWVyc05vdFByZXNlbnQgPSAyOCxcbiAgTGF5ZXJEZXBlbmRlbmN5Q2hhbmdlID0gMjksXG4gIFNjYWxhYmxlTmVzdGluZyA9IDMwLFxuICBCYXNlTGF5ZXJUZW1wb3JhbEhyZCA9IDMxLFxuICBRdWFsaXR5TGF5ZXJJbnRlZ3JpdHlDaGVjayA9IDMyLFxuICBSZWR1bmRhbnRQaWNQcm9wZXJ0eSA9IDMzLFxuICBUbDBEZXBSZXBJbmRleCA9IDM0LFxuICBUbFN3aXRjaGluZ1BvaW50ID0gMzUsXG4gIFBhcmFsbGVsRGVjb2RpbmdJbmZvID0gMzYsXG4gIE12Y1NjYWxhYmxlTmVzdGluZyA9IDM3LFxuICBWaWV3U2NhbGFiaWxpdHlJbmZvID0gMzgsXG4gIE11bHRpdmlld1NjZW5lSW5mbyA9IDM5LFxuICBNdWx0aXZpZXdBY3F1aXNpdGlvbkluZm8gPSA0MCxcbiAgTm9uUmVxdWlyZWRWaWV3Q29tcG9uZW50ID0gNDEsXG4gIFZpZXdEZXBlbmRlbmN5Q2hhbmdlID0gNDIsXG4gIE9wZXJhdGlvblBvaW50c05vdFByZXNlbnQgPSA0MyxcbiAgQmFzZVZpZXdUZW1wb3JhbEhkciA9IDQ0LFxuICBGcmFtZVBhY2tpbmdBcnJhbmdlbWVudCA9IDQ1LFxuICBNdWx0aXZpZXdWaWV3UG9zaXRpb24gPSA0NixcbiAgRGlzcGxheU9yaWVudGF0aW9uID0gNDcsXG4gIE12Y2RTY2FsYWJsZU5lc3RpbmcgPSA0OCxcbiAgTXZjZFZpZXdTY2FsYWJpbGl0eUluZm8gPSA0OSxcbiAgRGVwdGhSZXByZXNlbnRhdGlvbkluZm8gPSA1MCxcbiAgVGhyZWVEaW1lbnNpb25hbFJlZmVyZW5jZURpc3BsYXlzSW5mbyA9IDUxLFxuICBEZXB0aFRpbWluZyA9IDUyLFxuICBEZXB0aFNhbXBsaW5nSW5mbyA9IDUzLFxuICBDb25zdHJhaW5lZERlcHRoUGFyYW1ldGVyU2V0SWRlbnRpZmllciA9IDU0LFxuICBHcmVlbk1ldGFkYXRhID0gNTUsXG4gIE1hc3RlcmluZ0Rpc3BsYXlDb2xvdXJWb2x1bWV2ID0gNTYsXG4gIENvbG91clJlbWFwcGluZ0luZm8gPSA1NyxcbiAgQ29udGVudExpZ2h0TGV2ZWxJbmZvID0gNTgsXG4gIEFsdGVybmF0aXZlVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgPSA1OSxcbiAgQW1iaWVudFZpZXdpbmdFbnZpcm9ubWVudCA9IDYwLFxuICBDb250ZW50Q29sb3VyVm9sdW1lID0gNjEsXG4gIEVxdWlyZWN0YW5ndWxhclByb2plY3Rpb24gPSA2MixcbiAgQ3ViZW1hcFByb2plY3Rpb24gPSA2MyxcbiAgU3BoZXJlUm90YXRpb24gPSA2NCxcbiAgUmVnaW9ud2lzZVBhY2tpbmcgPSA2NSxcbiAgT21uaVZpZXdwb3J0ID0gNjYsXG4gIEFsdGVybmF0aXZlRGVwdGhJbmZvID0gNjcsXG4gIFNlaU1hbmlmZXN0ID0gNjgsXG4gIFNlaVByZWZpeEluZGljYXRpb24gPSA2OSxcbiAgQW5ub3RhdGVkUmVnaW9ucyA9IDcwLFxuICBTaHV0dGVySW50ZXJ2YWxJbmZvID0gNzFcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VpUGF5bG9hZFR5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IFVpbnQ4QXJyYXlzIGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xhbmcvVWludDhBcnJheXMnO1xuaW1wb3J0IE5hbFVuaXQgZnJvbSAnLi4vbmFsVW5pdC9OYWxVbml0JztcbmltcG9ydCBOYWxVbml0VHlwZSBmcm9tICcuLi9uYWxVbml0L05hbFVuaXRUeXBlJztcbmltcG9ydCBTZWlQYXlsb2FkIGZyb20gJy4uL25hbFVuaXQvU2VpUGF5bG9hZCc7XG5pbXBvcnQgU2VpUGF5bG9hZFR5cGUgZnJvbSAnLi4vbmFsVW5pdC9TZWlQYXlsb2FkVHlwZSc7XG5pbXBvcnQgRXZlbnRQdWJsaXNoZXIgZnJvbSAnLi4vLi4vLi4vLi4vZXZlbnQvRXZlbnRQdWJsaXNoZXInO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCwge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dH0gZnJvbSAnLi4vLi4vLi4vLi4vZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnR9IGZyb20gJy4uLy4uLy4uLy4uL2V2ZW50L2V2ZW50cy9FbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkIGZyb20gJy4uLy4uLy4uL0VuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZCc7XG5pbXBvcnQgSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kgZnJvbSAnLi92Y2wvSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3knO1xuaW1wb3J0IEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyBmcm9tICcuL0VtdWxhdGlvblByZXZlbnRpb25CeXRlcyc7XG5cbnR5cGUgRXh0cmFjdGVkRGF0YSA9IHtcbiAgYW5uZXhCU3RhcnRDb2RlTGVuZ3RoOiAzIHwgNDtcbiAgbmFsVW5pdDogTmFsVW5pdDtcbiAgc2VpUGF5bG9hZHM/OiBTZWlQYXlsb2FkW107XG59O1xuXG50eXBlIEV4dHJhY3RlZE5hbFVuaXQgPSB7XG4gIG5hbFVuaXREYXRhOiBVaW50OEFycmF5O1xuICBzZWlQYXlsb2Fkcz86IFNlaVBheWxvYWRbXTtcbn07XG5cbnR5cGUgRXh0cmFjdGVkU2VpUGF5bG9hZCA9IHtcbiAgcGF5bG9hZFR5cGU6IFNlaVBheWxvYWRUeXBlO1xuICBwYXlsb2FkOiBVaW50OEFycmF5O1xuICBlbmRJbmRleDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlckNvbmZpZ3VyYXRpb24gPSB7XG4gIHRydW5jYXRlZFZjbE5hbFVuaXRCeXRlTGVuZ3RoOiBudW1iZXI7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBhbm5leEIzQnl0ZVN0YXJ0Q29kZSA9IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAxXSk7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgYW5uZXhCNEJ5dGVTdGFydENvZGUgPSBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VpUGF5bG9hZDNCeXRlRW5kQ29kZSA9IG5ldyBVaW50OEFycmF5KFsweDgwLCAweDAwLCAweDAwLCAweDAxXSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zZWlQYXlsb2FkNEJ5dGVFbmRDb2RlID0gbmV3IFVpbnQ4QXJyYXkoWzB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF92Y2xFeHRyYWN0aW9uU3RyYXRlZ3k6IElWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5O1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICBjb25zdHJ1Y3RvcihldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXIsIHZjbEV4dHJhY3Rpb25TdHJhdGVneTogSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kpIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlciA9IGV2ZW50UHVibGlzaGVyO1xuICAgIHRoaXMuX3ZjbEV4dHJhY3Rpb25TdHJhdGVneSA9IHZjbEV4dHJhY3Rpb25TdHJhdGVneTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5zdWJzY3JpYmVUb0VuY29kZWRWaWRlb1N0cmVhbUNodW5rRXZlbnRzKCkpO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0VuY29kZWRWaWRlb1N0cmVhbUNodW5rRXZlbnRzKCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8VWludDhBcnJheT4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmssIHRoaXMucGFyc2VFbmNvZGVkVmlkZW9TdHJlYW1DaHVuay5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayh7Y29udGV4dCwgZGF0YTogY2h1bmt9OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8VWludDhBcnJheT4pOiB2b2lkIHtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gMDtcblxuICAgIHdoaWxlIChjdXJyZW50SW5kZXggPCBjaHVuay5ieXRlTGVuZ3RoKSB7XG4gICAgICBjdXJyZW50SW5kZXggKz0gdGhpcy5oYW5kbGVFeHRyYWN0ZWREYXRhKGNvbnRleHQsIHRoaXMuZXh0cmFjdE5hbFVuaXRBdE9mZnNldChjaHVuaywgY3VycmVudEluZGV4KSk7XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnlFbmRPZkNodW5rKGNvbnRleHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFeHRyYWN0ZWREYXRhKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwge2FubmV4QlN0YXJ0Q29kZUxlbmd0aCwgbmFsVW5pdCwgc2VpUGF5bG9hZHN9OiBFeHRyYWN0ZWREYXRhKTogbnVtYmVyIHtcbiAgICB0aGlzLnB1Ymxpc2hOYWxVbml0KGNvbnRleHQsIG5hbFVuaXQpO1xuICAgIHNlaVBheWxvYWRzPy5mb3JFYWNoKHRoaXMuaGFuZGxlU2VpUGF5bG9hZC5iaW5kKHRoaXMsIGNvbnRleHQpKTtcblxuICAgIHJldHVybiBuYWxVbml0LmRhdGEuYnl0ZUxlbmd0aCArIGFubmV4QlN0YXJ0Q29kZUxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VpUGF5bG9hZChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHNlaVBheWxvYWQ6IFNlaVBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLnB1Ymxpc2hTZWlQYXlsb2FkKGNvbnRleHQsIHNlaVBheWxvYWQpO1xuXG4gICAgc3dpdGNoIChzZWlQYXlsb2FkLnR5cGUpIHtcbiAgICAgIGNhc2UgU2VpUGF5bG9hZFR5cGUuVXNlckRhdGFVbnJlZ2lzdGVyZWQ6XG4gICAgICAgIHRoaXMuaGFuZGxlU2VpUGF5bG9hZFVzZXJEYXRhVW5yZWdpc3RlcmVkKGNvbnRleHQsIHNlaVBheWxvYWQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2VpUGF5bG9hZFVzZXJEYXRhVW5yZWdpc3RlcmVkKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwgc2VpUGF5bG9hZDogU2VpUGF5bG9hZCk6IHZvaWQge1xuICAgIGNvbnN0IHBheWxvYWRVdWlkID0gVWludDhBcnJheXMuZ2V0VXVpZFN0cmluZ0Zyb21VaW50OEFycmF5KHNlaVBheWxvYWQuZGF0YS5zdWJhcnJheSgwLCAxNikpO1xuICAgIGNvbnN0IHBheWxvYWREYXRhID0gc2VpUGF5bG9hZC5kYXRhLnN1YmFycmF5KDE2KTtcblxuICAgIHRoaXMucHVibGlzaFBheWxvYWQoY29udGV4dCwge1xuICAgICAgdXVpZDogcGF5bG9hZFV1aWQsXG4gICAgICBkYXRhOiBwYXlsb2FkRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwdWJsaXNoTmFsVW5pdChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIG5hbFVuaXQ6IE5hbFVuaXQpOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPE5hbFVuaXQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Lk5hbFVuaXQsIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBuYWxVbml0XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHB1Ymxpc2hTZWlQYXlsb2FkKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwgc2VpUGF5bG9hZDogU2VpUGF5bG9hZCk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyLnB1Ymxpc2g8U2VpUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuU2VpUGF5bG9hZCwge1xuICAgICAgY29udGV4dCxcbiAgICAgIGRhdGE6IHNlaVBheWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHVibGlzaFBheWxvYWQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBwYXlsb2FkOiBFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZCwge1xuICAgICAgY29udGV4dCxcbiAgICAgIGRhdGE6IHBheWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5RW5kT2ZDaHVuayhjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlci5wdWJsaXNoPG51bGw+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LkVuZE9mQ2h1bmssIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBudWxsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3ROYWxVbml0QXRPZmZzZXQoY2h1bms6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogRXh0cmFjdGVkRGF0YSB7XG4gICAgY29uc3QgYW5uZXhCU3RhcnRDb2RlTGVuZ3RoID0gY2h1bmtbb2Zmc2V0ICsgMl0gPT09IDB4MDEgPyAzIDogNDtcbiAgICBjb25zdCBuYWxVbml0SGVhZGVySW5kZXggPSBvZmZzZXQgKyBhbm5leEJTdGFydENvZGVMZW5ndGg7XG4gICAgY29uc3QgbmFsVW5pdFR5cGUgPSBjaHVua1tuYWxVbml0SGVhZGVySW5kZXhdICYgMHgxZjtcbiAgICBsZXQgZXh0cmFjdGVkRGF0YTtcblxuICAgIHN3aXRjaCAobmFsVW5pdFR5cGUpIHtcbiAgICAgIGNhc2UgTmFsVW5pdFR5cGUuU2xpY2VMYXllck5vbklkckRhdGE6XG4gICAgICBjYXNlIE5hbFVuaXRUeXBlLlNsaWNlRGF0YVBhcnRpdGlvbkFMYXllcjpcbiAgICAgIGNhc2UgTmFsVW5pdFR5cGUuU2xpY2VEYXRhUGFydGl0aW9uQkxheWVyOlxuICAgICAgY2FzZSBOYWxVbml0VHlwZS5TbGljZURhdGFQYXJ0aXRpb25DTGF5ZXI6XG4gICAgICBjYXNlIE5hbFVuaXRUeXBlLlNsaWNlTGF5ZXJJZHJEYXRhOlxuICAgICAgICBleHRyYWN0ZWREYXRhID0gdGhpcy5fdmNsRXh0cmFjdGlvblN0cmF0ZWd5LmV4dHJhY3RWY2xOYWxVbml0KGNodW5rLCBuYWxVbml0SGVhZGVySW5kZXgpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5hbFVuaXRUeXBlLlN1cHBsZW1lbnRhbEVuaGFuY2VtZW50SW5mb3JtYXRpb246XG4gICAgICAgIGV4dHJhY3RlZERhdGEgPSB0aGlzLmV4dHJhY3RTZWlOYWxVbml0KGNodW5rLCBuYWxVbml0SGVhZGVySW5kZXgpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBleHRyYWN0ZWREYXRhID0gdGhpcy5leHRyYWN0Tm9uVmNsTmFsVW5pdChjaHVuaywgbmFsVW5pdEhlYWRlckluZGV4KTtcblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYW5uZXhCU3RhcnRDb2RlTGVuZ3RoLFxuICAgICAgbmFsVW5pdDoge1xuICAgICAgICB0eXBlOiBuYWxVbml0VHlwZSxcbiAgICAgICAgZGF0YTogZXh0cmFjdGVkRGF0YS5uYWxVbml0RGF0YVxuICAgICAgfSxcbiAgICAgIHNlaVBheWxvYWRzOiBleHRyYWN0ZWREYXRhLnNlaVBheWxvYWRzXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFNlaU5hbFVuaXQoY2h1bms6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogRXh0cmFjdGVkTmFsVW5pdCB7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IG9mZnNldCArIDE7XG4gICAgY29uc3Qgc2VpUGF5bG9hZHM6IFNlaVBheWxvYWRbXSA9IFtdO1xuXG4gICAgd2hpbGUgKFxuICAgICAgIVVpbnQ4QXJyYXlzLmlzRGF0YUF0T2Zmc2V0VGFyZ2V0Qnl0ZVNlcXVlbmNlKEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuX3NlaVBheWxvYWQ0Qnl0ZUVuZENvZGUsIGNodW5rLCBjdXJyZW50SW5kZXgpXG4gICAgICAmJiAhVWludDhBcnJheXMuaXNEYXRhQXRPZmZzZXRUYXJnZXRCeXRlU2VxdWVuY2UoQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5fc2VpUGF5bG9hZDNCeXRlRW5kQ29kZSwgY2h1bmssIGN1cnJlbnRJbmRleClcbiAgICAgICYmIGN1cnJlbnRJbmRleCA8IGNodW5rLmJ5dGVMZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnN0IGV4dHJhY3RlZFNlaVBheWxvYWQgPSB0aGlzLmV4dHJhY3RTZWlQYXlsb2FkKGNodW5rLCBjdXJyZW50SW5kZXgpO1xuXG4gICAgICBzZWlQYXlsb2Fkcy5wdXNoKHtcbiAgICAgICAgZGF0YTogZXh0cmFjdGVkU2VpUGF5bG9hZC5wYXlsb2FkLFxuICAgICAgICB0eXBlOiBleHRyYWN0ZWRTZWlQYXlsb2FkLnBheWxvYWRUeXBlXG4gICAgICB9KTtcbiAgICAgIGN1cnJlbnRJbmRleCA9IGV4dHJhY3RlZFNlaVBheWxvYWQuZW5kSW5kZXg7XG4gICAgfVxuXG4gICAgY3VycmVudEluZGV4Kys7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFsVW5pdERhdGE6IGNodW5rLnN1YmFycmF5KG9mZnNldCwgY3VycmVudEluZGV4KSxcbiAgICAgIHNlaVBheWxvYWRzXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdE5vblZjbE5hbFVuaXQoY2h1bms6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogRXh0cmFjdGVkTmFsVW5pdCB7XG4gICAgY29uc3QgbmV4dEFubmV4QlN0YXJ0Q29kZUluZGV4ID0gQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5maW5kQW5uZXhCU3RhcnRJbmRleEZyb21PZmZzZXQoY2h1bmssIG9mZnNldCwgY2h1bmsuYnl0ZUxlbmd0aCk7XG5cbiAgICByZXR1cm4ge25hbFVuaXREYXRhOiBjaHVuay5zdWJhcnJheShvZmZzZXQsIG5leHRBbm5leEJTdGFydENvZGVJbmRleCl9O1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0U2VpUGF5bG9hZChjaHVuazogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIpOiBFeHRyYWN0ZWRTZWlQYXlsb2FkIHtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gb2Zmc2V0O1xuICAgIGxldCBmZkNvdW50ID0gMDtcblxuICAgIHdoaWxlIChjaHVua1tjdXJyZW50SW5kZXhdID09PSAweGZmKSB7XG4gICAgICBjdXJyZW50SW5kZXgrKztcbiAgICAgIGZmQ291bnQrKztcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkVHlwZSA9IGZmQ291bnQgKiAyNTUgKyBjaHVua1tjdXJyZW50SW5kZXhdO1xuXG4gICAgY3VycmVudEluZGV4Kys7XG4gICAgZmZDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoY2h1bmtbY3VycmVudEluZGV4XSA9PT0gMHhmZikge1xuICAgICAgY3VycmVudEluZGV4Kys7XG4gICAgICBmZkNvdW50Kys7XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZFNpemUgPSBmZkNvdW50ICogMjU1ICsgY2h1bmtbY3VycmVudEluZGV4XTtcblxuICAgIGN1cnJlbnRJbmRleCsrO1xuXG4gICAgY29uc3QgZW5kSW5kZXggPSBjdXJyZW50SW5kZXggKyBFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMuZ2V0T2Zmc2V0V2l0aEV4cGFuZGVkRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzKGNodW5rLCBjdXJyZW50SW5kZXgsIHBheWxvYWRTaXplKTtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXlsb2FkVHlwZSxcbiAgICAgIHBheWxvYWQ6IGNodW5rLnN1YmFycmF5KGN1cnJlbnRJbmRleCwgZW5kSW5kZXgpLFxuICAgICAgZW5kSW5kZXhcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmaW5kQW5uZXhCU3RhcnRJbmRleEZyb21PZmZzZXQoZGF0YTogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIsIHJldHVyblZhbHVlV2hlbk5vdEZvdW5kOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGluZGV4NCA9IFVpbnQ4QXJyYXlzLmZpbmRUYXJnZXRCeXRlU2VxdWVuY2VJbmRleEZyb21PZmZzZXQoQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEI0Qnl0ZVN0YXJ0Q29kZSwgZGF0YSwgb2Zmc2V0LCByZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZCk7XG5cbiAgICBpZiAoaW5kZXg0ICE9PSByZXR1cm5WYWx1ZVdoZW5Ob3RGb3VuZCkge1xuICAgICAgcmV0dXJuIGluZGV4NDtcbiAgICB9XG5cbiAgICByZXR1cm4gVWludDhBcnJheXMuZmluZFRhcmdldEJ5dGVTZXF1ZW5jZUluZGV4RnJvbU9mZnNldChBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjNCeXRlU3RhcnRDb2RlLCBkYXRhLCBvZmZzZXQsIHJldHVyblZhbHVlV2hlbk5vdEZvdW5kKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMge1xuICBwdWJsaWMgc3RhdGljIGdldE9mZnNldFdpdGhFeHBhbmRlZEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyhidWZmZXI6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyLCBudW1iZXJPZk5vbkVtdWxhdGlvblByZXZlbnRpb25CeXRlczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgbGVhZGluZ1plcm9CeXRlcyA9IDA7XG4gICAgbGV0IG51bWJlck9mQnl0ZXNWaXNpdGVkID0gMDtcbiAgICBsZXQgbnVtYmVyT2ZCeXRlc1RvU2VlayA9IG51bWJlck9mTm9uRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzO1xuXG4gICAgZm9yIChsZXQgaSA9IG9mZnNldDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKywgbnVtYmVyT2ZCeXRlc1Zpc2l0ZWQrKykge1xuICAgICAgaWYgKG51bWJlck9mQnl0ZXNUb1NlZWsgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChsZWFkaW5nWmVyb0J5dGVzID09PSAyICYmIGJ1ZmZlcltpXSA9PT0gMHgwMykge1xuICAgICAgICBsZWFkaW5nWmVyb0J5dGVzID0gMDtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJ1ZmZlcltpXSA9PT0gMHgwMCkge1xuICAgICAgICBsZWFkaW5nWmVyb0J5dGVzKys7XG4gICAgICB9IGVsc2UgaWYgKGxlYWRpbmdaZXJvQnl0ZXMgPiAwKSB7XG4gICAgICAgIGxlYWRpbmdaZXJvQnl0ZXMgPSAwO1xuICAgICAgfVxuXG4gICAgICBudW1iZXJPZkJ5dGVzVG9TZWVrLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bWJlck9mQnl0ZXNWaXNpdGVkO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyByZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMoYnVmZmVyOiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgIGxldCBvdXRPZmZzZXQgPSAwO1xuICAgIGxldCBlYnNwT2Zmc2V0ID0gMDtcblxuICAgIGZvciAobGV0IHByZXZlbnRpb25CeXRlSWR4ID0gMjsgcHJldmVudGlvbkJ5dGVJZHggPCBidWZmZXIuYnl0ZUxlbmd0aDsgcHJldmVudGlvbkJ5dGVJZHgrKykge1xuICAgICAgaWYgKGJ1ZmZlcltwcmV2ZW50aW9uQnl0ZUlkeF0gPT09IDB4MDMgJiYgYnVmZmVyW3ByZXZlbnRpb25CeXRlSWR4IC0gMV0gPT09IDB4MDAgJiYgYnVmZmVyW3ByZXZlbnRpb25CeXRlSWR4IC0gMl0gPT09IDB4MDApIHtcbiAgICAgICAgb3V0cHV0LnNldChidWZmZXIuc3ViYXJyYXkoZWJzcE9mZnNldCwgcHJldmVudGlvbkJ5dGVJZHgpLCBvdXRPZmZzZXQpO1xuICAgICAgICBvdXRPZmZzZXQgKz0gcHJldmVudGlvbkJ5dGVJZHggLSBlYnNwT2Zmc2V0O1xuICAgICAgICBlYnNwT2Zmc2V0ID0gcHJldmVudGlvbkJ5dGVJZHggKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlYnNwT2Zmc2V0IDwgYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgIG91dHB1dC5zZXQoYnVmZmVyLnN1YmFycmF5KGVic3BPZmZzZXQpLCBvdXRPZmZzZXQpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJpdHN0cmVhbVJlYWRlciBmcm9tICcuLi8uLi8uLi9CaXRzdHJlYW1SZWFkZXInO1xuaW1wb3J0IEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyBmcm9tICcuL0VtdWxhdGlvblByZXZlbnRpb25CeXRlcyc7XG5cbmVudW0gUGljU3RydWN0IHtcbiAgUHJvZ3Jlc3NpdmVGcmFtZSA9IDAsXG4gIFRvcEZpZWxkID0gMSxcbiAgQm90dG9tRmllbGQgPSAyLFxuICBUb3BGaWVsZEJvdHRvbUZpZWxkID0gMyxcbiAgQm90dG9tRmllbGRUb3BGaWVsZCA9IDQsXG4gIFRvcEZpZWxkQm90dG9tRmllbGRUb3BGaWVsZFJlcGVhdGVkID0gNSxcbiAgQm90dG9tRmllbGRUb3BGaWVsZEJvdHRvbUZpZWxkUmVwZWF0ZWQgPSA2LFxuICBGcmFtZURvdWJsaW5nID0gNyxcbiAgRnJhbWVUcmlwbGluZyA9IDhcbn1cblxuZXhwb3J0IHR5cGUgUGljdHVyZVRpbWluZ1BhcnNpbmdDb25maWcgPSB7XG4gIHBpY1N0cnVjdFByZXNlbnRGbGFnOiBib29sZWFuO1xufSAmIChcbiAge1xuICAgIGNwYkRwYkRlbGF5c1ByZXNlbnRGbGFnOiB0cnVlO1xuICAgIGNwYlJlbW92YWxEZWxheUxlbmd0aE1pbnVzMTogbnVtYmVyO1xuICAgIGRwYk91dHB1dERlbGF5TGVuZ3RoTWludXMxOiBudW1iZXI7XG4gIH1cbiAgfCB7XG4gICAgY3BiRHBiRGVsYXlzUHJlc2VudEZsYWc6IGZhbHNlO1xuICB9XG4pO1xuXG5leHBvcnQgdHlwZSBDbG9ja1RpbWVzdGFtcCA9IHtcbiAgY3RUeXBlOiBudW1iZXI7XG4gIG51aXRGaWVsZEJhc2VkRmxhZzogYm9vbGVhbjtcbiAgY291bnRpbmdUeXBlOiBudW1iZXI7XG4gIGZ1bGxUaW1lc3RhbXBGbGFnOiBib29sZWFuO1xuICBkaXNjb250aW51aXR5RmxhZzogYm9vbGVhbjtcbiAgY250RHJvcHBlZEZsYWc6IGJvb2xlYW47XG4gIG5GcmFtZXM6IG51bWJlcjtcbiAgc2Vjb25kcz86IG51bWJlcjtcbiAgbWludXRlcz86IG51bWJlcjtcbiAgaG91cnM/OiBudW1iZXI7XG4gIHRpbWVPZmZzZXQ/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBQaWN0dXJlVGltaW5nID0ge1xuICBwaWNTdHJ1Y3Q6IHVuZGVmaW5lZCB8IHtcbiAgICBudW1DbG9ja1RTOiBudW1iZXI7XG4gICAgY2xvY2tUaW1lc3RhbXBzOiBBcnJheTx7XG4gICAgICBjbG9ja1RpbWVzdGFtcEZsYWc6IGZhbHNlO1xuICAgIH0gfCB7XG4gICAgICBjbG9ja1RpbWVzdGFtcEZsYWc6IHRydWU7XG4gICAgICBjbG9ja1RpbWVzdGFtcDogQ2xvY2tUaW1lc3RhbXA7XG4gICAgfT47XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaWN0dXJlVGltaW5nUGFyc2VyIHtcbiAgcHVibGljIHBhcnNlKGRhdGE6IFVpbnQ4QXJyYXksIGNvbmZpZzogUGljdHVyZVRpbWluZ1BhcnNpbmdDb25maWcpOiBQaWN0dXJlVGltaW5nIHtcbiAgICBjb25zdCBiaXRzdHJlYW1SZWFkZXIgPSBuZXcgQml0c3RyZWFtUmVhZGVyKEVtdWxhdGlvblByZXZlbnRpb25CeXRlcy5yZW1vdmVFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMoZGF0YSkpO1xuICAgIGNvbnN0IHBpY3R1cmVUaW1pbmc6IFBpY3R1cmVUaW1pbmcgPSB7cGljU3RydWN0OiB1bmRlZmluZWR9O1xuXG4gICAgaWYgKGNvbmZpZy5jcGJEcGJEZWxheXNQcmVzZW50RmxhZykge1xuICAgICAgLy8gV2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBDUEIgYW5kIERQQiBkZWxheXMgYXQgdGhlIG1vbWVudFxuICAgICAgYml0c3RyZWFtUmVhZGVyLnNraXBCaXRzKGNvbmZpZy5jcGJSZW1vdmFsRGVsYXlMZW5ndGhNaW51czEgKyAxKTtcbiAgICAgIGJpdHN0cmVhbVJlYWRlci5za2lwQml0cyhjb25maWcuZHBiT3V0cHV0RGVsYXlMZW5ndGhNaW51czEgKyAxKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnBpY1N0cnVjdFByZXNlbnRGbGFnKSB7XG4gICAgICBjb25zdCBudW1DbG9ja1RTID0gdGhpcy5jb252ZXJ0UGljU3RydWN0VG9OdW1DbG9ja1RTKGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg0KSk7XG5cbiAgICAgIHBpY3R1cmVUaW1pbmcucGljU3RydWN0ID0ge1xuICAgICAgICBudW1DbG9ja1RTLFxuICAgICAgICBjbG9ja1RpbWVzdGFtcHM6IFtdXG4gICAgICB9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpY3R1cmVUaW1pbmcucGljU3RydWN0Lm51bUNsb2NrVFM7IGkrKykge1xuICAgICAgICBjb25zdCBjbG9ja1RpbWVzdGFtcEZsYWcgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDE7XG5cbiAgICAgICAgaWYgKGNsb2NrVGltZXN0YW1wRmxhZykge1xuICAgICAgICAgIGNvbnN0IGNsb2NrVGltZXN0YW1wOiBDbG9ja1RpbWVzdGFtcCA9IHtcbiAgICAgICAgICAgIGN0VHlwZTogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDIpLFxuICAgICAgICAgICAgbnVpdEZpZWxkQmFzZWRGbGFnOiBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDEsXG4gICAgICAgICAgICBjb3VudGluZ1R5cGU6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg1KSxcbiAgICAgICAgICAgIGZ1bGxUaW1lc3RhbXBGbGFnOiBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDEsXG4gICAgICAgICAgICBkaXNjb250aW51aXR5RmxhZzogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxLFxuICAgICAgICAgICAgY250RHJvcHBlZEZsYWc6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMSxcbiAgICAgICAgICAgIG5GcmFtZXM6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg4KVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoY2xvY2tUaW1lc3RhbXAuZnVsbFRpbWVzdGFtcEZsYWcpIHtcbiAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wLnNlY29uZHMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNik7XG4gICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5taW51dGVzID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDYpO1xuICAgICAgICAgICAgY2xvY2tUaW1lc3RhbXAuaG91cnMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZHNGbGFnID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxO1xuXG4gICAgICAgICAgICBpZiAoc2Vjb25kc0ZsYWcpIHtcbiAgICAgICAgICAgICAgY2xvY2tUaW1lc3RhbXAuc2Vjb25kcyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg2KTtcblxuICAgICAgICAgICAgICBjb25zdCBtaW51dGVzRmxhZyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMTtcblxuICAgICAgICAgICAgICBpZiAobWludXRlc0ZsYWcpIHtcbiAgICAgICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5taW51dGVzID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDYpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaG91cnNGbGFnID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzRmxhZykge1xuICAgICAgICAgICAgICAgICAgY2xvY2tUaW1lc3RhbXAuaG91cnMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2xvY2tUaW1lc3RhbXAudGltZU9mZnNldCA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygyNCk7XG5cbiAgICAgICAgICBwaWN0dXJlVGltaW5nLnBpY1N0cnVjdC5jbG9ja1RpbWVzdGFtcHMucHVzaCh7XG4gICAgICAgICAgICBjbG9ja1RpbWVzdGFtcEZsYWcsXG4gICAgICAgICAgICBjbG9ja1RpbWVzdGFtcFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBpY3R1cmVUaW1pbmcucGljU3RydWN0LmNsb2NrVGltZXN0YW1wcy5wdXNoKHtjbG9ja1RpbWVzdGFtcEZsYWc6IGZhbHNlfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGljdHVyZVRpbWluZztcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFBpY1N0cnVjdFRvTnVtQ2xvY2tUUyhwaWNTdHJ1Y3Q6IG51bWJlcik6IG51bWJlciB7XG4gICAgc3dpdGNoIChwaWNTdHJ1Y3QpIHtcbiAgICAgIGNhc2UgUGljU3RydWN0LlByb2dyZXNzaXZlRnJhbWU6XG4gICAgICBjYXNlIFBpY1N0cnVjdC5Ub3BGaWVsZDpcbiAgICAgIGNhc2UgUGljU3RydWN0LkJvdHRvbUZpZWxkOlxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGNhc2UgUGljU3RydWN0LlRvcEZpZWxkQm90dG9tRmllbGQ6XG4gICAgICBjYXNlIFBpY1N0cnVjdC5Cb3R0b21GaWVsZFRvcEZpZWxkOlxuICAgICAgY2FzZSBQaWNTdHJ1Y3QuRnJhbWVEb3VibGluZzpcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgICBjYXNlIFBpY1N0cnVjdC5Ub3BGaWVsZEJvdHRvbUZpZWxkVG9wRmllbGRSZXBlYXRlZDpcbiAgICAgIGNhc2UgUGljU3RydWN0LkJvdHRvbUZpZWxkVG9wRmllbGRCb3R0b21GaWVsZFJlcGVhdGVkOlxuICAgICAgY2FzZSBQaWNTdHJ1Y3QuRnJhbWVUcmlwbGluZzpcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBVaW50OEFycmF5cyBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9sYW5nL1VpbnQ4QXJyYXlzJztcbmltcG9ydCBBbm5leEJCeXRlU3RyZWFtUGFyc2VyIGZyb20gJy4uL0FubmV4QkJ5dGVTdHJlYW1QYXJzZXInO1xuaW1wb3J0IElWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5LCB7RXh0cmFjdGVkTmFsVW5pdH0gZnJvbSAnLi9JVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjNWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5IGltcGxlbWVudHMgSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdHJ1bmNhdGVkVmNsTmFsVW5pdEJ5dGVMZW5ndGggPSAzMjtcblxuICBwdWJsaWMgZXh0cmFjdFZjbE5hbFVuaXQoY2h1bms6IFVpbnQ4QXJyYXksIG9mZnNldDogbnVtYmVyKTogRXh0cmFjdGVkTmFsVW5pdCB7XG4gICAgY29uc3QgbmV4dFBvdGVudGlhbDRCeXRlU3RhcnRDb2RlSW5kZXggPSBvZmZzZXQgKyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjRCeXRlU3RhcnRDb2RlLmJ5dGVMZW5ndGggKyBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneS5fdHJ1bmNhdGVkVmNsTmFsVW5pdEJ5dGVMZW5ndGg7XG5cbiAgICBpZiAoVWludDhBcnJheXMuaXNEYXRhQXRPZmZzZXRUYXJnZXRCeXRlU2VxdWVuY2UoQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEI0Qnl0ZVN0YXJ0Q29kZSwgY2h1bmssIG5leHRQb3RlbnRpYWw0Qnl0ZVN0YXJ0Q29kZUluZGV4KSkge1xuICAgICAgcmV0dXJuIHtuYWxVbml0RGF0YTogY2h1bmsuc3ViYXJyYXkob2Zmc2V0ICsgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEI0Qnl0ZVN0YXJ0Q29kZS5ieXRlTGVuZ3RoLCBuZXh0UG90ZW50aWFsNEJ5dGVTdGFydENvZGVJbmRleCl9O1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRQb3RlbnRpYWwzQnl0ZVN0YXJ0Q29kZUluZGV4ID0gb2Zmc2V0ICsgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEIzQnl0ZVN0YXJ0Q29kZS5ieXRlTGVuZ3RoICsgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kuX3RydW5jYXRlZFZjbE5hbFVuaXRCeXRlTGVuZ3RoO1xuXG4gICAgaWYgKFVpbnQ4QXJyYXlzLmlzRGF0YUF0T2Zmc2V0VGFyZ2V0Qnl0ZVNlcXVlbmNlKEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuYW5uZXhCM0J5dGVTdGFydENvZGUsIGNodW5rLCBuZXh0UG90ZW50aWFsM0J5dGVTdGFydENvZGVJbmRleCkpIHtcbiAgICAgIHJldHVybiB7bmFsVW5pdERhdGE6IGNodW5rLnN1YmFycmF5KG9mZnNldCArIEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuYW5uZXhCM0J5dGVTdGFydENvZGUuYnl0ZUxlbmd0aCwgbmV4dFBvdGVudGlhbDNCeXRlU3RhcnRDb2RlSW5kZXgpfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge25hbFVuaXREYXRhOiBjaHVuay5zdWJhcnJheShvZmZzZXQpfTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIgZnJvbSAnLi4vQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcic7XG5pbXBvcnQgSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3ksIHtFeHRyYWN0ZWROYWxVbml0fSBmcm9tICcuL0lWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmFuaWxsYVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kgaW1wbGVtZW50cyBJVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSB7XG4gIHB1YmxpYyBleHRyYWN0VmNsTmFsVW5pdChjaHVuazogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIpOiBFeHRyYWN0ZWROYWxVbml0IHtcbiAgICBjb25zdCBuZXh0QW5uZXhCU3RhcnRDb2RlSW5kZXggPSBBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmZpbmRBbm5leEJTdGFydEluZGV4RnJvbU9mZnNldChjaHVuaywgb2Zmc2V0LCBjaHVuay5ieXRlTGVuZ3RoKTtcblxuICAgIHJldHVybiB7bmFsVW5pdERhdGE6IGNodW5rLnN1YmFycmF5KG9mZnNldCwgbmV4dEFubmV4QlN0YXJ0Q29kZUluZGV4KX07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEV2ZW50UHVibGlzaGVyIGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50UHVibGlzaGVyJztcbmltcG9ydCBIMjY0Qml0c3RyZWFtIGZyb20gJy4uL2NvZGVjL2gyNjQvSDI2NEJpdHN0cmVhbSc7XG5pbXBvcnQgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlciBmcm9tICcuLi9jb2RlYy9oMjY0L3BhcnNlL0FubmV4QkJ5dGVTdHJlYW1QYXJzZXInO1xuaW1wb3J0IFZhbmlsbGFWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5IGZyb20gJy4uL2NvZGVjL2gyNjQvcGFyc2UvdmNsL1ZhbmlsbGFWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5JztcbmltcG9ydCBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSBmcm9tICcuLi9jb2RlYy9oMjY0L3BhcnNlL3ZjbC9QaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSc7XG5pbXBvcnQgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMyBmcm9tICcuLi9lbmNvZGluZy8yMDIzL1BoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMnO1xuaW1wb3J0IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIgZnJvbSAnLi9IMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyJztcbmltcG9ydCBQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlciBmcm9tICcuL1BoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0c3RyZWFtRGVjb2RlcnMge1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIoKTogSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciB7XG4gICAgY29uc3QgZGVjb2RlckV2ZW50UHVibGlzaGVyID0gbmV3IEV2ZW50UHVibGlzaGVyKCk7XG4gICAgY29uc3QgYml0c3RyZWFtID0gbmV3IEgyNjRCaXRzdHJlYW0oZGVjb2RlckV2ZW50UHVibGlzaGVyKTtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcihkZWNvZGVyRXZlbnRQdWJsaXNoZXIsIG5ldyBWYW5pbGxhVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSgpKTtcblxuICAgIHJldHVybiBuZXcgSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcihkZWNvZGVyRXZlbnRQdWJsaXNoZXIsIGJpdHN0cmVhbSwgcGFyc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIoKTogUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIge1xuICAgIGNvbnN0IGRlY29kZXJFdmVudFB1Ymxpc2hlciA9IG5ldyBFdmVudFB1Ymxpc2hlcigpO1xuICAgIGNvbnN0IGJpdHN0cmVhbSA9IG5ldyBIMjY0Qml0c3RyZWFtKGRlY29kZXJFdmVudFB1Ymxpc2hlcik7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIoZGVjb2RlckV2ZW50UHVibGlzaGVyLCBuZXcgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3koKSk7XG4gICAgY29uc3QgaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciA9IG5ldyBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyKGRlY29kZXJFdmVudFB1Ymxpc2hlciwgYml0c3RyZWFtLCBwYXJzZXIpO1xuICAgIGNvbnN0IGVuY29kaW5nID0gbmV3IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMoZGVjb2RlckV2ZW50UHVibGlzaGVyKTtcblxuICAgIHJldHVybiBuZXcgUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIoaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciwgZW5jb2RpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JpdHN0cmVhbURlY29kZXJzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IEV2ZW50UHVibGlzaGVyIGZyb20gJy4uLy4uL2V2ZW50L0V2ZW50UHVibGlzaGVyJztcbmltcG9ydCBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQgZnJvbSAnLi4vLi4vZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnR9IGZyb20gJy4uLy4uL2V2ZW50L2V2ZW50cy9FbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgSDI2NEJpdHN0cmVhbSBmcm9tICcuLi9jb2RlYy9oMjY0L0gyNjRCaXRzdHJlYW0nO1xuaW1wb3J0IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIgZnJvbSAnLi4vY29kZWMvaDI2NC9wYXJzZS9Bbm5leEJCeXRlU3RyZWFtUGFyc2VyJztcbmltcG9ydCBJQml0c3RyZWFtRGVjb2RlciBmcm9tICcuL0lCaXRzdHJlYW1EZWNvZGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciBpbXBsZW1lbnRzIElCaXRzdHJlYW1EZWNvZGVyPEgyNjRCaXRzdHJlYW0+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9iaXRzdHJlYW06IEgyNjRCaXRzdHJlYW07XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhcnNlcjogQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgY29uc3RydWN0b3IoZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyLCBiaXRzdHJlYW06IEgyNjRCaXRzdHJlYW0sIHBhcnNlcjogQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcikge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyID0gZXZlbnRQdWJsaXNoZXI7XG4gICAgdGhpcy5fYml0c3RyZWFtID0gYml0c3RyZWFtO1xuICAgIHRoaXMuX3BhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYml0c3RyZWFtKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fcGFyc2VyKTtcbiAgfVxuXG4gIGdldCBiaXRzdHJlYW0oKTogSDI2NEJpdHN0cmVhbSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpdHN0cmVhbTtcbiAgfVxuXG4gIHB1YmxpYyBkZWNvZGUoZW5jb2RlZE1lZGlhU3RyZWFtQ2h1bms6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxVaW50OEFycmF5Pik6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyLnB1Ymxpc2g8VWludDhBcnJheT4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmssIGVuY29kZWRNZWRpYVN0cmVhbUNodW5rKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxufSIsImltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50IGZyb20gJy4uLy4uL2V2ZW50L0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgSDI2NEJpdHN0cmVhbSBmcm9tICcuLi9jb2RlYy9oMjY0L0gyNjRCaXRzdHJlYW0nO1xuaW1wb3J0IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMgZnJvbSAnLi4vZW5jb2RpbmcvMjAyMy9QaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzJztcbmltcG9ydCBJc29CbWZmU2VnbWVudCBmcm9tICcuLi9jb250YWluZXIvaXNvYm1mZi9zZWdtZW50L0lzb0JtZmZTZWdtZW50JztcbmltcG9ydCBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIGZyb20gJy4vSDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlcic7XG5pbXBvcnQgSUJpdHN0cmVhbURlY29kZXIgZnJvbSAnLi9JQml0c3RyZWFtRGVjb2Rlcic7XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIgaW1wbGVtZW50cyBJQml0c3RyZWFtRGVjb2RlcjxIMjY0Qml0c3RyZWFtPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXI6IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuY29kaW5nOiBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG5cbiAgY29uc3RydWN0b3IoaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcjogSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciwgZW5jb2Rpbmc6IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMpIHtcbiAgICB0aGlzLl9oMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyID0gaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcjtcbiAgICB0aGlzLl9lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9lbmNvZGluZyk7XG4gIH1cblxuICBnZXQgYml0c3RyZWFtKCk6IEgyNjRCaXRzdHJlYW0ge1xuICAgIHJldHVybiB0aGlzLl9oMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyLmJpdHN0cmVhbTtcbiAgfVxuXG4gIHB1YmxpYyBkZWNvZGUoZW5jb2RlZE1lZGlhU3RyZWFtQ2h1bms6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxVaW50OEFycmF5Pik6IHZvaWQge1xuICAgIHRoaXMuX2gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIuZGVjb2RlKGVuY29kZWRNZWRpYVN0cmVhbUNodW5rKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmVUb0VtYmVkZGVkRGF0YShvbkRlY29kZWRNZWRpYUNodW5rOiAoZW1iZWRkZWREYXRhRXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxJc29CbWZmU2VnbWVudD4pID0+IHZvaWQsIHRyYWNrSWQ/OiBzdHJpbmcpOiBEaXNwb3NhYmxlIHtcbiAgICBpZiAodHJhY2tJZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2VuY29kaW5nLnN1YnNjcmliZVRvRW1iZWRkZWREYXRhKGRlY29kZWRNZWRpYUNodW5rRXZlbnQgPT4ge1xuICAgICAgICBpZiAoZGVjb2RlZE1lZGlhQ2h1bmtFdmVudC50cmFja0lkID09PSB0cmFja0lkKSB7XG4gICAgICAgICAgb25EZWNvZGVkTWVkaWFDaHVuayhkZWNvZGVkTWVkaWFDaHVua0V2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kaW5nLnN1YnNjcmliZVRvRW1iZWRkZWREYXRhKG9uRGVjb2RlZE1lZGlhQ2h1bmspO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi8uLi8uLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vLi4vLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBOYWxVbml0VHlwZSBmcm9tICcuLi8uLi9jb2RlYy9oMjY0L25hbFVuaXQvTmFsVW5pdFR5cGUnO1xuaW1wb3J0IE5hbFVuaXQgZnJvbSAnLi4vLi4vY29kZWMvaDI2NC9uYWxVbml0L05hbFVuaXQnO1xuaW1wb3J0IElzb0JtZmZTZWdtZW50IGZyb20gJy4uLy4uL2NvbnRhaW5lci9pc29ibWZmL3NlZ21lbnQvSXNvQm1mZlNlZ21lbnQnO1xuaW1wb3J0IEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZCBmcm9tICcuLi8uLi9FbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQnO1xuaW1wb3J0IEV2ZW50UHVibGlzaGVyIGZyb20gJy4uLy4uLy4uL2V2ZW50L0V2ZW50UHVibGlzaGVyJztcbmltcG9ydCBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQsIHtFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHR9IGZyb20gJy4uLy4uLy4uL2V2ZW50L0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50fSBmcm9tICcuLi8uLi8uLi9ldmVudC9ldmVudHMvRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuXG5jb25zdCBub29wID0gKCkgPT4gdW5kZWZpbmVkO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RydW5jYXRlZFZjbE5hbFVuaXREYXRhQnl0ZUxlbmd0aCA9IDMyO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGhlbml4VmNsRW1iZWRkZWREYXRhVXVpZCA9ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGhlbml4SW5pdGlhbGl6YXRpb25TZWdtZW50VXVpZCA9ICc1MTFlMjJiZC0zNGMwLTRjZWUtYjZjMy0zYzRkNDA3NjIyYzcnO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMycpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4cGVjdGVkUGF5bG9hZFV1aWQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbmRPZkNodW5rSGFuZGxlcnNCeVRyYWNrSWQ6IE1hcDxzdHJpbmcsICh0cmFja0lkOiBzdHJpbmcpID0+IHZvaWQ+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5hYmxlV2FybmluZ0xvZ1doZW5WY2xFbWJlZGRlZERhdGFOb3RGb3VuZDogRGlzcG9zYWJsZSA9IG5ldyBEaXNwb3NhYmxlKHRoaXMuZW5hYmxlV2FybmluZ0xvZ1doZW5WY2xFbWJlZGRlZERhdGFOb3RGb3VuZC5iaW5kKHRoaXMpKTtcblxuICBjb25zdHJ1Y3RvcihldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXIpIHtcbiAgICB0aGlzLl9ldmVudFB1Ymxpc2hlciA9IGV2ZW50UHVibGlzaGVyO1xuICAgIHRoaXMuX2V4cGVjdGVkUGF5bG9hZFV1aWQuYWRkKFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMuX3BoZW5peFZjbEVtYmVkZGVkRGF0YVV1aWQpO1xuICAgIHRoaXMuX2V4cGVjdGVkUGF5bG9hZFV1aWQuYWRkKFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMuX3BoZW5peEluaXRpYWxpemF0aW9uU2VnbWVudFV1aWQpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLnN1YnNjcmliZVRvUGF5bG9hZEV2ZW50cygpKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5zdWJzY3JpYmVUb1BheWxvYWRTdWJzY3JpcHRpb25FdmVudHMoKSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuc3Vic2NyaWJlVG9OYWxVbml0RXZlbnRzKCkpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvRW1iZWRkZWREYXRhKGhhbmRsZXI6IChldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PElzb0JtZmZTZWdtZW50PikgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICAgIHRoaXMuX2VuYWJsZVdhcm5pbmdMb2dXaGVuVmNsRW1iZWRkZWREYXRhTm90Rm91bmQuZGlzcG9zZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWQsICh7Y29udGV4dCwgZGF0YTogcGF5bG9hZH0pID0+IHtcbiAgICAgIHN3aXRjaCAocGF5bG9hZC51dWlkKSB7XG4gICAgICAgIGNhc2UgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy5fcGhlbml4SW5pdGlhbGl6YXRpb25TZWdtZW50VXVpZDpcbiAgICAgICAgICBoYW5kbGVyKHtcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdJbml0aWFsaXphdGlvbicsXG4gICAgICAgICAgICAgIGRhdGE6IHBheWxvYWQuZGF0YVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl9waGVuaXhWY2xFbWJlZGRlZERhdGFVdWlkOlxuICAgICAgICAgIGhhbmRsZXIoe1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ01lZGlhJyxcbiAgICAgICAgICAgICAgZGF0YTogcGF5bG9hZC5kYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2VuZE9mQ2h1bmtIYW5kbGVyc0J5VHJhY2tJZC5jbGVhcigpO1xuICAgIHRoaXMuX2V4cGVjdGVkUGF5bG9hZFV1aWQuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlV2FybmluZ0xvZ1doZW5WY2xFbWJlZGRlZERhdGFOb3RGb3VuZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5zdWJzY3JpYmVUb0VuY29kZWRWaWRlb1N0cmVhbUNodW5rRXZlbnRzKCkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLnN1YnNjcmliZVRvRW5kT2ZDaHVua0V2ZW50cygpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9QYXlsb2FkU3Vic2NyaXB0aW9uRXZlbnRzKCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8c3RyaW5nPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5QYXlsb2FkU3Vic2NyaXB0aW9uLCAoe2RhdGE6IHBheWxvYWRVdWlkfSkgPT4gdGhpcy5fZXhwZWN0ZWRQYXlsb2FkVXVpZC5hZGQocGF5bG9hZFV1aWQpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9FbmNvZGVkVmlkZW9TdHJlYW1DaHVua0V2ZW50cygpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPFVpbnQ4QXJyYXk+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LkVuY29kZWRWaWRlb1N0cmVhbUNodW5rLCB0aGlzLmFybUxvZ2dpbmdOb1ZjbEVtYmVkZGVkRGF0YUZvdW5kLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb05hbFVuaXRFdmVudHMoKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxOYWxVbml0PihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5OYWxVbml0LCB0aGlzLmhhbmRsZU5hbFVuaXRFdmVudC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTmFsVW5pdEV2ZW50KHtjb250ZXh0LCBkYXRhOiBuYWxVbml0fTogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PE5hbFVuaXQ+KTogdm9pZCB7XG4gICAgaWYgKG5hbFVuaXQudHlwZSA+IE5hbFVuaXRUeXBlLlNsaWNlTGF5ZXJJZHJEYXRhIHx8IG5hbFVuaXQuZGF0YS5ieXRlTGVuZ3RoIDwgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy5fdHJ1bmNhdGVkVmNsTmFsVW5pdERhdGFCeXRlTGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wdWJsaXNoVmNsRW1iZWRkZWRQYXlsb2FkKGNvbnRleHQsIHtcbiAgICAgIHV1aWQ6IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMuX3BoZW5peFZjbEVtYmVkZGVkRGF0YVV1aWQsXG4gICAgICBkYXRhOiB0aGlzLmV4dHJhY3RWY2xFbWJlZGRlZERhdGEobmFsVW5pdClcbiAgICB9KTtcbiAgICB0aGlzLmRpc2FybUxvZ2dpbmdOb1ZjbEVtYmVkZGVkRGF0YUZvdW5kKGNvbnRleHQudHJhY2tJZCk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RWY2xFbWJlZGRlZERhdGEobmFsVW5pdDogTmFsVW5pdCk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiBuYWxVbml0LmRhdGEuc3ViYXJyYXkoUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy5fdHJ1bmNhdGVkVmNsTmFsVW5pdERhdGFCeXRlTGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVibGlzaFZjbEVtYmVkZGVkUGF5bG9hZChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHBheWxvYWQ6IEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZCk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyLnB1Ymxpc2g8RW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5QYXlsb2FkLCB7XG4gICAgICBjb250ZXh0LFxuICAgICAgZGF0YTogcGF5bG9hZFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcm1Mb2dnaW5nTm9WY2xFbWJlZGRlZERhdGFGb3VuZCh7Y29udGV4dH06IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxVaW50OEFycmF5Pik6IHZvaWQge1xuICAgIHRoaXMuX2VuZE9mQ2h1bmtIYW5kbGVyc0J5VHJhY2tJZC5zZXQoY29udGV4dC50cmFja0lkLCB0aGlzLmxvZ1dhcm5pbmdWY2xFbWJlZGRlZERhdGFOb3RGb3VuZC5iaW5kKHRoaXMsIGNvbnRleHQudHJhY2tJZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNhcm1Mb2dnaW5nTm9WY2xFbWJlZGRlZERhdGFGb3VuZCh0cmFja0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9lbmRPZkNodW5rSGFuZGxlcnNCeVRyYWNrSWQuc2V0KHRyYWNrSWQsIG5vb3ApO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2dXYXJuaW5nVmNsRW1iZWRkZWREYXRhTm90Rm91bmQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0KTogdm9pZCB7XG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gWyVzXSBObyBWQ0wgZW1iZWRkZWQgZGF0YSBmb3VuZCBpbiBhbiBlbmNvZGVkIHZpZGVvIHN0cmVhbSBjaHVuayBmcm9tIHRyYWNrIHdpdGggaWQgWyVzXScsIGNvbnRleHQuc3RyZWFtSWQsIGNvbnRleHQuY29udGV4dElkLCBjb250ZXh0LnRyYWNrSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0VuZE9mQ2h1bmtFdmVudHMoKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxudWxsPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5FbmRPZkNodW5rLCB0aGlzLmhhbmRsZUVuZE9mRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmsuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVuZE9mRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmsoe2NvbnRleHR9OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8bnVsbD4pOiB2b2lkIHtcbiAgICBjb25zdCBlbmRPZkNodW5rRXZlbnRIYW5kbGVyID0gdGhpcy5fZW5kT2ZDaHVua0hhbmRsZXJzQnlUcmFja0lkLmdldChjb250ZXh0LnRyYWNrSWQpIGFzICgpID0+IHZvaWQ7XG5cbiAgICBlbmRPZkNodW5rRXZlbnRIYW5kbGVyKCk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvUGF5bG9hZEV2ZW50cygpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZCwgdGhpcy5oYW5kbGVQYXlsb2FkRXZlbnQuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBheWxvYWRFdmVudCh7Y29udGV4dCwgZGF0YTogcGF5bG9hZH06IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KSB7XG4gICAgaWYgKCF0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmhhcyhwYXlsb2FkLnV1aWQpKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCh0aGlzLmxvZ1dhcm5pbmdVbmV4cGVjdGVkUGF5bG9hZFV1aWRSZWNlaXZlZE9uY2UuYmluZCh0aGlzLCBjb250ZXh0LCBwYXlsb2FkLnV1aWQpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvZ1dhcm5pbmdVbmV4cGVjdGVkUGF5bG9hZFV1aWRSZWNlaXZlZE9uY2UoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBwYXlsb2FkVXVpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gWyVzXSBbJXNdIFJlY2VpdmVkIHVuZXhwZWN0ZWQgcGF5bG9hZCB3aXRoIHV1aWQgWyVzXScsIGNvbnRleHQuc3RyZWFtSWQsIGNvbnRleHQuY29udGV4dElkLCBjb250ZXh0LnRyYWNrSWQsIHBheWxvYWRVdWlkKTtcbiAgICB0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmFkZChwYXlsb2FkVXVpZCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCwge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YX0gZnJvbSAnLi9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRFbWl0dGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBTZXQ8KGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPikgPT4gdm9pZD4gPSBuZXcgU2V0KCk7XG5cbiAgcHVibGljIHN1YnNjcmliZTxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGxpc3RlbmVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLmFkZChsaXN0ZW5lciBhcyA8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pID0+IHZvaWQpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlKCgpID0+IHRoaXMuX2xpc3RlbmVycy5kZWxldGUobGlzdGVuZXIgYXMgPEV2ZW50RGF0YSBleHRlbmRzIEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YT4oZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KSA9PiB2b2lkKSk7XG4gIH1cblxuICBwdWJsaWMgZW1pdDxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8RXZlbnREYXRhPik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICBsaXN0ZW5lcihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLmNsZWFyKCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCwge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YX0gZnJvbSAnLi9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnLi9FdmVudEVtaXR0ZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudFB1Ymxpc2hlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50RW1pdHRlcnM6IE1hcDxzdHJpbmcgfCBudW1iZXIsIEV2ZW50RW1pdHRlcj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcnM6IFNldDw8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudFR5cGU6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KSA9PiB2b2lkPiA9IG5ldyBTZXQoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgcHVibGljIG9uRXZlbnRXaXRoTm9TdWJzY3JpYmVyKG9uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcjogKGV2ZW50VHlwZTogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fb25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVycy5hZGQob25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVyKTtcblxuICAgIHJldHVybiBuZXcgRGlzcG9zYWJsZSgoKSA9PiB0aGlzLl9vbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXJzLmRlbGV0ZShvbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXIpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmU8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudFR5cGU6IHN0cmluZyB8IG51bWJlciwgaGFuZGxlcjogKGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8RXZlbnREYXRhPikgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICAgIGNvbnN0IGVtaXR0ZXIgPSB0aGlzLl9ldmVudEVtaXR0ZXJzLmdldChldmVudFR5cGUpIHx8IHRoaXMuY3JlYXRlRW1pdHRlcihldmVudFR5cGUpO1xuICAgIGNvbnN0IGRpc3Bvc2FibGVMaXN0ZW5lciA9IGVtaXR0ZXIuc3Vic2NyaWJlKGhhbmRsZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKGRpc3Bvc2FibGVMaXN0ZW5lcik7XG5cbiAgICByZXR1cm4gZGlzcG9zYWJsZUxpc3RlbmVyO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2g8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudFR5cGU6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KTogdm9pZCB7XG4gICAgY29uc3QgZW1pdHRlciA9IHRoaXMuX2V2ZW50RW1pdHRlcnMuZ2V0KGV2ZW50VHlwZSk7XG5cbiAgICBpZiAoIWVtaXR0ZXIpIHtcbiAgICAgIHRoaXMuX29uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IGhhbmRsZXIoZXZlbnRUeXBlLCBldmVudCkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZW1pdHRlci5lbWl0PEV2ZW50RGF0YT4oZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwUmVzb3VyY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50RW1pdHRlcnMuY2xlYXIoKTtcbiAgICB0aGlzLl9vbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXJzLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVtaXR0ZXIoZXZlbnRUeXBlOiBzdHJpbmcgfCBudW1iZXIpOiBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0IGVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICB0aGlzLl9ldmVudEVtaXR0ZXJzLnNldChldmVudFR5cGUsIGVtaXR0ZXIpO1xuXG4gICAgcmV0dXJuIGVtaXR0ZXI7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQge1xuICBFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayA9IDAsXG4gIE5hbFVuaXQsXG4gIFNlaVBheWxvYWQsXG4gIFBheWxvYWQsXG4gIFBheWxvYWRTdWJzY3JpcHRpb24sXG4gIEVuZE9mQ2h1bmtcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdERpc2NvdmVyeVVyaSA9ICdodHRwczovL3BjYXN0LnBoZW5peHJ0cy5jb20vcGNhc3QvZW5kUG9pbnRzJztcblxuZXhwb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVNb2RlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZU1vZGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSk6IEJpdHJhdGVNb2RlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlTW9kZSkge1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Ob3JtYWw6XG4gICAgICAgIHJldHVybiAnTm9ybWFsJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuRm9yY2U6XG4gICAgICAgIHJldHVybiAnRm9yY2UnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlTW9kZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVTdGF0ZSwgQml0cmF0ZVN0YXRlVHlwZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQml0cmF0ZVN0YXRlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlKTogQml0cmF0ZVN0YXRlVHlwZSB7XG4gICAgc3dpdGNoIChiaXRyYXRlU3RhdGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLktlZXA6XG4gICAgICAgIHJldHVybiAnS2VlcCc7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5SZXNldDpcbiAgICAgICAgcmV0dXJuICdSZXNldCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShiaXRyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBEaXNjb3ZlcnlTZXJ2aWNlIGZyb20gJy4vRGlzY292ZXJ5U2VydmljZSc7XG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5cbmNvbnN0IGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwgPSA2MDAwMDtcblxuaW50ZXJmYWNlIElQZXJVUklFbmRwb2ludCB7IFt4OiBzdHJpbmddOiBQcm9taXNlPEVuZFBvaW50PiB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZTogSVBlclVSSUVuZHBvaW50ID0ge307XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmkgPSBuZXcgR2xvYmFsU2NvcGUuVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmk6IFVSTCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIHJldHVybiBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuXG4gICAgY29uc3QgZGlzY292ZXJ5U2VydmljZSA9IG5ldyBEaXNjb3ZlcnlTZXJ2aWNlKHVyaSk7XG4gICAgY29uc3QgY2FjaGVkVmFsdWUgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPSBkaXNjb3ZlcnlTZXJ2aWNlLmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KCk7XG4gICAgY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9PT0gY2FjaGVkVmFsdWUpIHtcbiAgICAgICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgICAgICB9XG4gICAgICB9LCBkaXNjb3ZlcnlDYWNoZUludGVydmFsKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaTogVVJMKTogdm9pZCB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdKSB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbmNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkucHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgRW5kUG9pbnQgZnJvbSAnLi9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5cbmNvbnN0IGRlZmF1bHRUaW1lb3V0ID0gMjAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVNlcnZpY2Uge1xuICBwcml2YXRlIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRGlzY292ZXJ5Jyk7XG4gIHByaXZhdGUgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfdXJpOiBVUkw7XG5cbiAgY29uc3RydWN0b3IodXJpOiBVUkwpIHtcbiAgICBpZiAoIXVyaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgcmVxdWlyZXMgdXJpJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZSh1cmkudG9TdHJpbmcoKSk7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJOZWFyYnlFbmRQb2ludHModXJpOiBVUkwsIHRpbWVvdXQ6IG51bWJlcik6IFByb21pc2U8RW5kUG9pbnRbXT4ge1xuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgcmVxdWlyZXMgdGltZW91dCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIEdsb2JhbFNjb3BlLmZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4oKF8sIHJlamVjdCkgPT4gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKGBEaXNjb3ZlcnkgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aW1lb3V0KSlcbiAgICBdKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgd2l0aCBubyBkYXRhIFske3VybH1dYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXNTdHJpbmcuc3BsaXQoJywnKTtcblxuICAgIHJldHVybiBlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IG5ldyBFbmRQb2ludChlbmRQb2ludCwgdGltZW91dCkpO1xuICB9XG5cbiAgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQodGltZW91dDogbnVtYmVyID0gZGVmYXVsdFRpbWVvdXQpOiBQcm9taXNlPEVuZFBvaW50PiB7XG4gICAgY29uc3QgdXJsID0gRGlzY292ZXJ5VXJpLmJ1aWxkRGlzY292ZXJ5VXJsKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgZW5kUG9pbnRzID0gYXdhaXQgdGhpcy5kaXNjb3Zlck5lYXJieUVuZFBvaW50cyhuZXcgR2xvYmFsU2NvcGUuVVJMKHVybCksIHRpbWVvdXQpO1xuICAgIGxldCBmYWlsZWRSZXF1ZXN0cyA9IDA7XG4gICAgY29uc3QgcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQgPSAoKTogUHJvbWlzZTx2b2lkPiA9PiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoZmFpbGVkUmVxdWVzdHMgPj0gZW5kUG9pbnRzLmxlbmd0aCkge1xuICAgICAgICByZWplY3QoYERpc2NvdmVyeSBvZiBbJHtlbmRQb2ludHMubGVuZ3RofV0gZW5kcG9pbnRzIGZyb20gWyR7dXJsfV0gZmFpbGVkLCBwcmV2ZW50aW5nIGl0IGZyb20gY29tcGxldGluZ2ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gYXdhaXQgUHJvbWlzZS5yYWNlKGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gZW5kUG9pbnRcbiAgICAgIC5waW5nKClcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBwaW5nIGVuZCBwb2ludCBbJXNdJywgZW5kUG9pbnQsIGUpO1xuXG4gICAgICAgIGZhaWxlZFJlcXVlc3RzKys7XG5cbiAgICAgICAgcmV0dXJuIHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkKCk7XG4gICAgICB9KVxuICAgICAgLnRoZW4odGltZSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyZWQgZW5kIHBvaW50IFslc10gd2l0aCB0aW1lIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpLCB0aW1lKTtcbiAgICAgICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgICAgICBydW50aW1lOiAobm93IC0gU0RLLnBhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lIHx8IDB9LFxuICAgICAgICAgIHJlc291cmNlOiBlbmRQb2ludC50b1N0cmluZygpLFxuICAgICAgICAgIGtpbmQ6ICdwaW5nJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQ7XG4gICAgICB9KSkpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcbmltcG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX0gZnJvbSAnLi4vZGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXNjb3ZlcnlVcmkge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZGlzY292ZXJ5VXJpOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KGRlZmF1bHREaXNjb3ZlcnlVcmkpO1xuXG4gIHN0YXRpYyBnZXQgdXJpKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeVVyaS5fZGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkRGlzY292ZXJ5VXJsKHVyaTogVVJMKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgR2xvYmFsU2NvcGUuVVJMKHVyaS50b1N0cmluZygpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcbiAgICBjb25zdCBpbnRlbnRpb25zID0gUGFyYW1ldGVycy5kaXNjb3ZlcnlQYXJhbWV0ZXJzLmludGVudGlvbnM7XG5cbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgndmVyc2lvbicsIHNka1ZlcnNpb24pO1xuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdpbnRlbnRpb25zJywgaW50ZW50aW9ucyk7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ18nLCBgJHtEYXRlLm5vdygpfWApO1xuXG4gICAgaWYgKHVybC5wYXRobmFtZSA9PT0gJy8nKSB7XG4gICAgICB1cmwucGF0aG5hbWUgPSAnL3BjYXN0L2VuZFBvaW50cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeVVyaSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmltcG9ydCB7XG4gIElTdWJzY3JpYmVSZXNwb25zZSxcbiAgSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QsXG4gIElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0XG59IGZyb20gJy4uL2FwaS9TdWJzY3JpYmUnO1xuaW1wb3J0IHtJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0LCBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZX0gZnJvbSAnLi4vYXBpL1NldFJlbW90ZURlc2NyaXB0aW9uJztcbmltcG9ydCB7SURlc3Ryb3lTdHJlYW1SZXF1ZXN0LCBJRGVzdHJveVN0cmVhbVJlc3BvbnNlfSBmcm9tICcuLi9hcGkvRGVzdHJveVN0cmVhbSc7XG5pbXBvcnQge0lBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCwgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZX0gZnJvbSAnLi4vYXBpL0FkZEljZUNhbmRpZGF0ZXMnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvUGFyYW1ldGVycyc7XG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlU3RhdGUsIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBCaXRyYXRlTW9kZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlTW9kZU1hcHBpbmcnO1xuaW1wb3J0IEJpdHJhdGVTdGF0ZU1hcHBpbmcgZnJvbSAnLi9CaXRyYXRlU3RhdGVNYXBwaW5nJztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCB7XG4gIElQdWJsaXNoUmVzcG9uc2UsXG4gIElQdWJsaXNoV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVB1Ymxpc2hXaXRob3V0T2ZmZXJSZXF1ZXN0LFxuICBQdWJsaXNoU3RhdHVzXG59IGZyb20gJy4uL2FwaS9QdWJsaXNoJztcblxuY29uc3QgYXBpVmVyc2lvbiA9IDc7XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmliZVN0YXR1cyA9ICdvaycgfCAnbm8tc3RyZWFtJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAnZ2VvLXJlc3RyaWN0ZWQnIHwgJ2dlby1ibG9ja2VkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmb3JiaWRkZW4tdGFnJyB8ICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIFJlbW92ZVRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCB0eXBlIEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgRGVzdHJveVN0cmVhbVN0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgaW50ZXJmYWNlIElTdHJlYW0ge1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBzaGFyZWRTZWNyZXQ6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdWJzY3JpYmVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFN1YnNjcmliZVN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge1xuICBzdGF0dXM6IFB1Ymxpc2hTdGF0dXM7XG4gIHN0cmVhbT86IElTdHJlYW07XG4gIGxhZz86IE1pbGxpc2Vjb25kO1xuICBydGNDb25maWd1cmF0aW9uPzogUlRDQ29uZmlndXJhdGlvbjtcbiAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG4gIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xufTtcblxuaW50ZXJmYWNlIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXM7XG4gIHNlc3Npb25EZXNjcmlwdGlvbj86IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG59XG5cbmludGVyZmFjZSBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cztcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cztcbn1cblxuaW50ZXJmYWNlIElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRQb2ludCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFbmRQb2ludCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF9yb3VuZFRyaXBUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodXJpOiBzdHJpbmcsIHRpbWVvdXQ6IG51bWJlcikge1xuICAgIHRoaXMuX3VyaSA9IHVyaTtcbiAgICB0aGlzLl90aW1lb3V0ID0gdGltZW91dDtcblxuICAgIGlmICghdGltZW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbmQgcG9pbnQgcmVxdWlyZXMgYSB0aW1lb3V0YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBFbmRQb2ludFt1cmk9JHt0aGlzLl91cml9XWA7XG4gIH1cblxuICBhc3luYyBwaW5nKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFBpbmdVcmwoKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgR2xvYmFsU2NvcGUuZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYFBpbmcgdGltZWQgb3V0IFske3VybH1dYCkpLCB0aGlzLl90aW1lb3V0KSlcbiAgICBdKTtcbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7IC8qIEhhbmRsZSAqL1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQaW5nIGZhaWxlZCBbJHt1cmx9XSBbJHtyZXNwb25zZS5zdGF0dXN9XWApO1xuICAgIH1cblxuICAgIHRoaXMuX3JvdW5kVHJpcFRpbWUgPSBmaW5pc2hlZCAtIHN0YXJ0O1xuXG4gICAgcmV0dXJuIHRoaXMuX3JvdW5kVHJpcFRpbWU7XG4gIH1cblxuICBhc3luYyBzdWJzY3JpYmUodG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHRlbmFuY3kgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS50ZW5hbmN5O1xuXG4gICAgaWYgKCF0ZW5hbmN5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ3VuYXV0aG9yaXplZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3RlbmFuY3ksICdzdHJlYW0nLCAnc3Vic2NyaWJlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElTdWJzY3JpYmVXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIG5ldyBFcnJvcihgU3Vic2NyaWJlIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dCkpXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIEdsb2JhbFNjb3BlLmNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU3Vic2NyaWJlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzdWJzY3JpYmUgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgcHVibGlzaChuYW1lOiBzdHJpbmcsIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdwdWJsaXNoJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElQdWJsaXNoV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVB1Ymxpc2hXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHB1Ymxpc2gnLCBuZXcgRXJyb3IoYFB1Ymxpc2ggdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogUHVibGlzaFN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBwdWJsaXNoIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHN1YnNjcmliZVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKHN0cmVhbTogSVN0cmVhbSwgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc2NyaXB0aW9uJywgJ3JlbW90ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgdHlwZTogc2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgIHNkcDogc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIG5ldyBFcnJvcihgU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdHb3Qgc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgbGltaXRCaXRyYXRlKFxuICAgIHN0cmVhbTogSVN0cmVhbSxcbiAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcixcbiAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBCaXRzUGVyU2Vjb25kLFxuICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlLFxuICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZSxcbiAgKTogUHJvbWlzZTxJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2JpdHJhdGUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlKSxcbiAgICAgIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZU1hcHBpbmcuY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGUpXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBHbG9iYWxTY29wZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIG5ldyBFcnJvcihgU2V0IGxpbWl0IGJpdHJhdGUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3Qgc2V0IGxpbWl0IGJpdHJhdGUgcmVzcG9uc2UgWyVzXSBpbiBbJXNdIG1zJywgc3RhdHVzLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiB7c3RhdHVzfTtcbiAgfVxuXG4gIGFzeW5jIGFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtOiBJU3RyZWFtLCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSwgZGlzY292ZXJ5Q29tcGxldGVkOiBib29sZWFuLCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnaWNlJywgJ2NhbmRpZGF0ZXMnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBjYW5kaWRhdGVzLFxuICAgICAgZGlzY292ZXJ5Q29tcGxldGVkLFxuICAgICAgb3B0aW9uc1xuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgbmV3IEVycm9yKGBBZGQgaWNlIGNhbmRpZGF0ZXMgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYWRkIGljZSBjYW5kaWRhdGVzJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGFkZCBJQ0UgY2FuZGlkYXRlcyByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW0oc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBEZWxldGUgc3RyZWFtIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dCkpXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIEdsb2JhbFNjb3BlLmNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzdHJlYW0nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgZGVzdHJveSBzdHJlYW0gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgZGVzdHJveVN0cmVhbVJlc3BvbnNlLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95U3RyZWFtT25Vbm1vdW50KHN0cmVhbTogSVN0cmVhbSwgcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5hdmlnYXRvcj8uc2VuZEJlYWNvbikge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuZGVzdHJveVN0cmVhbShzdHJlYW0sIHJlYXNvbik7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdkZXN0cm95J10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJRGVzdHJveVN0cmVhbVJlcXVlc3QgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgcmVhc29uLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIG5hdmlnYXRvci5zZW5kQmVhY29uKHVybCwgZm9ybURhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFVybChwYXRoOiBzdHJpbmdbXSk6IFVSTCB7XG4gICAgY29uc3QgdXJpID0gbmV3IEdsb2JhbFNjb3BlLlVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHBhdGhBc0FycmF5ID0gdXJpLnBhdGhuYW1lLnNwbGl0KCcvJyk7XG5cbiAgICBwYXRoQXNBcnJheS5sZW5ndGggPSBwYXRoQXNBcnJheS5sZW5ndGggLSAxO1xuXG4gICAgdXJpLnBhdGhuYW1lID0gcGF0aEFzQXJyYXkuY29uY2F0KC4uLnBhdGgpLmpvaW4oJy8nKTtcblxuICAgIHJldHVybiB1cmk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUGluZ1VybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBHbG9iYWxTY29wZS5VUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBzZGtWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcbiAgICBjb25zdCBpbnRlbnRpb25zID0gUGFyYW1ldGVycy5kaXNjb3ZlcnlQYXJhbWV0ZXJzLmludGVudGlvbnM7XG5cbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgndHlwZScsICdodHRwJyk7XG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ3ZlcnNpb24nLCBzZGtWZXJzaW9uKTtcbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgnaW50ZW50aW9ucycsIGludGVudGlvbnMpO1xuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCdfJywgYCR7RGF0ZS5ub3coKX1gKTtcblxuICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBQdWJsaXNoU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwNjpcbiAgICAgICAgcmV0dXJuICdtaXNzaW5nLWNoYW5uZWwtb3Itcm9vbS1pZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNDA5OlxuICAgICAgICByZXR1cm4gJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJztcbiAgICAgIGNhc2UgNDE1OlxuICAgICAgICByZXR1cm4gJ2ZvcmJpZGRlbi10YWcnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTdWJzY3JpYmVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA0MDk6XG4gICAgICAgIHJldHVybiAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnO1xuICAgICAgY2FzZSA0MTU6XG4gICAgICAgIHJldHVybiAnZm9yYmlkZGVuLXRhZyc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9BZGRJY2VDYW5kaWRhdGVzU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogRGVzdHJveVN0cmVhbVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTdWJzY3JpYmVSZXNwb25zZTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZTogSVN1YnNjcmliZVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2UubGFnID0gZGF0YS5sYWc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJzY3JpYmVSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJUHVibGlzaFJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVB1Ymxpc2hSZXNwb25zZTtcbiAgICBjb25zdCBwdWJsaXNoUmVzcG9uc2U6IElQdWJsaXNoUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcHVibGlzaFJlc3BvbnNlLnN0cmVhbSA9IHtcbiAgICAgIHRlbmFuY3ksXG4gICAgICBzdHJlYW1JZDogZGF0YS5zdHJlYW1JZCxcbiAgICAgIHNoYXJlZFNlY3JldDogZGF0YS5zaGFyZWRTZWNyZXRcbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHB1Ymxpc2hSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0ge2ljZVNlcnZlcnM6IFtdfTtcblxuICAgIGlmIChjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kgPSBjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID0gY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzKSB7XG4gICAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpY2VTZXJ2ZXJzLnB1c2goe1xuICAgICAgICAgIHVybHM6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzLFxuICAgICAgICAgIHVzZXJuYW1lOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXNlcm5hbWUsXG4gICAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSA9IGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5O1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSA9IGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeTtcbiAgICB9XG5cbiAgICByZXR1cm4gcnRjQ29uZmlndXJhdGlvbjtcbiAgfVxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U6IElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiA9IGRhdGEuc2Vzc2lvbkRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgICBjb25zdCBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U6IElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0ID0ge1xuICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1cyxcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5vcHRpb25zKSB7XG4gICAgICAgIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZS5vcHRpb25zID0gZGF0YS5vcHRpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJRGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW06IElEZXN0cm95U3RyZWFtUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9GcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCc7XG5pbXBvcnQgU2VpUGF5bG9hZCBmcm9tICcuLi9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvbmFsVW5pdC9TZWlQYXlsb2FkJztcbmltcG9ydCBTZWlQYXlsb2FkVHlwZSBmcm9tICcuLi9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvbmFsVW5pdC9TZWlQYXlsb2FkVHlwZSc7XG5pbXBvcnQgUGljdHVyZVRpbWluZ1BhcnNlciwge1BpY3R1cmVUaW1pbmdQYXJzaW5nQ29uZmlnfSBmcm9tICcuLi9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvUGljdHVyZVRpbWluZ1BhcnNlcic7XG5pbXBvcnQgQml0c3RyZWFtRGVjb2RlcnMgZnJvbSAnLi4vZGVjb2RlL2JpdHN0cmVhbS9kZWNvZGVycy9CaXRzdHJlYW1EZWNvZGVycyc7XG5pbXBvcnQgSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciBmcm9tICcuLi9kZWNvZGUvYml0c3RyZWFtL2RlY29kZXJzL0gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXInO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCBmcm9tICcuLi9kZWNvZGUvZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCB7RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb259IGZyb20gJy4vRnJhbWVUaW1pbmdJbmZvcm1hdGlvbic7XG5cbnR5cGUgRnJhbWVUaW1pbmcgPSB7XG4gIG1pZDogc3RyaW5nO1xuICB0cmFja0lkOiBzdHJpbmc7XG4gIHJlY2VpdmVUaW1lc3RhbXA6IERhdGU7XG4gIGRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uPzogRGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb247XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIMjY0RnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BWF9GUkFNRV9USU1JTkdfRU5UUklFUyA9IDYwICogMzA7IC8vIDMwcyAqIDYwZnBzID0gMTgwMCBlbnRyaWVzXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDogRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JpdHN0cmVhbURlY29kZXI6IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIgPSBCaXRzdHJlYW1EZWNvZGVycy5jcmVhdGVIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wOiBNYXA8c3RyaW5nLCBGcmFtZVRpbWluZz4gPSBuZXcgTWFwKCk7XG4gIC8vIFdvcmtzIHdpdGggbXVsdGktYml0cmF0ZSBzdHJlYW1zIGFzIHdlIGFyZSBpbiBjb250cm9sIG9mIGhvdyB3ZSBnZW5lcmF0ZSB0aGUgcGljdHVyZSB0aW1pbmcgU0VJIHBheWxvYWRzXG4gIC8vIE1pZ2h0IG5vdCBhbHdheXMgd29yayB3aXRoIHNpbmdsZS1iaXRyYXRlIHN0cmVhbXMgd2hlbiB0aGUgY3BiRHBiRGVsYXlzUHJlc2VudEZsYWcgaXMgdHJ1ZVxuICAvLyBUT0RPIChOSCk6IE1vbml0b3IgU1BTIHRvIGR5bmFtaWNhbGx5IHNldCB0aGVzZSBmbGFnc1xuICBwcml2YXRlIHJlYWRvbmx5IF9waWN0dXJpbmdUaW1pbmdQYXJzaW5nQ29uZmlnOiBQaWN0dXJlVGltaW5nUGFyc2luZ0NvbmZpZyA9IHtcbiAgICBjcGJEcGJEZWxheXNQcmVzZW50RmxhZzogZmFsc2UsXG4gICAgcGljU3RydWN0UHJlc2VudEZsYWc6IHRydWVcbiAgfTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGljdHVyZVRpbWluZ1BhcnNlcjogUGljdHVyZVRpbWluZ1BhcnNlciA9IG5ldyBQaWN0dXJlVGltaW5nUGFyc2VyKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9jdXJyZW50UGxheWJhY2tTdGF0ZTogJ3BsYXlpbmcnIHwgJ3BhdXNlZCcgfCAnc3RhbGxlZCcgfCAnZW5kZWQnIHwgJ2Vycm9yJyB8ICd3YWl0aW5nJyA9ICd3YWl0aW5nJztcbiAgcHJpdmF0ZSBfYXJtZWRWaWRlb0ZyYW1lQ2FsbGJhY2tJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9kaXNwb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQsIGZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0OiBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCkge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0ID0gY2hhbm5lbENvbnRleHQ7XG4gICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgPSBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9iaXRzdHJlYW1EZWNvZGVyKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuY2xlYXIoKSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcyk7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLnNldHVwVmlkZW9FdmVudExpc3RlbmVycyh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQuc3Vic2NyaWJlKHZpZGVvRWxlbWVudCA9PiB7XG4gICAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zZXR1cFZpZGVvRXZlbnRMaXN0ZW5lcnModmlkZW9FbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICBpZiAodGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlKSB7XG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYml0c3RyZWFtRGVjb2Rlci5iaXRzdHJlYW0uc3Vic2NyaWJlVG9TZWlQYXlsb2FkVHlwZShTZWlQYXlsb2FkVHlwZS5QaWN0dXJlVGltaW5nLCB0aGlzLm9uUGljdHVyZVRpbWluZ0V4dHJhY3RlZC5iaW5kKHRoaXMpKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByb2Nlc3NGcmFtZShzdHJlYW1JZDogc3RyaW5nLCBtaWQ6IHN0cmluZywgdHJhY2tJZDogc3RyaW5nLCBmcmFtZTogUlRDRW5jb2RlZFZpZGVvRnJhbWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmcmFtZVRpbWluZyA9IHtcbiAgICAgIG1pZCxcbiAgICAgIHRyYWNrSWQsXG4gICAgICByZWNlaXZlVGltZXN0YW1wOiBuZXcgRGF0ZSgpXG4gICAgfTtcblxuICAgIHRoaXMucmVtb3ZlRnJhbWVUaW1pbmdzRXhjZWVkaW5nTWF4Q2FwYWNpdHkoKTtcblxuICAgIGNvbnN0IHJ0cFRpbWVzdGFtcCA9IGZyYW1lLnRpbWVzdGFtcC50b1N0cmluZygxMCk7XG5cbiAgICBpZiAodGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuaGFzKHJ0cFRpbWVzdGFtcCkpIHtcbiAgICAgIC8vIFRPRE8gKE5IKTogQWRkIGEgdGhyb3R0bGVkIGxvZyBpbmRpY2F0aW5nIHRoYXQgYSBmcmFtZSB0aW1pbmcgd2FzIG92ZXJ3cml0dGVuXG4gICAgfVxuXG4gICAgdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuc2V0KHJ0cFRpbWVzdGFtcCwgZnJhbWVUaW1pbmcpO1xuXG4gICAgLy8gVE9ETyAoTkgpOiBUaGF0IHNob3VsZCBiZSBkb25lIHdpdGhpbiBhIFdvcmtlclxuICAgIC8vIE5vdCBwb3NzaWJsZSB5ZXQgYmVjYXVzZSBpdCB3b24ndCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHNpbmsgYW5kIHRyYW5zZm9ybSBwaXBlbGluZSAod2UgY2Fubm90IGR5bmFtaWNhbGx5IGluamVjdCBjb2RlIGluIGEgd29ya2VyKVxuICAgIC8vIFdlIG5lZWQgdG8gcmVmaW5lIHRoZSBhcmNoaXRlY3R1cmUgdG8gbWFrZSBpdCBwb3NzaWJsZVxuICAgIHRoaXMuX2JpdHN0cmVhbURlY29kZXIuZGVjb2RlKHtcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgIHRyYWNrSWQsXG4gICAgICAgIGNvbnRleHRJZDogcnRwVGltZXN0YW1wXG4gICAgICB9LFxuICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkoZnJhbWUuZGF0YSlcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIG9uUGljdHVyZVRpbWluZ0V4dHJhY3RlZCh7Y29udGV4dDoge2NvbnRleHRJZDogcnRwVGltZXN0YW1wLCB0cmFja0lkfSwgZGF0YTogc2VpUGF5bG9hZH06IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxTZWlQYXlsb2FkPik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBpY3R1cmVUaW1pbmcgPSB0aGlzLl9waWN0dXJlVGltaW5nUGFyc2VyLnBhcnNlKHNlaVBheWxvYWQuZGF0YSwgdGhpcy5fcGljdHVyaW5nVGltaW5nUGFyc2luZ0NvbmZpZyk7XG4gICAgY29uc3QgY2xvY2tUaW1lc3RhbXAgPSBwaWN0dXJlVGltaW5nLnBpY1N0cnVjdD8uY2xvY2tUaW1lc3RhbXBzLmZpbmQoaSA9PiBpLmNsb2NrVGltZXN0YW1wRmxhZyA9PT0gdHJ1ZSk/LmNsb2NrVGltZXN0YW1wO1xuXG4gICAgaWYgKCFjbG9ja1RpbWVzdGFtcCkge1xuICAgICAgLy8gVE9ETyAoTkgpOiBBZGQgYSB0aHJvdHRsZWQgbG9nIGluZGljYXRpbmcgdGhhdCBubyBjbG9jayB0aW1lc3RhbXAgd2FzIGZvdW5kXG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmcmFtZVRpbWluZyA9IHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLmdldChydHBUaW1lc3RhbXApO1xuXG4gICAgaWYgKCFmcmFtZVRpbWluZykge1xuICAgICAgLy8gVE9ETyAoTkgpOiBBZGQgYSB0aHJvdHRsZWQgbG9nIGluZGljYXRpbmcgdGhhdCBubyBmcmFtZSB0aW1pbmcgd2FzIGZvdW5kXG4gICAgICAvLyBFeHBlY3RlZCBpZiB0aGUgY2lyY3VsYXIgZnJhbWUgdGltaW5ncyBidWZmZXIgaXMgZnVsbCBhbmQgYSBmcmFtZSBoYXMgYmVlbiBkcm9wcGVkXG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjogRGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSB7XG4gICAgICBtaWQ6IGZyYW1lVGltaW5nLm1pZCxcbiAgICAgIHRyYWNrSWQsXG4gICAgICBraW5kOiAndmlkZW8nLFxuICAgICAgY29kZWM6ICdIMjY0JyxcbiAgICAgIHRpbWVjb2RlOiB7XG4gICAgICAgIGhvdXJzOiBjbG9ja1RpbWVzdGFtcC5ob3VycyA/PyBudWxsLFxuICAgICAgICBtaW51dGVzOiBjbG9ja1RpbWVzdGFtcC5taW51dGVzID8/IG51bGwsXG4gICAgICAgIHNlY29uZHM6IGNsb2NrVGltZXN0YW1wLnNlY29uZHMgPz8gbnVsbCxcbiAgICAgICAgZnJhbWVzOiBjbG9ja1RpbWVzdGFtcC5uRnJhbWVzLFxuICAgICAgICBpc0ZyYW1lRHJvcDogY2xvY2tUaW1lc3RhbXAuY291bnRpbmdUeXBlID4gMVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVRpbWVzdGFtcDogbnVsbCxcbiAgICAgIGluZ2VzdFRpbWVzdGFtcDogbnVsbCxcbiAgICAgIGVuY29kZVRpbWVzdGFtcDogbnVsbCxcbiAgICAgIHRyYW5zY29kZVRpbWVzdGFtcDogbnVsbCxcbiAgICAgIHJlY2VpdmVUaW1lc3RhbXA6IG5ldyBEYXRlKGZyYW1lVGltaW5nLnJlY2VpdmVUaW1lc3RhbXApLFxuICAgICAgcGxheWJhY2tTdGF0ZTogdGhpcy5fY3VycmVudFBsYXliYWNrU3RhdGVcbiAgICB9O1xuXG4gICAgZnJhbWVUaW1pbmcuZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSBkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjtcblxuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LmRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uLnZhbHVlID0gZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb247XG4gIH1cblxuICBwcml2YXRlIHZpZGVvRnJhbWVDYWxsYmFjayhub3c6IERPTUhpZ2hSZXNUaW1lU3RhbXAsIG1ldGFkYXRhOiBWaWRlb0ZyYW1lQ2FsbGJhY2tNZXRhZGF0YSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlLXJlZ2lzdGVyIHRoZSBjYWxsYmFjayB0byBlbnN1cmUgaXQncyBjYWxsZWQgYWdhaW5cbiAgICB0aGlzLmFybVZpZGVvRnJhbWVDYWxsYmFjaygpO1xuXG4gICAgY29uc3QgcnRwVGltZXN0YW1wID0gbWV0YWRhdGEucnRwVGltZXN0YW1wO1xuXG4gICAgaWYgKCFydHBUaW1lc3RhbXApIHtcbiAgICAgIC8vIFRPRE8gKE5IKTogQWRkIGEgdGhyb3R0bGVkIGxvZyBpbmRpY2F0aW5nIHRoYXQgbm8gUlRQIHRpbWVzdGFtcCB3YXMgZm91bmRcbiAgICAgIC8vIFRoZSBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBpdCdzIG51bGxhYmxlLCBidXQgd2UgYWx3YXlzIGhhdmUgaXQgaW4gYSBXZWJSVEMgY29udGV4dFxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGltZXN0YW1wc1RvRGVsZXRlOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbdGltZXN0YW1wLCBmcmFtZVRpbWluZ10gb2YgdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXApIHtcbiAgICAgIGlmIChwYXJzZUludCh0aW1lc3RhbXAsIDEwKSA+IHJ0cFRpbWVzdGFtcCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID09PSAncGxheWluZycpIHtcbiAgICAgICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQucmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uLnZhbHVlID0ge1xuICAgICAgICAgIC4uLmZyYW1lVGltaW5nLmRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uISxcbiAgICAgICAgICByZW5kZXJUaW1lc3RhbXA6IG5ldyBEYXRlKHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBub3cpLFxuICAgICAgICAgIHBsYXliYWNrU3RhdGU6ICdwbGF5aW5nJ1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aW1lc3RhbXBzVG9EZWxldGUucHVzaCh0aW1lc3RhbXApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGltZXN0YW1wIG9mIHRpbWVzdGFtcHNUb0RlbGV0ZSkge1xuICAgICAgdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuZGVsZXRlKHRpbWVzdGFtcCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVGcmFtZVRpbWluZ3NFeGNlZWRpbmdNYXhDYXBhY2l0eSgpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50c1RvRGVsZXRlID0gdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuc2l6ZSAtIChIMjY0RnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIuTUFYX0ZSQU1FX1RJTUlOR19FTlRSSUVTIC0gMSk7XG5cbiAgICBpZiAoZWxlbWVudHNUb0RlbGV0ZSA8PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLl9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcC5rZXlzKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzVG9EZWxldGU7IGkrKykge1xuICAgICAgY29uc3Qga2V5VG9EZWxldGUgPSBpdGVyYXRvci5uZXh0KCkudmFsdWU7XG5cbiAgICAgIHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLmRlbGV0ZShrZXlUb0RlbGV0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFZpZGVvRXZlbnRMaXN0ZW5lcnModmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3Qgb25QbGF5aW5nID0gKCkgPT4gdGhpcy5fY3VycmVudFBsYXliYWNrU3RhdGUgPSAncGxheWluZyc7XG5cbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIG9uUGxheWluZyk7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHZpZGVvRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgb25QbGF5aW5nKSkpO1xuXG4gICAgY29uc3Qgb25QYXVzZSA9ICgpID0+IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID0gJ3BhdXNlZCc7XG5cbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCBvblBhdXNlKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdmlkZW9FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgb25QYXVzZSkpKTtcblxuICAgIGNvbnN0IG9uU3RhbGxlZCA9ICgpID0+IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID0gJ3N0YWxsZWQnO1xuXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCBvblN0YWxsZWQpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB2aWRlb0VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIG9uU3RhbGxlZCkpKTtcblxuICAgIGNvbnN0IG9uV2FpdGluZyA9ICgpID0+IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID0gJ3dhaXRpbmcnO1xuXG4gICAgdmlkZW9FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3dhaXRpbmcnLCBvbldhaXRpbmcpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB2aWRlb0VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2FpdGluZycsIG9uV2FpdGluZykpKTtcblxuICAgIGNvbnN0IG9uRW5kZWQgPSAoKSA9PiB0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9ICdlbmRlZCc7XG5cbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBvbkVuZGVkKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdmlkZW9FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgb25FbmRlZCkpKTtcblxuICAgIGNvbnN0IG9uRXJyb3IgPSAoKSA9PiB0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9ICdlcnJvcic7XG5cbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdmlkZW9FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcikpKTtcblxuICAgIHRoaXMuYXJtVmlkZW9GcmFtZUNhbGxiYWNrKCk7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9hcm1lZFZpZGVvRnJhbWVDYWxsYmFja0lkKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZT8uY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrKHRoaXMuX2FybWVkVmlkZW9GcmFtZUNhbGxiYWNrSWQpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXJtVmlkZW9GcmFtZUNhbGxiYWNrKCk6IHZvaWQge1xuICAgIHRoaXMuX2FybWVkVmlkZW9GcmFtZUNhbGxiYWNrSWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU/LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2sodGhpcy52aWRlb0ZyYW1lQ2FsbGJhY2suYmluZCh0aGlzKSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ30gZnJvbSAnLi9DaHVua2VkU3RyZWFtaW5nJztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcbmltcG9ydCBDaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlIGZyb20gJy4vQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENodW5rZWRTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NodW5rZWRTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlOiBDaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfc3RyZWFtU3RhdGlzdGljczogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIHByaXZhdGUgX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBjaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlOiBDaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlLCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9jaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlID0gY2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZTtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IElEaXNwb3NhYmxlPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSlcbiAgICAgIC50aGVuKGVuZFBvaW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZmVyU2RwID0gY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgb3JpZ2luU3RhcnRUaW1lOiBEYXRlLm5vdygpIC0gbGFnICsgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDIsXG4gICAgICAgICAgbGFnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcuc3RhcnQodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgb2ZmZXJTZHAsIG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4ocGxheWVyID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuXG4gICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQocGxheWVyKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBsYXllcjtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2h1bmtlZFN0cmVhbWluZyBmYWlsZWQnLCBlKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbW9uaXRvcihwbGF5ZXI6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHRpbWVvdXQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0cmVhbVN0YXRpc3RpY3MgPSBDaHVua2VkU3RyZWFtaW5nLmdldFN0YXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl9jaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlID09PSBDaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlLkxpdmVcbiAgICAgICAgICAmJiBuZXdTdHJlYW1TdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9PT0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgICAgICAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuY3VycmVudFRpbWUgPT09IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kdXJhdGlvblxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcbiAgICAgICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgZW5kIG9mIHN0cmVhbScsIGUpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MgJiZcbiAgICAgICAgIXRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiZcbiAgICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmN1cnJlbnRUaW1lICYmXG4gICAgICAgICAgKHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID49IG5ld1N0cmVhbVN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkIHx8ICFuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZClcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50Kys7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPiA0KSB7XG4gICAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHBsYXllci5kaXNwb3NlKCk7XG4gICAgICAgICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzID0gbmV3U3RyZWFtU3RhdGlzdGljcztcblxuICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG4gICAgfSwgMTAwMCk7XG5cbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIEdsb2JhbFNjb3BlLmNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB9KSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUge1xuICAgIExpdmUgPSAxLFxuICAgIE9uZERlbWFuZCA9IDJcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgV2ViUGxheWVyIGZyb20gJy4vV2ViUGxheWVyJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBTaGFrYVBsYXllciBmcm9tICcuL1NoYWthUGxheWVyJztcbmltcG9ydCBIbHNQbGF5ZXIgZnJvbSAnLi9IbHNQbGF5ZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3MsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDaHVua2VkU3RyZWFtaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BlbmRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc1BsYXllcjogSGxzUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BoZW5peFdlYlBsYXllcjogV2ViUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthOiBTaGFrYVR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBzdGF0aWMgX3BsYXllcjogU2hha2FQbGF5ZXIgfCBXZWJQbGF5ZXIgfCBIbHNQbGF5ZXI7XG5cbiAgc3RhdGljIGdldCBobHNQbGF5ZXIoKTogSGxzUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc1BsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGhlbml4V2ViUGxheWVyKCk6IFdlYlBsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9waGVuaXhXZWJQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthKCk6IFNoYWthVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHN0YXJ0KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyIHx8IHRoaXMuX3NoYWthIHx8IHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkLWZlYXR1cmUsIGFkZCBzdHJlYW0gcGxheWVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKFNESy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLmhsc0pzTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5faGxzUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsud2ViUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fcGhlbml4V2ViUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5zaGFrYVBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3NoYWthID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHBsYXkoUGxheWVyOiB0eXBlb2YgV2ViUGxheWVyIHwgdHlwZW9mIFNoYWthUGxheWVyIHwgdHlwZW9mIEhsc1BsYXllciwgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucyk6IFByb21pc2U8SURpc3Bvc2FibGU+IHtcbiAgICBjb25zdCBkYXNoTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tcGRcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgaGxzTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tM3U4XFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IG1hbmlmZXN0VXJsID0gZGFzaE1hbmlmZXN0VXJsTWF0Y2ggJiYgZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gPyBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuICAgIGNvbnN0IHBsYXlsaXN0VXJsID0gaGxzTWFuaWZlc3RVcmxNYXRjaCAmJiBobHNNYW5pZmVzdFVybE1hdGNoWzFdID8gaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuXG4gICAgaWYgKHBsYXlsaXN0VXJsKSB7XG4gICAgICBpZiAoIXRoaXMuX3BoZW5peFdlYlBsYXllciB8fCBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHMpIHtcbiAgICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdobHMnLCBzdHJlYW1JZCwgcGxheWxpc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hbmlmZXN0VXJsKSB7XG4gICAgICBpZiAoIXRoaXMuX2hsc1BsYXllciAmJiAhKHRoaXMuX3BoZW5peFdlYlBsYXllciAmJiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHMpKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnZGFzaCcsIHN0cmVhbUlkLCBtYW5pZmVzdFVybCwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWFuaWZlc3RVcmwgfHwgcGxheWxpc3RVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWyR7c3RyZWFtSWR9XSBDYW5ub3QgcGxheSBbJHtwbGF5bGlzdFVybCA/ICdITFMnIDogJ0RBU0gnfV0gc3RyZWFtIHdpdGggaW5jbHVkZWQgcGxheWVyYCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBzdHJlYW0gcGxheWxpc3QgZm91bmQnKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGxvYWRlZCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgaWYgKCF0aGlzLl9zaGFrYSAmJiAhdGhpcy5fcGhlbml4V2ViUGxheWVyICYmICF0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KEhsc1BsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoV2ViUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NoYWthKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFNoYWthUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge0lIbHNQbGF5ZXJUeXBlfSBmcm9tICcuL0lIbHNQbGF5ZXInO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIbHNQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSUhsc1BsYXllclR5cGU7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIpIHtcbiAgICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllcih7XG4gICAgICAgICAgZW5hYmxlV29ya2VyOiB0cnVlLFxuICAgICAgICAgIG1heEJ1ZmZlckxlbmd0aDogMSxcbiAgICAgICAgICBiYWNrQnVmZmVyTGVuZ3RoOiAwLFxuICAgICAgICAgIGxpdmVTeW5jRHVyYXRpb246IDcsXG4gICAgICAgICAgbGl2ZUR1cmF0aW9uSW5maW5pdHk6IHRydWUsXG4gICAgICAgICAgbGl2ZU1heExhdGVuY3lEdXJhdGlvbjogSW5maW5pdHksXG4gICAgICAgICAgaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kOiAxXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9wbGF5ZXIubG9hZFNvdXJjZSh0aGlzLl9tYW5pZmVzdFVSSSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5hdHRhY2hNZWRpYSh0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuY2FuUGxheVR5cGUoJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsJykpIHtcbiAgICAgICAgdGhpcy5fdmlkZW9FbGVtZW50LnNyYyA9IHRoaXMuX21hbmlmZXN0VVJJO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllciAmJiBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMC4wLFxuICAgICAgICBsYWc6IDAuMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgd2lkdGg6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldEhlaWdodCxcbiAgICAgIGN1cnJlbnRUaW1lOiB0aGlzLl9wbGF5ZXIubWVkaWEuY3VycmVudFRpbWUsXG4gICAgICBsYWc6IDAuMCxcbiAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZSxcbiAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgfTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0lETEUnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VSUk9SJyB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VOREVEJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdMT0FESU5HJykgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ1dBSVRJTkcnKSkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIChjdXJyZW50VGltZSArICh0aGlzLl9vcHRpb25zLmxhZyAvIDEwMDApKSAtIHRydWVDdXJyZW50VGltZSk7XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllciAmJiB0aGlzLl9wbGF5ZXIuZGVzdHJveSkge1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gTmV0d29ya1N0YXRlcyB7XG4gIE5ldHdvcmtFbXB0eSxcbiAgTmV0d29ya0lkbGUsXG4gIE5ldHdvcmtMb2FkaW5nLFxuICBOZXR3b3JrTm9Tb3VyY2Vcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQnO1xuaW1wb3J0IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQnO1xuaW1wb3J0IEgyNjRGcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlciBmcm9tICcuLi9mcmFtZVRpbWluZy9IMjY0RnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXInO1xuaW1wb3J0IEluc2VydGFibGVTdHJlYW1zIGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0luc2VydGFibGVTdHJlYW1zJztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi4vLi4vcnRjL1NkcFBhcnNlcic7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ6IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ6IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCA9IHN0cmVhbVRyYW5zZm9ybUNvbnRleHQ7XG4gICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgPSBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZCh0aGlzKTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXAsIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVxdWlyZXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZVxuICAgICAgfHwgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlXG4gICAgICB8fCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZXN0YW1wcy52YWx1ZTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoJ3JlY3Zvbmx5JywgcmVxdWlyZXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpXG4gICAgICAgIC50aGVuKCh7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259KSA9PiB7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9jYWxPZmZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICBdKVxuICAgICAgLnRoZW4oKFtlbmRQb2ludCwge2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufV0pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHBlZXIgY29ubmVjdGlvbiBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tpbmcnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICduZXcnOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZGlzY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICAgICAgICAgICAgaWYgKEdsb2JhbFNjb3BlLm5hdmlnYXRvcklzT25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcblxuICAgICAgICAgICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG1lZGlhU3RyZWFtUHJvbWlzZSA9IG5ldyBQcm9taXNlPE1lZGlhU3RyZWFtPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQub25UcmFja0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpLCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9udHJhY2sgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlcXVpcmVzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24gPSBuZXcgU2RwUGFyc2VyKHBlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVycyA9IHBlZXJDb25uZWN0aW9uLmdldFJlY2VpdmVycygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHtkaXNwb3NhYmxlcywgZW5jb2RlZFZpZGVvRnJhbWV9ID0gSW5zZXJ0YWJsZVN0cmVhbXMuY29uZmlndXJlRW5jb2RlZFN0cmVhbVBpcGVsaW5lKG1lZGlhU3RyZWFtLCByZWNlaXZlcnMsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luaywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rLCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi52aWRlb0NvZGVjLCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi5hdWRpb0NvZGVjKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1aXJlc0ZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi52aWRlb0NvZGVjLnRvVXBwZXJDYXNlKCkgPT09ICdIMjY0J1xuICAgICAgICAgICAgICAgICAgJiYgKHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lY29kZS52YWx1ZSB8fCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZXN0YW1wcy52YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlciA9IG5ldyBIMjY0RnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIodGhpcy5fY2hhbm5lbENvbnRleHQsIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKGZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyKTtcblxuICAgICAgICAgICAgICAgICAgbWVkaWFTdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gQm90aCBhcmUgZXhwZWN0ZWQgdG8gYmUgcHJlc2VudCwgYnV0IHRoZSB0eXBlIHN5c3RlbSBtYWtlcyB0aGVtIG51bGxhYmxlLCBzbyB3ZSBoYXZlIHRvIGFzc2VydCB0aGUgcHJlc2VuY2VcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlciA9IHJlY2VpdmVycy5maWx0ZXIocmVjZWl2ZXIgPT4gcmVjZWl2ZXIudHJhY2sgPT09IHRyYWNrKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBQbGF0Zm9ybSBzdXBwb3J0aW5nIGZyYW1lIHRpbWluZyBpbmZvcm1hdGlvbiBzaG91bGQgYWxzbyBzdXBwb3J0IGdldFRyYW5zY2VpdmVyc1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pZCA9IHBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0VHJhbnNjZWl2ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHBlZXJDb25uZWN0aW9uLmdldFRyYW5zY2VpdmVycygpLmZpbHRlcih0cmFuc2NlaXZlciA9PiB0cmFuc2NlaXZlci5yZWNlaXZlciA9PT0gcmVjZWl2ZXIpWzBdPy5taWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIFNraXBwaW5nIGZyYW1lIHRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdHJhY2sgWyVzXSBiZWNhdXNlIG5vIHJlY2VpdmVyIHdhcyBmb3VuZCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCB0cmFjay5pZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gU2tpcHBpbmcgZnJhbWUgdGltaW5nIGluZm9ybWF0aW9uIGZvciB0cmFjayBbJXNdIGJlY2F1c2Ugbm8gbWlkIHdhcyBmb3VuZCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCB0cmFjay5pZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQoZW5jb2RlZFZpZGVvRnJhbWUuc3Vic2NyaWJlKGVuY29kZWRWaWRlb0ZyYW1lID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmNvZGVkVmlkZW9GcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlci5wcm9jZXNzRnJhbWUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIG1pZCwgZW5jb2RlZFZpZGVvRnJhbWUudHJhY2suaWQsIGVuY29kZWRWaWRlb0ZyYW1lLmNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuaXNFbmFibGVkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKGRpc3Bvc2FibGVzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3RyYW5zZm9ybWVkU3RyZWFtLCBkaXNwb3NhYmxlc30gPSBJbnNlcnRhYmxlU3RyZWFtcy5jb25maWd1cmVJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24obWVkaWFTdHJlYW0sIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChkaXNwb3NhYmxlcyk7XG4gICAgICAgICAgICAgICAgbWVkaWFTdHJlYW0gPSB0cmFuc2Zvcm1lZFN0cmVhbTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG1lZGlhU3RyZWFtO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yID0gbmV3IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKHBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbSwgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDQpO1xuXG4gICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChydGNDb25uZWN0aW9uTW9uaXRvcik7XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3JTdGF0aXN0aWNTdWJzY3JpcHRpb24gPSBydGNDb25uZWN0aW9uTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiAhdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmF1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb1RyYWNrRmFpbGVkICYmIEdsb2JhbFNjb3BlLm5hdmlnYXRvcklzT25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgR2xvYmFsU2NvcGUubmF2aWdhdG9ySXNPbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIFZpZGVvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIUdsb2JhbFNjb3BlLm5hdmlnYXRvcklzT25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5PZmZsaW5lO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgfHwgYXVkaW9UcmFja0ZhaWxlZCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgcnRjQ29ubmVjdGlvbk1vbml0b3IuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciB0cmFjayBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5SZWNvbm5lY3RpbmcgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5PZmZsaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID8gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgOiBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgc3RhdGUgcmVzdG9yZWQgdG8gWyVzXSBhZnRlciByZWNvbm5lY3RpbmcnLCBDaGFubmVsU3RhdGVbdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWVdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChydGNDb25uZWN0aW9uTW9uaXRvclN0YXRpc3RpY1N1YnNjcmlwdGlvbik7XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5UnRjQ29uZmlndXJhdGlvbihcbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsLFxuICAgIHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIGlmICghb3B0aW9uYWxQZWVyQ29ubmVjdGlvbikge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbiA9IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRydW5jYXRlSWNlU2VydmVycyhydGNDb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuIFNESy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UnRjQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLm9wdGlvbmFsUGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpLFxuICAgICAgLi4ucnRjQ29uZmlndXJhdGlvblxuICAgIH07XG5cbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24obmV3UnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICByZXR1cm4gb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGlmIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIDwgU0RLLm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgfHwgIVNESy5hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAgIGNvbnN0IGlzQ2xpZW50T2ZmZXJGbG93ID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb24/LnR5cGUgPT09ICdvZmZlcic7XG5cbiAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhaXNDbGllbnRPZmZlckZsb3dcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZWNvbm5lY3RpbmcgcGVlciBjb25uZWN0aW9uIGJ5IHJlc3RhcnRpbmcgSUNFJyk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gICAgICBjb25zdCBpZ25vcmVkID0gcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIoe2ljZVJlc3RhcnQ6IHRydWV9KS50aGVuKG9mZmVyID0+IHtcbiAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24ob2ZmZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbicsIGUpO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGFmdGVyIFslc10gYXR0ZW1wdHMsIHBlcmZvcm1pbmcgZnVsbCByZWNvdmVyeScsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgcmV0cnlDYWxsYmFjaygpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ30gZnJvbSAnLi9DaHVua2VkU3RyZWFtaW5nJztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ09wdGlvbnMsIENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxudHlwZSBTaGFrYU9wdGlvbnMgPSB7XG4gIGFicjoge1xuICAgIGRlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogbnVtYmVyO1xuICB9O1xuICBtYW5pZmVzdDoge1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIHN0cmVhbWluZzoge1xuICAgIGxpdmVTeW5jUGFuaWNUaHJlc2hvbGQ6IG51bWJlcjtcbiAgICBidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyQmVoaW5kOiBudW1iZXI7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgICBtYXhBdHRlbXB0czogbnVtYmVyO1xuICAgICAgYmFja29mZkZhY3RvcjogbnVtYmVyO1xuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElTaGFrYSB7XG4gIGNvbmZpZ3VyZTogKG86IFNoYWthT3B0aW9ucykgPT4gdm9pZDtcbiAgbG9hZDogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0czogKCkgPT4gQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gIHVubG9hZDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hha2FQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2hha2FQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yZWRTdGF0aXN0aWNzOiB7XG4gICAgZXN0aW1hdGVkQmFuZHdpZHRoOiBudW1iZXI7XG4gICAgcGxheVRpbWU6IG51bWJlcjtcbiAgfTtcbiAgcHJpdmF0ZSBfcGxheWVyOiBJU2hha2E7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5fbW9uaXRvcmVkU3RhdGlzdGljcyA9IHtcbiAgICAgIGVzdGltYXRlZEJhbmR3aWR0aDogMCxcbiAgICAgIHBsYXlUaW1lOiAwXG4gICAgfTtcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLnNoYWthKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zOiBTaGFrYU9wdGlvbnMgPSB7XG4gICAgICAgIGFicjoge2RlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogMjAwMDAwMH0sXG4gICAgICAgIG1hbmlmZXN0OiB7cmV0cnlQYXJhbWV0ZXJzOiB7dGltZW91dDogMTAwMDB9fSxcbiAgICAgICAgc3RyZWFtaW5nOiB7XG4gICAgICAgICAgbGl2ZVN5bmNQYW5pY1RocmVzaG9sZDogMSxcbiAgICAgICAgICBidWZmZXJpbmdHb2FsOiA2MCxcbiAgICAgICAgICBidWZmZXJCZWhpbmQ6IDMwLFxuICAgICAgICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogMTAsXG4gICAgICAgICAgICBiYWNrb2ZmRmFjdG9yOiAxLjFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLnNoYWthLlBsYXllcih0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgdGhpcy5sb2FkUGxheWVyKHBsYXllck9wdGlvbnMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgICAgbGFnOiAwLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICAuLi50aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKSxcbiAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgbGFnOiAwXG4gICAgfTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gbGFnO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDAgJiYgdGhpcy5fbW9uaXRvcmVkU3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPCBzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDAgJiYgdGhpcy5fbW9uaXRvcmVkU3RhdGlzdGljcy5wbGF5VGltZSA8IHN0YXRpc3RpY3MucGxheVRpbWUpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgdGhpcy5fbW9uaXRvcmVkU3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPSBzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aDtcbiAgICB0aGlzLl9tb25pdG9yZWRTdGF0aXN0aWNzLnBsYXlUaW1lID0gc3RhdGlzdGljcy5wbGF5VGltZTtcblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIudW5sb2FkKCk7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQbGF5ZXIocGxheWVyQ29uZmlnOiBTaGFrYU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuY29uZmlndXJlKHBsYXllckNvbmZpZyk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGxheWVyLmxvYWQodGhpcy5fbWFuaWZlc3RVUkkpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gREFTSCBsaXZlIHN0cmVhbSBoYXMgYmVlbiBsb2FkZWQnLCB0aGlzLl9zdHJlYW1JZCk7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQucGxheSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQucGxheSgpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEVycm9yIHdoaWxlIGxvYWRpbmcgREFTSCBsaXZlIHN0cmVhbSBbJXNdJywgdGhpcy5fc3RyZWFtSWQsIGUuY29kZSwgZSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQgQ2h1bmtlZFN0cmVhbSBmcm9tICcuL0NodW5rZWRTdHJlYW0nO1xuaW1wb3J0IFJlYWxUaW1lU3RyZWFtIGZyb20gJy4vUmVhbFRpbWVTdHJlYW0nO1xuaW1wb3J0IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUgZnJvbSAnLi9DaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlJztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdHJlYW1UcmFuc2Zvcm1Db250ZXh0JztcbmltcG9ydCBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtRmFjdG9yeSB7XG4gIHN0YXRpYyBjcmVhdGUodG9rZW46IHN0cmluZywgY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ6IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogSVN0cmVhbSB7XG4gICAgY29uc3QgdG9rZW5DYXBhYmlsaXRpZXMgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS5jYXBhYmlsaXRpZXM7XG4gICAgY29uc3QgaGFzU3RyZWFtaW5nID0gdG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpO1xuICAgIGNvbnN0IGhhc09uRGVtYW5kID0gdG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ29uLWRlbWFuZCcpO1xuXG4gICAgaWYgKGhhc1N0cmVhbWluZyB8fCBoYXNPbkRlbWFuZCkge1xuICAgICAgcmV0dXJuIG5ldyBDaHVua2VkU3RyZWFtKGNoYW5uZWxDb250ZXh0LCAhaGFzT25EZW1hbmQgPyBDaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlLkxpdmUgOiBDaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlLk9uZERlbWFuZCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZWFsVGltZVN0cmVhbShjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmVhbUZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5jb25zdCBiYW5kd2lkdGhUb1N0YXJ0QXQgPSAzMDAwMDAwOyAvLyBDb3JyZXNwb25kcyB0byA3MjBwIGluIG1vc3Qgc2V0dXBzXG5jb25zdCBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCA9IDE1MDAwO1xuXG50eXBlIEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIgPSAoZXZ0OiBXZWJQbGF5ZXJFdmVudCkgPT4gdm9pZDtcbnR5cGUgV2ViUGxheWVyRXZlbnQgPSB7XG4gIGNvZGU6IG51bWJlcjtcbiAgc2V2ZXJpdHk6IG51bWJlcjtcbiAgZXJyb3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVdlYlBsYXllciB7XG4gIHN0YXJ0OiAodXJsOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGFkZEV2ZW50TGlzdGVuZXIobmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllcik6IHZvaWQ7XG4gIGRpc3Bvc2UoKTogdm9pZDtcbiAgZXJyb3JzOiB7XG4gICAgc2V2ZXJpdHk6IHtcbiAgICAgIFJFQ09WRVJBQkxFOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3M7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYlBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdXZWJQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElXZWJQbGF5ZXI7XG4gIHByaXZhdGUgX2xhc3RSZWxvYWRUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIGJhbmR3aWR0aFRvU3RhcnRBdFxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLldlYlBsYXllcih0aGlzLl9sb2dnZXIsIHRoaXMuX3ZpZGVvRWxlbWVudCwgcGxheWVyT3B0aW9ucyk7XG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQodGhpcy5fbWFuaWZlc3RVUkkpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvck9iamVjdCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhblJlbG9hZCgpICYmIGVycm9yT2JqZWN0ICYmIChlcnJvck9iamVjdC5jb2RlID09PSAzIHx8IGVycm9yT2JqZWN0LnNldmVyaXR5ID09PSBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5lcnJvcnMuc2V2ZXJpdHkuUkVDT1ZFUkFCTEUpKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1JlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIGFmdGVyIGVycm9yIGV2ZW50IFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWRJZkFibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2Fubm90IHJlbG9hZCB3aXRoIGVycm9yIFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllciAmJiBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2UsXG4gICAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHN0YXRpc3RpY3MuY3VycmVudFRpbWUgfHwgdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQ/Lmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmlzTmF0aXZlICYmIHN0YXRpc3RpY3MuZGVsaXZlcnlUeXBlID09PSAnSGxzJykge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIC0gc3RhdGlzdGljcy5sYWc7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmN1cnJlbnRUaW1lKSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmlzTmF0aXZlKSB7XG4gICAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQ/Lmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5jdXJyZW50VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci5kaXNwb3NlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY2FuUmVsb2FkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkID0gIXRoaXMuX2xhc3RSZWxvYWRUaW1lIHx8IERhdGUubm93KCkgLSB0aGlzLl9sYXN0UmVsb2FkVGltZSA+IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkO1xuXG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvRWxlbWVudCAmJiB0aGlzLl9wbGF5ZXIgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCAhPT0gMCAmJiBoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkSWZBYmxlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5SZWxvYWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIFJlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIHRoYXQgd2FzIGFjdGl2ZSBmb3IgYXQgbGVhc3QgWyVzXSBzZWNvbmRzJywgdGhpcy5fc3RyZWFtSWQsIG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIC8gMTAwMCk7XG5cbiAgICB0aGlzLl9sYXN0UmVsb2FkVGltZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUVuY29kZWRTdHJlYW1TaW5rPFQgPSBSVENFbmNvZGVkQXVkaW9GcmFtZSB8IFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB7XG4gICAgKHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrLCBjaHVuazogVCk6IGJvb2xlYW4gfCBQcm9taXNlTGlrZTxib29sZWFuPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5jb2RlZFN0cmVhbVNpbmsge1xuICBzdGF0aWMgdmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luayhtb2RlOiAnYXVkaW8nIHwgJ3ZpZGVvJywgaXRlbTogSUVuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gRW5jb2RlZCBTdHJlYW0gU2luayBmdW5jdGlvbiB0eXBlLiBGb3VuZCBbJHt0eXBlb2YgaXRlbX1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBFbmNvZGVkIFN0cmVhbSBTaW5rIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDIuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvZGVkU3RyZWFtU2luayBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCB7U3Vycm9nYXRlRnJhbWVUeXBlLCBTa2lwRnJhbWV9IGZyb20gJy4vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcic7XG5pbXBvcnQgV29ya2VyVHJhbnNmb3JtU3RyZWFtIGZyb20gJy4vVHJhbnNmb3JtU3RyZWFtLndvcmtlcic7XG5cbnR5cGUgTWVkaWFTdHJlYW1UcmFja0tpbmQgPSAndmlkZW8nIHwgJ2F1ZGlvJztcblxuZXhwb3J0IGludGVyZmFjZSBJUlRDRW5jb2RlZEZyYW1lPFQgZXh0ZW5kcyBSVENFbmNvZGVkVmlkZW9GcmFtZSB8IFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB7XG4gIHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrO1xuICBjaHVuazogVDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5zZXJ0YWJsZVN0cmVhbXMge1xuICBzdGF0aWMgY29uZmlndXJlRW5jb2RlZFN0cmVhbVBpcGVsaW5lKFxuICAgIHN0cmVhbTogTWVkaWFTdHJlYW0sXG4gICAgcmVjZWl2ZXJzOiBSVENSdHBSZWNlaXZlcltdLFxuICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCB1bmRlZmluZWQsIC8vIENhbiBiZSB1bmRlZmluZWQgd2hlbiB0aGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhIHNpbmtcbiAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHwgdW5kZWZpbmVkLCAvLyBDYW4gYmUgdW5kZWZpbmVkIHdoZW4gdGhlIHVzZXIgZGlkbid0IHNwZWNpZnkgYSBzaW5rXG4gICAgdmlkZW9Db2RlYzogc3RyaW5nLFxuICAgIGF1ZGlvQ29kZWM6IHN0cmluZ1xuICApOiB7XG4gICAgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICAgIGVuY29kZWRWaWRlb0ZyYW1lOiBTdWJqZWN0PElSVENFbmNvZGVkRnJhbWU8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgbnVsbD47XG4gICAgZW5jb2RlZEF1ZGlvRnJhbWU6IFN1YmplY3Q8SVJUQ0VuY29kZWRGcmFtZTxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCBudWxsPjtcbiAgfSB7XG4gICAgY29uc3QgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgY29uc3QgZW5jb2RlZFZpZGVvRnJhbWUgPSBuZXcgU3ViamVjdDxJUlRDRW5jb2RlZEZyYW1lPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IG51bGw+KG51bGwpO1xuICAgIGNvbnN0IGVuY29kZWRBdWRpb0ZyYW1lID0gbmV3IFN1YmplY3Q8SVJUQ0VuY29kZWRGcmFtZTxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCBudWxsPihudWxsKTtcblxuICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyID0gcmVjZWl2ZXJzLmZpbHRlcihyZWNlaXZlID0+IHJlY2VpdmUudHJhY2sgPT09IHRyYWNrKVswXTtcbiAgICAgIGNvbnN0IGtpbmQ6IE1lZGlhU3RyZWFtVHJhY2tLaW5kID0gdHJhY2sua2luZCBhcyBNZWRpYVN0cmVhbVRyYWNrS2luZDtcblxuICAgICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgIGNhc2UgJ3ZpZGVvJzoge1xuICAgICAgICAgIGNvbnN0IG11c3RTaW5rID0gISFlbmNvZGVkVmlkZW9TdHJlYW1TaW5rO1xuXG4gICAgICAgICAgLy8gRmlyZWZveCBhbmQgU2FmYXJpXG4gICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0oKTtcblxuICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGFzeW5jIGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgZW5jb2RlZFZpZGVvRnJhbWUudmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgdHJhY2ssXG4gICAgICAgICAgICAgICAgY2h1bms6IGV2ZW50LmRhdGEuY2h1bmtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAobXVzdFNpbmsgJiYgIWF3YWl0IGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGV2ZW50LmRhdGEuY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtmb3JjZUludmFsaWRGcmFtZTogdHJ1ZX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZWNlaXZlci50cmFuc2Zvcm0gPSBuZXcgUlRDUnRwU2NyaXB0VHJhbnNmb3JtKHdvcmtlciwge1xuICAgICAgICAgICAgICBraW5kOiB0cmFjay5raW5kLFxuICAgICAgICAgICAgICBjb2RlYzogdmlkZW9Db2RlYyxcbiAgICAgICAgICAgICAgbXVzdFNpbmtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaHJvbWl1bSAoQ2hyb21lLCBFZGdlLCBPcGVyYSwgLi4uKVxuICAgICAgICAgIGNvbnN0IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxSVENFbmNvZGVkVmlkZW9GcmFtZSwgUlRDRW5jb2RlZFZpZGVvRnJhbWU+ID0gYXN5bmMoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgIGVuY29kZWRWaWRlb0ZyYW1lLnZhbHVlID0ge1xuICAgICAgICAgICAgICB0cmFjayxcbiAgICAgICAgICAgICAgY2h1bmtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChtdXN0U2luaykge1xuICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGNodW5rKSkge1xuICAgICAgICAgICAgICAgIGxldCBzdXJyb2dhdGU6IFN1cnJvZ2F0ZUZyYW1lVHlwZTtcblxuICAgICAgICAgICAgICAgIGlmIChjaHVuay50eXBlID09PSAna2V5Jykge1xuICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUodmlkZW9Db2RlYyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKHZpZGVvQ29kZWMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdXJyb2dhdGUgPT09IFNraXBGcmFtZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBzdXJyb2dhdGUgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY2h1bmsudHlwZSA9PT0gJ2tleScpIHtcbiAgICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWModmlkZW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyh2aWRlb0NvZGVjKSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgY29uc3QgcmVjZWl2ZXJTdHJlYW1zID0gcmVjZWl2ZXIuY3JlYXRlRW5jb2RlZFN0cmVhbXMoKTtcbiAgICAgICAgICBjb25zdCBzb3VyY2UgPSByZWNlaXZlclN0cmVhbXMucmVhZGFibGU7XG4gICAgICAgICAgY29uc3Qgc2luayA9IHJlY2VpdmVyU3RyZWFtcy53cml0YWJsZTtcblxuICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgLnBpcGVUbyhzaW5rKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnYXVkaW8nOiB7XG4gICAgICAgICAgY29uc3QgbXVzdFNpbmsgPSAhIWVuY29kZWRBdWRpb1N0cmVhbVNpbms7XG5cbiAgICAgICAgICAvLyBGaXJlZm94IGFuZCBTYWZhcmlcbiAgICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IFdvcmtlclRyYW5zZm9ybVN0cmVhbSgpO1xuXG4gICAgICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gYXN5bmMgZXZlbnQgPT4ge1xuICAgICAgICAgICAgICBlbmNvZGVkQXVkaW9GcmFtZS52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICB0cmFjayxcbiAgICAgICAgICAgICAgICBjaHVuazogZXZlbnQuZGF0YS5jaHVua1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChtdXN0U2luayAmJiAhYXdhaXQgZW5jb2RlZEF1ZGlvU3RyZWFtU2luayh0cmFjaywgZXZlbnQuZGF0YS5jaHVuaykpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe2ZvcmNlSW52YWxpZEZyYW1lOiB0cnVlfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJlY2VpdmVyLnRyYW5zZm9ybSA9IG5ldyBSVENSdHBTY3JpcHRUcmFuc2Zvcm0od29ya2VyLCB7XG4gICAgICAgICAgICAgIGtpbmQ6IHRyYWNrLmtpbmQsXG4gICAgICAgICAgICAgIGNvZGVjOiBhdWRpb0NvZGVjLFxuICAgICAgICAgICAgICBtdXN0U2lua1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG4gICAgICAgICAgICBjb25zdCBhdWRpb1B1bXBlciA9IG5ldyBBdWRpbygpO1xuXG4gICAgICAgICAgICBhdWRpb1B1bXBlci5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYXVkaW9QdW1wZXIpO1xuXG4gICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaHJvbWl1bSAoQ2hyb21lLCBFZGdlLCBPcGVyYSwgLi4uKVxuICAgICAgICAgIGNvbnN0IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxSVENFbmNvZGVkQXVkaW9GcmFtZSwgUlRDRW5jb2RlZEF1ZGlvRnJhbWU+ID0gYXN5bmMoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgIGVuY29kZWRBdWRpb0ZyYW1lLnZhbHVlID0ge1xuICAgICAgICAgICAgICB0cmFjayxcbiAgICAgICAgICAgICAgY2h1bmtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChtdXN0U2luaykge1xuICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRBdWRpb1N0cmVhbVNpbmsodHJhY2ssIGNodW5rKSkge1xuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldEludmFsaWRTdXJyb2dhdGVBdWRpb0RhdGEoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGVBdWRpb1NpbGVudFBlckNvZGVjKGF1ZGlvQ29kZWMpIHx8IGNodW5rLmRhdGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgIGNvbnN0IHJlY2VpdmVyU3RyZWFtcyA9IHJlY2VpdmVyLmNyZWF0ZUVuY29kZWRTdHJlYW1zKCk7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gcmVjZWl2ZXJTdHJlYW1zLnJlYWRhYmxlO1xuICAgICAgICAgIGNvbnN0IHNpbmsgPSByZWNlaXZlclN0cmVhbXMud3JpdGFibGU7XG5cbiAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoa2luZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlzcG9zYWJsZXMsXG4gICAgICBlbmNvZGVkVmlkZW9GcmFtZSxcbiAgICAgIGVuY29kZWRBdWRpb0ZyYW1lXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb25maWd1cmVJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24oc3RyZWFtOiBNZWRpYVN0cmVhbSwgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+LCBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPik6IHt0cmFuc2Zvcm1lZFN0cmVhbTogTWVkaWFTdHJlYW07IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdH0ge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVkU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG4gICAgY29uc3QgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICBjb25zdCBraW5kOiBNZWRpYVN0cmVhbVRyYWNrS2luZCA9IHRyYWNrLmtpbmQgYXMgTWVkaWFTdHJlYW1UcmFja0tpbmQ7XG5cbiAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICBjYXNlICd2aWRlbyc6IHtcbiAgICAgICAgICBpZiAodmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFZpZGVvRnJhbWUsIFZpZGVvRnJhbWU+ID0gKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sodHJhY2ssIGNodW5rLCBjb250cm9sbGVyKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHZpZGVvVHJhY2sgPSB0cmFjayBhcyBNZWRpYVN0cmVhbVZpZGVvVHJhY2s7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2s6IHZpZGVvVHJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiB2aWRlb1RyYWNrLmtpbmR9KTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvci5yZWFkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSBnZW5lcmF0b3Iud3JpdGFibGU7XG5cbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5yZW1vdmVUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdhdWRpbyc6IHtcbiAgICAgICAgICBpZiAoYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPEF1ZGlvRGF0YSwgQXVkaW9EYXRhPiA9IChjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKHRyYWNrLCBjaHVuaywgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhdWRpb1RyYWNrID0gdHJhY2sgYXMgTWVkaWFTdHJlYW1BdWRpb1RyYWNrO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOiBhdWRpb1RyYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogYXVkaW9UcmFjay5raW5kfSk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgICAgICAgICAgY29uc3QgYXVkaW9QdW1wZXIgPSBuZXcgQXVkaW8oKTtcblxuICAgICAgICAgICAgbWVkaWFTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgICAgYXVkaW9QdW1wZXIuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGF1ZGlvUHVtcGVyKTtcbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLnJlbW92ZVRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGtpbmQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLFxuICAgICAgZGlzcG9zYWJsZXNcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnNlcnRhYmxlU3RyZWFtcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQgPSBBdWRpb0RhdGEgfCBWaWRlb0ZyYW1lPiB7XG4gICAgKHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrLCBjaHVuazogVCwgY29udHJvbGxlcjogVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI8VD4pOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbVRyYWNrVHJhbnNmb3JtIHtcbiAgc3RhdGljIHZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybShtb2RlOiAnYXVkaW8nIHwgJ3ZpZGVvJywgaXRlbTogSVN0cmVhbVRyYWNrVHJhbnNmb3JtKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBmdW5jdGlvbiB0eXBlLiBGb3VuZCBbJHt0eXBlb2YgaXRlbX1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggIT09IDMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDMuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBjb25zdCBTa2lwRnJhbWUgPSBTeW1ib2woKTtcblxuZXhwb3J0IHR5cGUgU3Vycm9nYXRlRnJhbWVUeXBlID0gQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQgfCB0eXBlb2YgU2tpcEZyYW1lO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzU2FmYXJpID0gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzTW9iaWxlQ2hyb21lID0gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQW5kcm9pZENocm9tZSA9IEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmlzQW5kcm9pZDtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NpbmdsZVplcm9CeXRlID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDBdKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYyA9IHtPUFVTOiBuZXcgVWludDhBcnJheShbMHg2OCwgMHgwNywgMHhkOSwgMHhhYiwgMHhiYywgMHg3OSwgMHg4NywgMHhhYiwgMHg4ZSwgMHg0YSwgMHgxNCwgMHhmMywgMHhhNywgMHgxYywgMHhmMiwgMHg5YSwgMHg3YSwgMHg0NSwgMHhhNywgMHgyZCwgMHg0NCwgMHgyNSwgMHg3NCwgMHg0YywgMHhhZCwgMHgxNiwgMHhiMywgMHgwZSwgMHg1MSwgMHg1NywgMHhlYSwgMHhlNywgMHhhZCwgMHgyYSwgMHgzOCwgMHhjZSwgMHgzM10pfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYyA9IHtcbiAgICBIMjY0OiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLCAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXJcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjcsIDB4ZjQsIDB4MDAsIDB4MGEsIDB4OTEsIDB4OWIsIDB4MmIsIDB4ZjEsIDB4ZjEsIDB4ZjgsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDcsIDB4ODksIDB4MTIsIDB4Y2IsIC8vIFNlcXVlbmNlIHBhcmFtZXRlciBzZXRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4ZWIsIDB4ZTMsIDB4YzQsIDB4NDgsIDB4NDQsIC8vIFBpY3R1cmUgcGFyYW10ZXIgc2V0XG4gICAgICAvKiAqLyAweDAwLCAweDAwLCAweDAxLCAweDY1LCAweDg4LCAweDgyLCAweDAwLCAweDNmLCAweDcwLCAweDIzLCAweDg2LCAweGU2LCAweGQxLCAweDgwLCAweDA5LCAweGFmLCAweDBhLCAweDQxLCAweDY2LCAweDZiLCAweDU0LCAweDQ2LCAweGZiLCAweDcxLCAweGQ5LCAweDdmLCAweGZmLCAweGZmLCAweGY5XSksIC8vIFNsaWNlIGxheWVyOiBpZHIgZGF0YVxuICAgIFZQODogbmV3IFVpbnQ4QXJyYXkoWzB4YjAsIDB4MDIsIDB4MDAsIDB4OWQsIDB4MDEsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzksIDB4NmIsIDB4MDAsIDB4MjcsIDB4MWMsIDB4MjQsIDB4MGMsIDB4MmMsIDB4MmMsIDB4NDQsIDB4Y2MsIDB4MjQsIDB4NDEsIDB4YTgsIDB4MDAsIDB4MTMsIDB4YTcsIDB4YTMsIDB4N2EsIDB4NTAsIDB4MDAsIDB4ZmUsIDB4ZWIsIDB4ZGUsIDB4MmYsIDB4OGEsIDB4MWUsIDB4NmIsIDB4N2IsIDB4MDcsIDB4NzIsIDB4NjMsIDB4MDksIDB4YTQsIDB4OGUsIDB4YzBdKSxcbiAgICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDgyLCAweDQ5LCAweDgzLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDc2LCAweDM4LCAweDI0LCAweDFjLCAweDE5LCAweGEwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweDExLCAweGJmLCAweGRkLCAweDc3LCAweGZmLCAweDQwLCAweDdmLCAweGIxLCAweDAwXSlcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYyA9IHtcbiAgICBIMjY0OiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLCAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXJcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDEsIDB4OWEsIDB4NjgsIDB4NDksIDB4YTgsIDB4NDEsIDB4NjgsIDB4OTksIDB4NGMsIDB4MGYsIDB4ZmYsIDB4OTIsIDB4ODFdKSwgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxuICAgIFZQODogbmV3IFVpbnQ4QXJyYXkoWzB4MzEsIDB4MDMsIDB4MDAsIDB4ZTQsIDB4ZTAsIDB4YTgsIDB4OWIsIDB4MzcsIDB4YWYsIDB4MTAsIDB4NGYsIDB4NGYsIDB4YjEsIDB4MGEsIDB4MmYsIDB4ZTQsIDB4OTIsIDB4YzAsIDB4MWYsIDB4ZTcsIDB4NGYsIDB4NDYsIDB4ZmYsIDB4ZWUsIDB4NTEsIDB4YzEsIDB4NWQsIDB4MDAsIDB4ZmUsIDB4ZWIsIDB4ZGUsIDB4MmYsIDB4OGEsIDB4MWUsIDB4NmIsIDB4N2IsIDB4MDcsIDB4NzIsIDB4NjMsIDB4MDksIDB4YTQsIDB4OGUsIDB4YzBdKSxcbiAgICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDg2LCAweDAwLCAweDQwLCAweDkyLCAweDljLCAweDI0LCAweDQ4LCAweDAwLCAweDAwLCAweDAzLCAweDcwLCAweDAwLCAweDAwLCAweDRiLCAweDQwXSlcbiAgfTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15ODJ4ODJIMjY0ID0ge1xuICAgIElGcmFtZTogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHg0MiwgMHhjMCwgMHgwZCwgMHhkYSwgMHgxOCwgMHhkZSwgMHgyMiwgMHgyMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMywgMHhjOCwgMHhmMSwgMHg0MiwgMHhhYSwgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhjZSwgMHgwZiwgMHhjOCwgLy8gUGljdHVyZSBwYXJhbWV0ZXIgc2V0XG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA2LCAweDAzLCAuLi5uZXcgVWludDhBcnJheSg0MCkuZmlsbCgweGZmKSwgMHg1ZiwgLi4ubmV3IFVpbnQ4QXJyYXkoMTAyOTUpLmZpbGwoMHhmZiksIDB4ODAsIC8vIFN1cHBsZW1lbnRhbCBlbmhhbmNlbWVudCBpbmZvcm1hdGlvbiAoU0VJKVxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4NCwgMHgwNSwgLi4ubmV3IFVpbnQ4QXJyYXkoMykuZmlsbCgweGZmKSwgMHgwZiwgMHg0NSwgMHgwMCwgMHgwMSwgMHg1NywgMHg5ZiwgMHgyNywgMHgyNywgMHgyNywgMHgyNywgMHgyNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3OF0pLCAvLyBTbGljZSBsYXllcjogSWRyIGRhdGFcbiAgICBQRnJhbWU6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4MDMsIC4uLm5ldyBVaW50OEFycmF5KDQwKS5maWxsKDB4ZmYpLCAweGE0LCAuLi5uZXcgVWludDhBcnJheSgxMDM2NCkuZmlsbCgweGZmKSwgMHg4MCwgLy8gU0VJXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQxLCAweDlhLCAweDIwLCAweDE1LCAweGYwLCAweDRiXSkgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxuICB9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4ID0gMTA0MTg7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQgPSAxO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzTW9iaWxlQ2hyb21lIHx8IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzU2FmYXJpO1xuICBwcml2YXRlIHN0YXRpYyBfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICBzdGF0aWMgZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyhjb2RlYzogc3RyaW5nKTogQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xuICAgICAgY2FzZSAnT1BVUyc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYy5PUFVTLmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhKCk6IEFycmF5QnVmZmVyIHtcbiAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICB9XG5cbiAgc3RhdGljIGdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMoY29kZWM6IHN0cmluZyk6IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ0gyNjQnOiB7XG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NC5JRnJhbWUuYnVmZmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5IMjY0LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA4Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOSc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5WUDkuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZShjb2RlYzogc3RyaW5nKTogU3Vycm9nYXRlRnJhbWVUeXBlIHtcbiAgICBpZiAoKGNvZGVjLnRvVXBwZXJDYXNlKCkgPT09ICdIMjY0JykgJiYgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcblxuICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzQW5kcm9pZENocm9tZSkge1xuICAgICAgICByZXR1cm4gU2tpcEZyYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyhjb2RlYzogc3RyaW5nKTogQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xuICAgICAgY2FzZSAnSDI2NCc6IHtcbiAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgICAgICBjb25zdCBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcblxuICAgICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLkgyNjQuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDgnOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuVlA4LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA5Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOS5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKGNvZGVjOiBzdHJpbmcpOiBTdXJyb2dhdGVGcmFtZVR5cGUge1xuICAgIGlmICgoY29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnKSAmJiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICBjb25zdCBzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcjtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpO1xuXG4gICAgICBpZiAoc2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciA+IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCkge1xuICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNBbmRyb2lkQ2hyb21lKSB7XG4gICAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIrKztcblxuICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpOiBBcnJheUJ1ZmZlciB7XG4gICAgY29uc3QgYml0TWFzazEgPSAweDBlO1xuICAgIGNvbnN0IGJpdE1hc2syID0gMHgwMTtcbiAgICBjb25zdCBiaXRTaGlmdFJpZ2h0QnkxID0gMTtcbiAgICBjb25zdCBiaXRTaGlmdExlZnRCeTcgPSA3O1xuICAgIGNvbnN0IGJ5dGUxID0gKChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazEpID4+IGJpdFNoaWZ0UmlnaHRCeTEpO1xuICAgIGNvbnN0IGJ5dGUyID0gKChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazIpIDw8IGJpdFNoaWZ0TGVmdEJ5Nyk7XG4gICAgY29uc3QgY29weU9mRHVtbXlQRnJhbWVzID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuUEZyYW1lLnNsaWNlKCk7XG4gICAgY29uc3QgYnVmZmVyID0gY29weU9mRHVtbXlQRnJhbWVzLmJ1ZmZlcjtcbiAgICBjb25zdCBidWZmZXJJbmRleCA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15ODJ4ODJIMjY0UEZyYW1lRnJhbWVOdW1iZXJJbmRleDtcblxuICAgIGJ1ZmZlcltidWZmZXJJbmRleF0gfD0gYnl0ZTE7XG4gICAgYnVmZmVyW2J1ZmZlckluZGV4ICsgMV0gfD0gYnl0ZTI7XG4gICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcisrO1xuXG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX0JVSUxEX1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIHByaXZhdGUgc3RhdGljIF9kZWZhdWx0VmVyc2lvbiA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICBzdGF0aWMgZ2V0IHNka1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF9fQlVJTERfVkVSU0lPTl9fO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmVyc2lvbjtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBUZWxlbWV0cnlTZXJ2aWNlIGZyb20gJy4vVGVsZW1ldHJ5U2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4uL2xvZ2dlci9JQXBwZW5kZXInO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeVNlcnZpY2U6IFRlbGVtZXRyeVNlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkO1xuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UgPSBuZXcgVGVsZW1ldHJ5U2VydmljZSh0ZWxlbWV0cnlDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90ZWxlbWV0cnlTZXJ2aWNlLnB1c2gobG9nTGV2ZWwsIG1lc3NhZ2UsIGNhdGVnb3J5LCBkYXRlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgcHJpdmF0ZSBfdXJsID0gJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5L2xvZ3MnO1xuICBwcml2YXRlIF90ZW5hbmN5OiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIF9lbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgR2xvYmFsU2NvcGUuVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHNldCBwYWdlTG9hZFRpbWUocGFnZUxvYWRUaW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgTnVtYmVycyBmcm9tICcuLi9sYW5nL051bWJlcnMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi9UZWxlbWV0cnlDb25maWd1cmF0aW9uJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSA4MTkyO1xuXG5pbnRlcmZhY2UgSUxvZ0l0ZW0ge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBsZXZlbDogc3RyaW5nO1xuICBjYXRlZ29yeTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIGZ1bGxRdWFsaWZpZWROYW1lOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG5cbiAgcHJpdmF0ZSBfbG9nczogQXJyYXk8SUxvZ0l0ZW0+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZG9tYWluID0gR2xvYmFsU2NvcGUubG9jYXRpb25Ib3N0bmFtZTtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgcnVudGltZSA9ICh0aW1lc3RhbXAudmFsdWVPZigpIC0gdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5wYWdlTG9hZFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsb2dSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcC50b0lTT1N0cmluZygpLFxuICAgICAgdGVuYW5jeTogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5LFxuICAgICAgbGV2ZWw6IExvZ2dpbmdMZXZlbFtsb2dMZXZlbF0sXG4gICAgICBjYXRlZ29yeSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkLFxuICAgICAgdmVyc2lvbjogVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbixcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50LFxuICAgICAgZnVsbFF1YWxpZmllZE5hbWU6IHRoaXMuX2RvbWFpbixcbiAgICAgIHJ1bnRpbWVcbiAgICB9O1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICB0aGlzLl9sb2dzLnB1c2gobG9nUmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9ncy51bnNoaWZ0KGxvZ1JlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3MobG9nTWVzc2FnZXM6IEFycmF5PElMb2dJdGVtPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUuRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbG9nTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgR2xvYmFsU2NvcGUuZmV0Y2godGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9ncy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0SXRlbVNpemUgPSBpdGVtID0+IHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJyA/IE51bWJlcnMuY291bnROdW1iZXJMZW5ndGgoaXRlbSkgOiBpdGVtLmxlbmd0aDtcbiAgICBjb25zdCBnZXRMb2dTaXplID0gKGxvZzogSUxvZ0l0ZW0pOiBudW1iZXIgPT4gT2JqZWN0LnZhbHVlcyhsb2cpXG4gICAgICAucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIChpdGVtID8gZ2V0SXRlbVNpemUoaXRlbSkgOiAwKSwgMCk7XG5cbiAgICB3aGlsZSAodGhpcy5fbG9ncy5sZW5ndGggPiBudW1iZXJPZkxvZ3NUb1NlbmQgJiYgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgc2l6ZU9mTG9nc1RvU2VuZCA8IHJlcXVlc3RTaXplTGltaXQpIHtcbiAgICAgIHNpemVPZkxvZ3NUb1NlbmQgKz0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kKys7XG4gICAgfVxuXG4gICAgaWYgKCFudW1iZXJPZkxvZ3NUb1NlbmQpIHtcbiAgICAgIHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlID0gdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsXG4gICAgICAgIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIChyZXF1ZXN0U2l6ZUxpbWl0IC0gZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pKSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQgPSAxO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ01lc3NhZ2VzID0gdGhpcy5fbG9ncy5zbGljZSgwLCBudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgdGhpcy5fbG9ncyA9IHRoaXMuX2xvZ3Muc2xpY2UobnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHJldHVybiB0aGlzLnNlbmRMb2dzKGxvZ01lc3NhZ2VzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHVyYXRpb25zIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkdXJhdGlvbiA9IDApIHtcbiAgICB0aGlzLl9kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICB9XG5cbiAgdG9Jc29TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fZHVyYXRpb24gPT09IDApIHtcbiAgICAgIHJldHVybiAnUDBTJztcbiAgICB9XG5cbiAgICBjb25zdCBpc05lZ2F0aXZlID0gdGhpcy5fZHVyYXRpb24gPCAwO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gaXNOZWdhdGl2ZSA/IE1hdGguYWJzKHRoaXMuX2R1cmF0aW9uKSA6IHRoaXMuX2R1cmF0aW9uO1xuICAgIGxldCBvZmZzZXQgPSBNYXRoLmZsb29yKGR1cmF0aW9uKTtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBvZmZzZXQgJSAxMDAwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyAxMDAwKTtcblxuICAgIGNvbnN0IHNlY29uZHMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgbWludXRlcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBob3VycyA9IG9mZnNldCAlIDI0O1xuICAgIGNvbnN0IHBhcnRzID0gWydQVCddO1xuXG4gICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy0nKTtcbiAgICB9XG5cbiAgICBpZiAoaG91cnMpIHtcbiAgICAgIHBhcnRzLnB1c2goaG91cnMgKyAnSCcpO1xuICAgIH1cblxuICAgIGlmIChtaW51dGVzKSB7XG4gICAgICBwYXJ0cy5wdXNoKG1pbnV0ZXMgKyAnTScpO1xuICAgIH1cblxuICAgIGlmIChzZWNvbmRzIHx8IG1pbGxpc2Vjb25kcykge1xuICAgICAgcGFydHMucHVzaChTdHJpbmcoc2Vjb25kcykpO1xuXG4gICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIHBhcnRzLnB1c2goJy4nICsgdGhpcy5wYWRTdGFydChtaWxsaXNlY29uZHMudG9TdHJpbmcoKSwgMywgJzAnKSk7XG4gICAgICB9XG5cbiAgICAgIHBhcnRzLnB1c2goJ1MnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMuam9pbignJyk7XG4gIH1cblxuICBwYWRTdGFydChpdGVtOiBzdHJpbmcsIHRhcmdldExlbmd0aDogbnVtYmVyLCBwYWRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoID4+IDA7XG4gICAgcGFkU3RyaW5nID0gU3RyaW5nKCh0eXBlb2YgcGFkU3RyaW5nICE9PSAndW5kZWZpbmVkJyA/IHBhZFN0cmluZyA6ICcgJykpO1xuXG4gICAgaWYgKGl0ZW0ubGVuZ3RoID4gdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggLSBpdGVtLmxlbmd0aDtcblxuICAgIGlmICh0YXJnZXRMZW5ndGggPiBwYWRTdHJpbmcubGVuZ3RoKSB7XG4gICAgICBwYWRTdHJpbmcgKz0gcGFkU3RyaW5nLnJlcGVhdCh0YXJnZXRMZW5ndGggLyBwYWRTdHJpbmcubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFkU3RyaW5nLnNsaWNlKDAsIHRhcmdldExlbmd0aCkgKyBpdGVtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMjAwMDtcbmNvbnN0IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMTtcbmNvbnN0IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gMzAwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvbmVudGlhbEJhY2tvZmYge1xuICBwcml2YXRlIHJlYWRvbmx5IF9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kLFxuICAgIG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlciA9IGRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kXG4gICkge1xuICAgIHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICAgIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kO1xuICB9XG5cbiAgZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudChmYWlsdXJlQ291bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYmFja29mZkludGVydmFsSW5TZWNvbmRzID0gdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCAvIDEwMDA7XG4gICAgY29uc3QgcmFuZG9taXphdGlvbiA9IDAuNSArICgwLjUgKiBNYXRoLnJhbmRvbSgpKTsgLy8gWzAuNSwgMSlcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmYgPSBNYXRoLnBvdyhiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMsIGZhaWx1cmVDb3VudCAtIDIpOyAvLyAgWzEvNCAxLzIgMSAyIDQgOCAuLi4uXVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uID0gTWF0aC5mbG9vcihleHBvbmVudGlhbEJhY2tvZmYpICogcmFuZG9taXphdGlvbjtcbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQgPSBNYXRoLmNlaWwoTWF0aC5tYXgoZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gKiAxMDAwLCB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKSk7XG5cbiAgICByZXR1cm4gTWF0aC5taW4oZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kLCB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaW1lbnNpb24gaW1wbGVtZW50cyBJQ29tcGFyYWJsZTxEaW1lbnNpb24+IHtcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXI7XG5cbiAgc3RhdGljIGdldCBlbXB0eSgpOiBEaW1lbnNpb24ge1xuICAgIHJldHVybiBuZXcgRGltZW5zaW9uKDAsIDApO1xuICB9XG5cbiAgY29uc3RydWN0b3Iod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBlcXVhbHMob3RoZXI6IERpbWVuc2lvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLndpZHRoID09PSBvdGhlci53aWR0aCAmJiB0aGlzLmhlaWdodCA9PT0gb3RoZXIuaGVpZ2h0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy53aWR0aH14JHt0aGlzLmhlaWdodH1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1N0cmVhbVNldHVwTGlzdGVuZXJ9IGZyb20gJy4uL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTmV0d29ya01vbml0b3IgZnJvbSAnLi4vZG9tL05ldHdvcmtNb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSU5ldHdvcmtTdGF0aXN0aWNzIHtcbiAgcnR0PzogbnVtYmVyO1xuICBlZmZlY3RpdmVUeXBlPzogc3RyaW5nO1xuICBkb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvblRlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1Nlc3Npb25UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IFNESy5hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29ya01vbml0b3I6IE5ldHdvcmtNb25pdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSBfbGFzdE5ldHdvcmtTdGF0aXN0aWNzOiBJTmV0d29ya1N0YXRpc3RpY3MgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvcik7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcblxuICAgIGlmICghdGhpcy5fbmV0d29ya01vbml0b3IuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuaXNGb3JlZ3JvdW5kLnN1YnNjcmliZShpc0ZvcmVncm91bmQgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5ydHQuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1JUVFVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5lZmZlY3RpdmVUeXBlLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdGVuT25TdHJlYW1TZXR1cCgpOiBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbVNldHVwTGlzdGVuZXIodGhpcy5fcGFnZUxvYWRUaW1lKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlKGlzRm9yZWdyb3VuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgdGltZVNpbmNlTGFzdENoYW5nZSA9IHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogaXNGb3JlZ3JvdW5kID8gTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kIDogTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZUxhc3RDaGFuZ2V9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdBcHBsaWNhdGlvbiBoYXMgZ29uZSBpbnRvIHRoZSBbJXNdIGFmdGVyIFslc10gbXMnLFxuICAgICAgaXNGb3JlZ3JvdW5kID8gJ2ZvcmVncm91bmQnIDogJ2JhY2tncm91bmQnLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VMYXN0Q2hhbmdlKS50b0lzb1N0cmluZygpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtSVFRVcGRhdGUobmV3UlRUOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZFJ0dCA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQ7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0ID0gbmV3UlRUO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IG5ld1JUVH0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRSdHQgPyB7dWludDY0OiBvbGRSdHR9IDogdW5kZWZpbmVkLFxuICAgICAgcmVzb3VyY2U6ICduYXZpZ2F0b3InXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgUlRUIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdSVFQsXG4gICAgICBvbGRSdHRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZShuZXdOZXR3b3JrVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGROZXR3b3JrVHlwZSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlO1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGUgPSBuZXdOZXR3b3JrVHlwZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuTmV0d29ya1R5cGUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3TmV0d29ya1R5cGV9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkTmV0d29ya1R5cGUgPyB7c3RyaW5nOiBvbGROZXR3b3JrVHlwZX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBlZmZlY3RpdmUgdHlwZSBoYXMgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld05ldHdvcmtUeXBlLFxuICAgICAgb2xkTmV0d29ya1R5cGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUobmV3Q2FwYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkQ2FwYWNpdHkgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkgPSBuZXdDYXBhY2l0eTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHksXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge2Zsb2F0OiBuZXdDYXBhY2l0eX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGRDYXBhY2l0eSA/IHtmbG9hdDogb2xkQ2FwYWNpdHl9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZG93bmxpbmsgdGhyb3VnaHB1dCBjYXBhY2l0eSBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3Q2FwYWNpdHksXG4gICAgICBvbGRDYXBhY2l0eVxuICAgICk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlkZW9UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTdHJlYW1UZWxlbWV0cnknKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSBfbGlzdGVuVG9GaXJzdFRpbWU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvclN0YWxsOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JDb250aW51YXRpb246IChldmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfdGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1N0YWxsZWQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbGFzdFByb2dyZXNzOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvUmVzb2x1dGlvbjogc3RyaW5nO1xuICBwcml2YXRlIF9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcjogRGlzcG9zYWJsZTtcbiAgcHJpdmF0ZSBfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyOiBEaXNwb3NhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbUlkOiBzdHJpbmcsIHBhZ2VMb2FkVGltZTogbnVtYmVyLCBjaGFubmVsU3RhcnRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBjaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBtZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUgPSAoKTogdm9pZCA9PiB0aGlzLmNhbGxUaW1lVG9GaXJzdEZyYW1lKCk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3RlbkZvclN0YWxsID0gKCk6IHZvaWQgPT4gdGhpcy5vblN0YWxsKCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24gPSAoZXZlbnQpOiB2b2lkID0+IHRoaXMub25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG5cbiAgICB0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIgPSBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGF1c2UnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcik7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2luY2VQYWdlTG9hZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGxUaW1lVG9GaXJzdEZyYW1lKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG4gICAgdGhpcy5wdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpO1xuXG4gICAgdGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl90aW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gRmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl90aW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX2NoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBDaGFubmVsIGNyZWF0aW9uIHRvIGZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uU3RhbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3ZpZGVvU3RhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuU3RhbGxlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyBzdGFsbGVkJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pOiB2b2lkIHtcbiAgICBpZiAoIXZpZGVvLmJ1ZmZlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdmlkZW8uYnVmZmVyZWQubGVuZ3RoO1xuICAgIGNvbnN0IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50ID0gZXZlbnQudHlwZSA9PT0gJ3BsYXlpbmcnXG4gICAgfHwgYnVmZmVyTGVuZ3RoID4gMCA/IChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnXG4gICAgICB8fCBldmVudC50eXBlID09PSAndGltZXVwZGF0ZScpXG4gICAgICAmJiB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSkgPT09IHRoaXMuX2xhc3RQcm9ncmVzcyA6IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX3ZpZGVvU3RhbGxlZCB8fCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB2aWRlby5idWZmZXJlZC5lbmQoYnVmZmVyTGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVNpbmNlU3RvcCA9IERhdGUubm93KCkgLSB0aGlzLl92aWRlb1N0YWxsZWQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkJ1ZmZlcmluZyxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlU3RvcH0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHJlY292ZXJlZCBmcm9tIHN0YWxsIGFmdGVyIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlU3RvcCkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gbnVsbDtcbiAgfVxuXG4gIG9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhuZXdSZXNvbHV0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdSZXNvbHV0aW9ufSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA/IHtzdHJpbmc6IHRoaXMuX3ZpZGVvUmVzb2x1dGlvbn0gOiB1bmRlZmluZWQsXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX3ZpZGVvUmVzb2x1dGlvbiA9IG5ld1Jlc29sdXRpb247XG4gIH1cbn0iLCJcbmltcG9ydCB3b3JrZXIgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3dvcmtlci1sb2FkZXIvZGlzdC9ydW50aW1lL2lubGluZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBXb3JrZXJfZm4oKSB7XG4gIHJldHVybiB3b3JrZXIoXCIvKioqKioqLyAoKCkgPT4geyAvLyB3ZWJwYWNrQm9vdHN0cmFwXFxuLyoqKioqKi8gXFx0dmFyIF9fd2VicGFja19tb2R1bGVzX18gPSAoe1xcblxcbi8qKiovIFxcXCIuL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50cyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyAgIFxcXCJkZWZhdWx0XFxcIjogKCkgPT4gKC8qIGJpbmRpbmcgKi8gQnJvd3NlckRldGVjdG9yKVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pO1xcblxcblxcblxcbnZhciBfQnJvd3NlckRldGVjdG9yLCBfbmF2aWdhdG9yLCBfbmF2aWdhdG9yMjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxcbiAqL1xcbnZhciBCcm93c2VyRGV0ZWN0b3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xcbiAgZnVuY3Rpb24gQnJvd3NlckRldGVjdG9yKCkge1xcbiAgICBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQoKSh0aGlzLCBCcm93c2VyRGV0ZWN0b3IpO1xcbiAgfVxcbiAgcmV0dXJuIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCgpKEJyb3dzZXJEZXRlY3RvciwgbnVsbCwgW3tcXG4gICAga2V5OiBcXFwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uXFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImJyb3dzZXJOYW1lXFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImJyb3dzZXJNYWpvclZlcnNpb25cXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJpc0FuZHJvaWRcXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0FuZHJvaWQ7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU2OVxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNjk7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3MFxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3MVxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3MlxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzI7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3NFxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3NVxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3NlxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzY7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNDaHJvbWU3N1xcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiaXNNb2JpbGVcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNNb2JpbGUoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNNb2JpbGU7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25cXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKSB7XFxuICAgICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcXG4gICAgICAgIHJldHVybiAnJztcXG4gICAgICB9XFxuICAgICAgdmFyIGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XFxuICAgICAgaWYgKGJyb3dzZXJOYW1lQW5kVmVyc2lvbiAmJiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF0pIHtcXG4gICAgICAgIHJldHVybiBicm93c2VyTmFtZUFuZFZlcnNpb25bMF07XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcInBhcnNlQnJvd3Nlck5hbWVcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VCcm93c2VyTmFtZSgpIHtcXG4gICAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgfVxcbiAgICAgIHZhciBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xcbiAgICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcXG4gICAgICAgIHJldHVybiAnJztcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lTGlzdFswXTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJwYXJzZUJyb3dzZXJNYWpvclZlcnNpb25cXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCkge1xcbiAgICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcXG4gICAgICAgIHJldHVybiAwO1xcbiAgICAgIH1cXG4gICAgICB2YXIgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcXG4gICAgICBpZiAoIWJyb3dzZXJWZXJzaW9uTGlzdCB8fCAhYnJvd3NlclZlcnNpb25MaXN0WzFdKSB7XFxuICAgICAgICByZXR1cm4gMDtcXG4gICAgICB9XFxuICAgICAgdmFyIGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xcbiAgICAgIGlmICghZnVsbFZlcnNpb24pIHtcXG4gICAgICAgIHJldHVybiAwO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRVxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCkge1xcbiAgICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XFxuICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgfVxcbiAgICAgIHZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xcbiAgICAgIHZhciBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XFxuICAgICAgaWYgKG1zaWUgPiAwKSB7XFxuICAgICAgICAvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcXG4gICAgICAgIHJldHVybiBcXFwiSUUvXFxcIi5jb25jYXQocGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKSk7XFxuICAgICAgfVxcbiAgICAgIHZhciB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XFxuICAgICAgaWYgKHRyaWRlbnQgPiAwKSB7XFxuICAgICAgICAvLyBJRSAxMSA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcXG4gICAgICAgIHZhciB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xcbiAgICAgICAgcmV0dXJuIFxcXCJJRS9cXFwiLmNvbmNhdChwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKHZlcnNpb24gKyAzLCB1c2VyQWdlbnQuaW5kZXhPZignLicsIHZlcnNpb24pKSwgMTApKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuICcnO1xcbiAgICB9XFxuICB9XSk7XFxufSgpO1xcbl9Ccm93c2VyRGV0ZWN0b3IgPSBCcm93c2VyRGV0ZWN0b3I7XFxuX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0KCkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4XFxcIiwgLyhNU0lFfCg/IUdlY2tvLispRmlyZWZveHwoPyFBcHBsZVdlYktpdC4rQ2hyb21lLispU2FmYXJpfCg/IUFwcGxlV2ViS2l0LispQ2hyb21lfEFwcGxlV2ViS2l0KD8hLitDaHJvbWV8LitTYWZhcmkpfEdlY2tvKD8hLitGaXJlZm94KSkoPzogfFxcXFwvKShbXFxcXGQuYXByZV0rKS9nKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uXFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfYnJvd3Nlck5hbWVcXFwiLCBfQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKSk7XFxuX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0KCkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2Jyb3dzZXJNYWpvclZlcnNpb25cXFwiLCBfQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNNb2JpbGVcXFwiLCAvQW5kcm9pZHxpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8T3BlcmEgTWluaS9pLnRlc3QoKF9uYXZpZ2F0b3IgPSBuYXZpZ2F0b3IpID09PSBudWxsIHx8IF9uYXZpZ2F0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9uYXZpZ2F0b3IudXNlckFnZW50KSk7XFxuX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0KCkoQnJvd3NlckRldGVjdG9yLCBcXFwiX2lzQW5kcm9pZFxcXCIsIC9BbmRyb2lkL2kudGVzdCgoX25hdmlnYXRvcjIgPSBuYXZpZ2F0b3IpID09PSBudWxsIHx8IF9uYXZpZ2F0b3IyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbmF2aWdhdG9yMi51c2VyQWdlbnQpKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU2OVxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3MFxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcwLicpKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3MVxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3MlxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3NFxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc0LicpKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3NVxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3NlxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNDaHJvbWU3N1xcXCIsIF9Ccm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc3LicpKTtcXG5cXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIudHNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIudHMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgU2tpcEZyYW1lOiAoKSA9PiAoLyogYmluZGluZyAqLyBTa2lwRnJhbWUpLFxcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiAoKSA9PiAoLyogYmluZGluZyAqLyBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyKVxcbi8qIGhhcm1vbnkgZXhwb3J0ICovIH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc190b0NvbnN1bWFibGVBcnJheV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc190b0NvbnN1bWFibGVBcnJheV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vLi4vZG9tL0Jyb3dzZXJEZXRlY3RvciAqLyBcXFwiLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50c1xcXCIpO1xcblxcblxcblxcblxcbnZhciBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxcbiAqL1xcblxcblxcbnZhciBTa2lwRnJhbWUgPSBTeW1ib2woKTtcXG52YXIgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyKCkge1xcbiAgICBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQoKSh0aGlzLCBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyKTtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcXG4gIH1cXG4gIHJldHVybiBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBudWxsLCBbe1xcbiAgICBrZXk6IFxcXCJnZXRTdXJyb2dhdGVBdWRpb1NpbGVudFBlckNvZGVjXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoY29kZWMpIHtcXG4gICAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcXG4gICAgICAgIGNhc2UgJ09QVVMnOlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYy5PUFVTLmJ1ZmZlcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICAgICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YVxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhKCkge1xcbiAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlY1xcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjKGNvZGVjKSB7XFxuICAgICAgc3dpdGNoIChjb2RlYy50b1VwcGVyQ2FzZSgpKSB7XFxuICAgICAgICBjYXNlICdIMjY0JzpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XFxuICAgICAgICAgICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0O1xcbiAgICAgICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15ODJ4ODJIMjY0LklGcmFtZS5idWZmZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuSDI2NC5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGNhc2UgJ1ZQOCc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGNhc2UgJ1ZQOSc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLlZQOS5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xcbiAgICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZVxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUoY29kZWMpIHtcXG4gICAgICBpZiAoY29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnICYmIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcXG4gICAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XFxuICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNBbmRyb2lkQ2hyb21lKSB7XFxuICAgICAgICAgIHJldHVybiBTa2lwRnJhbWU7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlY1xcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjKGNvZGVjKSB7XFxuICAgICAgc3dpdGNoIChjb2RlYy50b1VwcGVyQ2FzZSgpKSB7XFxuICAgICAgICBjYXNlICdIMjY0JzpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XFxuICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyKCk7XFxuICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLkgyNjQuYnVmZmVyO1xcbiAgICAgICAgICB9XFxuICAgICAgICBjYXNlICdWUDgnOlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5WUDguYnVmZmVyO1xcbiAgICAgICAgICB9XFxuICAgICAgICBjYXNlICdWUDknOlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5WUDkuYnVmZmVyO1xcbiAgICAgICAgICB9XFxuICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWVcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKGNvZGVjKSB7XFxuICAgICAgaWYgKGNvZGVjLnRvVXBwZXJDYXNlKCkgPT09ICdIMjY0JyAmJiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XFxuICAgICAgICB2YXIgc2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXI7XFxuICAgICAgICB2YXIgYnVmZmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyKCk7XFxuICAgICAgICBpZiAoc2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciA+IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCkge1xcbiAgICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNBbmRyb2lkQ2hyb21lKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xcbiAgICAgICAgfVxcbiAgICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcisrO1xcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKSB7XFxuICAgICAgdmFyIGJpdE1hc2sxID0gMHgwZTtcXG4gICAgICB2YXIgYml0TWFzazIgPSAweDAxO1xcbiAgICAgIHZhciBiaXRTaGlmdFJpZ2h0QnkxID0gMTtcXG4gICAgICB2YXIgYml0U2hpZnRMZWZ0Qnk3ID0gNztcXG4gICAgICB2YXIgYnl0ZTEgPSAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciAmIGJpdE1hc2sxKSA+PiBiaXRTaGlmdFJpZ2h0QnkxO1xcbiAgICAgIHZhciBieXRlMiA9IChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazIpIDw8IGJpdFNoaWZ0TGVmdEJ5NztcXG4gICAgICB2YXIgY29weU9mRHVtbXlQRnJhbWVzID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuUEZyYW1lLnNsaWNlKCk7XFxuICAgICAgdmFyIGJ1ZmZlciA9IGNvcHlPZkR1bW15UEZyYW1lcy5idWZmZXI7XFxuICAgICAgdmFyIGJ1ZmZlckluZGV4ID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4O1xcbiAgICAgIGJ1ZmZlcltidWZmZXJJbmRleF0gfD0gYnl0ZTE7XFxuICAgICAgYnVmZmVyW2J1ZmZlckluZGV4ICsgMV0gfD0gYnl0ZTI7XFxuICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcisrO1xcbiAgICAgIHJldHVybiBidWZmZXI7XFxuICAgIH1cXG4gIH1dKTtcXG59KCk7XFxuX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCgpKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfaXNTYWZhcmlcXFwiLCBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1xcXCJkZWZhdWx0XFxcIl0uYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQoKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2lzTW9iaWxlQ2hyb21lXFxcIiwgX2RvbV9Ccm93c2VyRGV0ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcXFwiZGVmYXVsdFxcXCJdLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1xcXCJkZWZhdWx0XFxcIl0uaXNNb2JpbGUoKSk7XFxuX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0KCkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9pc0FuZHJvaWRDaHJvbWVcXFwiLCBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1xcXCJkZWZhdWx0XFxcIl0uYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIF9kb21fQnJvd3NlckRldGVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXFxcImRlZmF1bHRcXFwiXS5pc0FuZHJvaWQpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCgpKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfc2luZ2xlWmVyb0J5dGVcXFwiLCBuZXcgVWludDhBcnJheShbMHgwMF0pKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQoKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlY1xcXCIsIHtcXG4gIE9QVVM6IG5ldyBVaW50OEFycmF5KFsweDY4LCAweDA3LCAweGQ5LCAweGFiLCAweGJjLCAweDc5LCAweDg3LCAweGFiLCAweDhlLCAweDRhLCAweDE0LCAweGYzLCAweGE3LCAweDFjLCAweGYyLCAweDlhLCAweDdhLCAweDQ1LCAweGE3LCAweDJkLCAweDQ0LCAweDI1LCAweDc0LCAweDRjLCAweGFkLCAweDE2LCAweGIzLCAweDBlLCAweDUxLCAweDU3LCAweGVhLCAweGU3LCAweGFkLCAweDJhLCAweDM4LCAweGNlLCAweDMzXSlcXG59KTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQoKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlY1xcXCIsIHtcXG4gIEgyNjQ6IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLFxcbiAgLy8gQWNjZXNzIHVuaXQgZGVsaW1pdGVyXFxuICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweGY0LCAweDAwLCAweDBhLCAweDkxLCAweDliLCAweDJiLCAweGYxLCAweGYxLCAweGY4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDA3LCAweDg5LCAweDEyLCAweGNiLFxcbiAgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhlYiwgMHhlMywgMHhjNCwgMHg0OCwgMHg0NCxcXG4gIC8vIFBpY3R1cmUgcGFyYW10ZXIgc2V0XFxuICAvKiAqL1xcbiAgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4MiwgMHgwMCwgMHgzZiwgMHg3MCwgMHgyMywgMHg4NiwgMHhlNiwgMHhkMSwgMHg4MCwgMHgwOSwgMHhhZiwgMHgwYSwgMHg0MSwgMHg2NiwgMHg2YiwgMHg1NCwgMHg0NiwgMHhmYiwgMHg3MSwgMHhkOSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmOV0pLFxcbiAgLy8gU2xpY2UgbGF5ZXI6IGlkciBkYXRhXFxuICBWUDg6IG5ldyBVaW50OEFycmF5KFsweGIwLCAweDAyLCAweDAwLCAweDlkLCAweDAxLCAweDJhLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDM5LCAweDZiLCAweDAwLCAweDI3LCAweDFjLCAweDI0LCAweDBjLCAweDJjLCAweDJjLCAweDQ0LCAweGNjLCAweDI0LCAweDQxLCAweGE4LCAweDAwLCAweDEzLCAweGE3LCAweGEzLCAweDdhLCAweDUwLCAweDAwLCAweGZlLCAweGViLCAweGRlLCAweDJmLCAweDhhLCAweDFlLCAweDZiLCAweDdiLCAweDA3LCAweDcyLCAweDYzLCAweDA5LCAweGE0LCAweDhlLCAweGMwXSksXFxuICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDgyLCAweDQ5LCAweDgzLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDc2LCAweDM4LCAweDI0LCAweDFjLCAweDE5LCAweGEwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweDExLCAweGJmLCAweGRkLCAweDc3LCAweGZmLCAweDQwLCAweDdmLCAweGIxLCAweDAwXSlcXG59KTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQoKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlY1xcXCIsIHtcXG4gIEgyNjQ6IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLFxcbiAgLy8gQWNjZXNzIHVuaXQgZGVsaW1pdGVyXFxuICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQxLCAweDlhLCAweDY4LCAweDQ5LCAweGE4LCAweDQxLCAweDY4LCAweDk5LCAweDRjLCAweDBmLCAweGZmLCAweDkyLCAweDgxXSksXFxuICAvLyBTbGljZSBsYXllcjogbm9uIGlkciBkYXRhXFxuICBWUDg6IG5ldyBVaW50OEFycmF5KFsweDMxLCAweDAzLCAweDAwLCAweGU0LCAweGUwLCAweGE4LCAweDliLCAweDM3LCAweGFmLCAweDEwLCAweDRmLCAweDRmLCAweGIxLCAweDBhLCAweDJmLCAweGU0LCAweDkyLCAweGMwLCAweDFmLCAweGU3LCAweDRmLCAweDQ2LCAweGZmLCAweGVlLCAweDUxLCAweGMxLCAweDVkLCAweDAwLCAweGZlLCAweGViLCAweGRlLCAweDJmLCAweDhhLCAweDFlLCAweDZiLCAweDdiLCAweDA3LCAweDcyLCAweDYzLCAweDA5LCAweGE0LCAweDhlLCAweGMwXSksXFxuICBWUDk6IG5ldyBVaW50OEFycmF5KFsweDg2LCAweDAwLCAweDQwLCAweDkyLCAweDljLCAweDI0LCAweDQ4LCAweDAwLCAweDAwLCAweDAzLCAweDcwLCAweDAwLCAweDAwLCAweDRiLCAweDQwXSlcXG59KTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQoKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2R1bW15ODJ4ODJIMjY0XFxcIiwge1xcbiAgSUZyYW1lOiBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHg0MiwgMHhjMCwgMHgwZCwgMHhkYSwgMHgxOCwgMHhkZSwgMHgyMiwgMHgyMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMywgMHhjOCwgMHhmMSwgMHg0MiwgMHhhYSxcXG4gIC8vIFNlcXVlbmNlIHBhcmFtZXRlciBzZXRcXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjgsIDB4Y2UsIDB4MGYsIDB4YzgsXFxuICAvLyBQaWN0dXJlIHBhcmFtZXRlciBzZXRcXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4MDNdLmNvbmNhdChfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc190b0NvbnN1bWFibGVBcnJheV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQoKShuZXcgVWludDhBcnJheSg0MCkuZmlsbCgweGZmKSksIFsweDVmXSwgX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfdG9Db25zdW1hYmxlQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0KCkobmV3IFVpbnQ4QXJyYXkoMTAyOTUpLmZpbGwoMHhmZikpLCBbMHg4MCxcXG4gIC8vIFN1cHBsZW1lbnRhbCBlbmhhbmNlbWVudCBpbmZvcm1hdGlvbiAoU0VJKVxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NSwgMHg4OCwgMHg4NCwgMHgwNV0sIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCgpKG5ldyBVaW50OEFycmF5KDMpLmZpbGwoMHhmZikpLCBbMHgwZiwgMHg0NSwgMHgwMCwgMHgwMSwgMHg1NywgMHg5ZiwgMHgyNywgMHgyNywgMHgyNywgMHgyNywgMHgyNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3NSwgMHhkNywgMHg1ZCwgMHg3OF0pKSxcXG4gIC8vIFNsaWNlIGxheWVyOiBJZHIgZGF0YVxcbiAgUEZyYW1lOiBuZXcgVWludDhBcnJheShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNiwgMHgwM10uY29uY2F0KF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCgpKG5ldyBVaW50OEFycmF5KDQwKS5maWxsKDB4ZmYpKSwgWzB4YTRdLCBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc190b0NvbnN1bWFibGVBcnJheV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQoKShuZXcgVWludDhBcnJheSgxMDM2NCkuZmlsbCgweGZmKSksIFsweDgwLFxcbiAgLy8gU0VJXFxuICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQxLCAweDlhLCAweDIwLCAweDE1LCAweGYwLCAweDRiXSkpIC8vIFNsaWNlIGxheWVyOiBub24gaWRyIGRhdGFcXG59KTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQoKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2R1bW15ODJ4ODJIMjY0UEZyYW1lRnJhbWVOdW1iZXJJbmRleFxcXCIsIDEwNDE4KTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQoKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldFxcXCIsIDEpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCgpKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclxcXCIsIF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc01vYmlsZUNocm9tZSB8fCBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNTYWZhcmkpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCgpKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclxcXCIsIF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQpO1xcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlMaWtlVG9BcnJheS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKChtb2R1bGUpID0+IHtcXG5cXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShyLCBhKSB7XFxuICAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7XFxuICBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTtcXG4gIHJldHVybiBuO1xcbn1cXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXFxcImRlZmF1bHRcXFwiXSA9IG1vZHVsZS5leHBvcnRzO1xcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhvdXRIb2xlcy5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcXG5cXG52YXIgYXJyYXlMaWtlVG9BcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXJyYXlMaWtlVG9BcnJheS5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheUxpa2VUb0FycmF5LmpzXFxcIik7XFxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIpIHtcXG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShyKTtcXG59XFxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRob3V0SG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcXFwiZGVmYXVsdFxcXCJdID0gbW9kdWxlLmV4cG9ydHM7XFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKChtb2R1bGUpID0+IHtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikge1xcbiAgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTtcXG59XFxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2ssIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcXFwiZGVmYXVsdFxcXCJdID0gbW9kdWxlLmV4cG9ydHM7XFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xcblxcbnZhciB0b1Byb3BlcnR5S2V5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90b1Byb3BlcnR5S2V5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanNcXFwiKTtcXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7XFxuICBmb3IgKHZhciB0ID0gMDsgdCA8IHIubGVuZ3RoOyB0KyspIHtcXG4gICAgdmFyIG8gPSByW3RdO1xcbiAgICBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFxcXCJ2YWx1ZVxcXCIgaW4gbyAmJiAoby53cml0YWJsZSA9ICEwKSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHRvUHJvcGVydHlLZXkoby5rZXkpLCBvKTtcXG4gIH1cXG59XFxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKGUsIHIsIHQpIHtcXG4gIHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFxcXCJwcm90b3R5cGVcXFwiLCB7XFxuICAgIHdyaXRhYmxlOiAhMVxcbiAgfSksIGU7XFxufVxcbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZUNsYXNzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXFxcImRlZmF1bHRcXFwiXSA9IG1vZHVsZS5leHBvcnRzO1xcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcXG5cXG52YXIgdG9Qcm9wZXJ0eUtleSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdG9Qcm9wZXJ0eUtleS5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1Byb3BlcnR5S2V5LmpzXFxcIik7XFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcXG4gIHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xcbiAgICB2YWx1ZTogdCxcXG4gICAgZW51bWVyYWJsZTogITAsXFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXFxuICAgIHdyaXRhYmxlOiAhMFxcbiAgfSkgOiBlW3JdID0gdCwgZTtcXG59XFxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcXFwiZGVmYXVsdFxcXCJdID0gbW9kdWxlLmV4cG9ydHM7XFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovICgobW9kdWxlKSA9PiB7XFxuXFxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7XFxuICBpZiAoXFxcInVuZGVmaW5lZFxcXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBudWxsICE9IHJbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHJbXFxcIkBAaXRlcmF0b3JcXFwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7XFxufVxcbm1vZHVsZS5leHBvcnRzID0gX2l0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1xcXCJkZWZhdWx0XFxcIl0gPSBtb2R1bGUuZXhwb3J0cztcXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVTcHJlYWQuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoKG1vZHVsZSkgPT4ge1xcblxcbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHtcXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlxcXCIpO1xcbn1cXG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVNwcmVhZCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1xcXCJkZWZhdWx0XFxcIl0gPSBtb2R1bGUuZXhwb3J0cztcXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSA9PiB7XFxuXFxudmFyIGFycmF5V2l0aG91dEhvbGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hcnJheVdpdGhvdXRIb2xlcy5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhvdXRIb2xlcy5qc1xcXCIpO1xcbnZhciBpdGVyYWJsZVRvQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2l0ZXJhYmxlVG9BcnJheS5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanNcXFwiKTtcXG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXFxcIik7XFxudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub25JdGVyYWJsZVNwcmVhZC5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qc1xcXCIpO1xcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShyKSB7XFxuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMocikgfHwgaXRlcmFibGVUb0FycmF5KHIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XFxufVxcbm1vZHVsZS5leHBvcnRzID0gX3RvQ29uc3VtYWJsZUFycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXFxcImRlZmF1bHRcXFwiXSA9IG1vZHVsZS5leHBvcnRzO1xcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1ByaW1pdGl2ZS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcXG5cXG52YXIgX3R5cGVvZiA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3R5cGVvZi5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanNcXFwiKVtcXFwiZGVmYXVsdFxcXCJdKTtcXG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XFxuICBpZiAoXFxcIm9iamVjdFxcXCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XFxuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcXG4gIGlmICh2b2lkIDAgIT09IGUpIHtcXG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcXFwiZGVmYXVsdFxcXCIpO1xcbiAgICBpZiAoXFxcIm9iamVjdFxcXCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XFxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXFxcIik7XFxuICB9XFxuICByZXR1cm4gKFxcXCJzdHJpbmdcXFwiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcXG59XFxubW9kdWxlLmV4cG9ydHMgPSB0b1ByaW1pdGl2ZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1xcXCJkZWZhdWx0XFxcIl0gPSBtb2R1bGUuZXhwb3J0cztcXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1Byb3BlcnR5S2V5LmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcXG5cXG52YXIgX3R5cGVvZiA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3R5cGVvZi5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanNcXFwiKVtcXFwiZGVmYXVsdFxcXCJdKTtcXG52YXIgdG9QcmltaXRpdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvUHJpbWl0aXZlLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzXFxcIik7XFxuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XFxuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFxcXCJzdHJpbmdcXFwiKTtcXG4gIHJldHVybiBcXFwic3ltYm9sXFxcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcXFwiXFxcIjtcXG59XFxubW9kdWxlLmV4cG9ydHMgPSB0b1Byb3BlcnR5S2V5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXFxcImRlZmF1bHRcXFwiXSA9IG1vZHVsZS5leHBvcnRzO1xcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoKG1vZHVsZSkgPT4ge1xcblxcbmZ1bmN0aW9uIF90eXBlb2Yobykge1xcbiAgXFxcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXFxcIjtcXG5cXG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcXFwiZnVuY3Rpb25cXFwiID09IHR5cGVvZiBTeW1ib2wgJiYgXFxcInN5bWJvbFxcXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XFxuICAgIHJldHVybiB0eXBlb2YgbztcXG4gIH0gOiBmdW5jdGlvbiAobykge1xcbiAgICByZXR1cm4gbyAmJiBcXFwiZnVuY3Rpb25cXFwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcXFwic3ltYm9sXFxcIiA6IHR5cGVvZiBvO1xcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1xcXCJkZWZhdWx0XFxcIl0gPSBtb2R1bGUuZXhwb3J0cywgX3R5cGVvZihvKTtcXG59XFxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXFxcImRlZmF1bHRcXFwiXSA9IG1vZHVsZS5leHBvcnRzO1xcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcXG5cXG52YXIgYXJyYXlMaWtlVG9BcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vYXJyYXlMaWtlVG9BcnJheS5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheUxpa2VUb0FycmF5LmpzXFxcIik7XFxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHtcXG4gIGlmIChyKSB7XFxuICAgIGlmIChcXFwic3RyaW5nXFxcIiA9PSB0eXBlb2YgcikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkociwgYSk7XFxuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XFxuICAgIHJldHVybiBcXFwiT2JqZWN0XFxcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXFxcIk1hcFxcXCIgPT09IHQgfHwgXFxcIlNldFxcXCIgPT09IHQgPyBBcnJheS5mcm9tKHIpIDogXFxcIkFyZ3VtZW50c1xcXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBhcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwO1xcbiAgfVxcbn1cXG5tb2R1bGUuZXhwb3J0cyA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1xcXCJkZWZhdWx0XFxcIl0gPSBtb2R1bGUuZXhwb3J0cztcXG5cXG4vKioqLyB9KVxcblxcbi8qKioqKiovIFxcdH0pO1xcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxcbi8qKioqKiovIFxcdHZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcXG4vKioqKioqLyBcXHRcXG4vKioqKioqLyBcXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcXG4vKioqKioqLyBcXHRcXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcXG4vKioqKioqLyBcXHRcXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcXG4vKioqKioqLyBcXHRcXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcXG4vKioqKioqLyBcXHRcXHRcXHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdFxcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXFxuLyoqKioqKi8gXFx0XFx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XFxuLyoqKioqKi8gXFx0XFx0XFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxcbi8qKioqKiovIFxcdFxcdFxcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXFxuLyoqKioqKi8gXFx0XFx0XFx0ZXhwb3J0czoge31cXG4vKioqKioqLyBcXHRcXHR9O1xcbi8qKioqKiovIFxcdFxcbi8qKioqKiovIFxcdFxcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdFxcdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xcbi8qKioqKiovIFxcdFxcbi8qKioqKiovIFxcdFxcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xcbi8qKioqKiovIFxcdH1cXG4vKioqKioqLyBcXHRcXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKioqKiovIFxcdC8qIHdlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0ICovXFxuLyoqKioqKi8gXFx0KCgpID0+IHtcXG4vKioqKioqLyBcXHRcXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xcbi8qKioqKiovIFxcdFxcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcXG4vKioqKioqLyBcXHRcXHRcXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cXG4vKioqKioqLyBcXHRcXHRcXHRcXHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcXG4vKioqKioqLyBcXHRcXHRcXHRcXHQoKSA9PiAobW9kdWxlKTtcXG4vKioqKioqLyBcXHRcXHRcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcXG4vKioqKioqLyBcXHRcXHRcXHRyZXR1cm4gZ2V0dGVyO1xcbi8qKioqKiovIFxcdFxcdH07XFxuLyoqKioqKi8gXFx0fSkoKTtcXG4vKioqKioqLyBcXHRcXG4vKioqKioqLyBcXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMgKi9cXG4vKioqKioqLyBcXHQoKCkgPT4ge1xcbi8qKioqKiovIFxcdFxcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcXG4vKioqKioqLyBcXHRcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xcbi8qKioqKiovIFxcdFxcdFxcdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcXG4vKioqKioqLyBcXHRcXHRcXHRcXHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcXG4vKioqKioqLyBcXHRcXHRcXHRcXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xcbi8qKioqKiovIFxcdFxcdFxcdFxcdH1cXG4vKioqKioqLyBcXHRcXHRcXHR9XFxuLyoqKioqKi8gXFx0XFx0fTtcXG4vKioqKioqLyBcXHR9KSgpO1xcbi8qKioqKiovIFxcdFxcbi8qKioqKiovIFxcdC8qIHdlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQgKi9cXG4vKioqKioqLyBcXHQoKCkgPT4ge1xcbi8qKioqKiovIFxcdFxcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSlcXG4vKioqKioqLyBcXHR9KSgpO1xcbi8qKioqKiovIFxcdFxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSB7fTtcXG4vLyBUaGlzIGVudHJ5IG5lZWQgdG8gYmUgd3JhcHBlZCBpbiBhbiBJSUZFIGJlY2F1c2UgaXQgbmVlZCB0byBiZSBpbiBzdHJpY3QgbW9kZS5cXG4oKCkgPT4ge1xcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P3J1bGVTZXRbMV0ucnVsZXNbMV0udXNlIS4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9UcmFuc2Zvcm1TdHJlYW0ud29ya2VyLnRzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyAqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qc1xcXCIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyICovIFxcXCIuL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci50c1xcXCIpO1xcblxcblxcblxcbi8qKlxcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXFxuICovXFxuXFxudmFyIHdvcmtlciA9IHNlbGY7XFxud29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgV29ya2VyVHJhbnNmb3JtU3RyZWFtLmZvcmNlSW52YWxpZEZyYW1lID0gZXZlbnQuZGF0YS5mb3JjZUludmFsaWRGcmFtZTtcXG59O1xcbmlmIChzZWxmLlJUQ1RyYW5zZm9ybUV2ZW50KSB7XFxuICBzZWxmLm9ucnRjdHJhbnNmb3JtID0gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgIHZhciB0cmFuc2Zvcm1lciA9IGV2ZW50LnRyYW5zZm9ybWVyO1xcbiAgICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uY29kZWMgPSB0cmFuc2Zvcm1lci5vcHRpb25zLmNvZGVjO1xcbiAgICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0udHJhbnNmb3JtRnVuY3Rpb24gPSB0cmFuc2Zvcm1lci5vcHRpb25zLmtpbmQgPT09ICd2aWRlbycgPyBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0udmlkZW9UcmFuc2Zvcm1GdW5jdGlvbiA6IFdvcmtlclRyYW5zZm9ybVN0cmVhbS5hdWRpb1RyYW5zZm9ybUZ1bmN0aW9uO1xcbiAgICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0ubXVzdFNpbmsgPSB0cmFuc2Zvcm1lci5vcHRpb25zLm11c3RTaW5rO1xcbiAgICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uZm9yY2VJbnZhbGlkRnJhbWUgPSBmYWxzZTtcXG4gICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xcbiAgICAgIHRyYW5zZm9ybTogV29ya2VyVHJhbnNmb3JtU3RyZWFtLnRyYW5zZm9ybUZ1bmN0aW9uXFxuICAgIH0pO1xcbiAgICB2YXIgc291cmNlID0gdHJhbnNmb3JtZXIucmVhZGFibGU7XFxuICAgIHZhciBzaW5rID0gdHJhbnNmb3JtZXIud3JpdGFibGU7XFxuICAgIHNvdXJjZS5waXBlVGhyb3VnaCh0cmFuc2Zvcm1TdHJlYW0pLnBpcGVUbyhzaW5rKTtcXG4gIH07XFxufVxcbnZhciBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xcbiAgZnVuY3Rpb24gV29ya2VyVHJhbnNmb3JtU3RyZWFtKCkge1xcbiAgICBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jbGFzc0NhbGxDaGVja19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQoKSh0aGlzLCBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0pO1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlclRyYW5zZm9ybVN0cmVhbSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XFxuICB9XFxuICByZXR1cm4gX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0KCkoV29ya2VyVHJhbnNmb3JtU3RyZWFtLCBudWxsLCBbe1xcbiAgICBrZXk6IFxcXCJ2aWRlb1RyYW5zZm9ybUZ1bmN0aW9uXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZpZGVvVHJhbnNmb3JtRnVuY3Rpb24oY2h1bmssIGNvbnRyb2xsZXIpIHtcXG4gICAgICBwb3N0TWVzc2FnZSh7XFxuICAgICAgICBjaHVuazoge1xcbiAgICAgICAgICB0eXBlOiBjaHVuay50eXBlLFxcbiAgICAgICAgICB0aW1lc3RhbXA6IGNodW5rLnRpbWVzdGFtcCxcXG4gICAgICAgICAgZGF0YTogY2h1bmsuZGF0YVxcbiAgICAgICAgfVxcbiAgICAgIH0pO1xcbiAgICAgIGlmIChXb3JrZXJUcmFuc2Zvcm1TdHJlYW0ubXVzdFNpbmspIHtcXG4gICAgICAgIGlmIChXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uZm9yY2VJbnZhbGlkRnJhbWUpIHtcXG4gICAgICAgICAgdmFyIHN1cnJvZ2F0ZTtcXG4gICAgICAgICAgV29ya2VyVHJhbnNmb3JtU3RyZWFtLmZvcmNlSW52YWxpZEZyYW1lID0gZmFsc2U7XFxuICAgICAgICAgIGlmIChjaHVuay50eXBlID09PSAna2V5Jykge1xcbiAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXS5nZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUoV29ya2VyVHJhbnNmb3JtU3RyZWFtLmNvZGVjKTtcXG4gICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBzdXJyb2dhdGUgPSBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0uZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5jb2RlYyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgaWYgKHN1cnJvZ2F0ZSA9PT0gX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXy5Ta2lwRnJhbWUpIHtcXG4gICAgICAgICAgICByZXR1cm47XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgY2h1bmsuZGF0YSA9IHN1cnJvZ2F0ZSB8fCBjaHVuay5kYXRhO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgaWYgKGNodW5rLnR5cGUgPT09ICdrZXknKSB7XFxuICAgICAgICAgICAgY2h1bmsuZGF0YSA9IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXS5nZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5jb2RlYykgfHwgY2h1bmsuZGF0YTtcXG4gICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBjaHVuay5kYXRhID0gX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdLmdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWMoV29ya2VyVHJhbnNmb3JtU3RyZWFtLmNvZGVjKSB8fCBjaHVuay5kYXRhO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuayk7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiYXVkaW9UcmFuc2Zvcm1GdW5jdGlvblxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhdWRpb1RyYW5zZm9ybUZ1bmN0aW9uKGNodW5rLCBjb250cm9sbGVyKSB7XFxuICAgICAgcG9zdE1lc3NhZ2Uoe1xcbiAgICAgICAgY2h1bms6IHtcXG4gICAgICAgICAgdGltZXN0YW1wOiBjaHVuay50aW1lc3RhbXAsXFxuICAgICAgICAgIGRhdGE6IGNodW5rLmRhdGFcXG4gICAgICAgIH1cXG4gICAgICB9KTtcXG4gICAgICBpZiAoV29ya2VyVHJhbnNmb3JtU3RyZWFtLm11c3RTaW5rKSB7XFxuICAgICAgICBpZiAoV29ya2VyVHJhbnNmb3JtU3RyZWFtLmZvcmNlSW52YWxpZEZyYW1lKSB7XFxuICAgICAgICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5mb3JjZUludmFsaWRGcmFtZSA9IGZhbHNlO1xcbiAgICAgICAgICBjaHVuay5kYXRhID0gX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdLmdldEludmFsaWRTdXJyb2dhdGVBdWRpb0RhdGEoKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIGNodW5rLmRhdGEgPSBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0uZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyhXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uY29kZWMpIHx8IGNodW5rLmRhdGE7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuayk7XFxuICAgIH1cXG4gIH1dKTtcXG59KCk7XFxuX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0KCkoV29ya2VyVHJhbnNmb3JtU3RyZWFtLCBcXFwiY29kZWNcXFwiLCB2b2lkIDApO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCgpKFdvcmtlclRyYW5zZm9ybVN0cmVhbSwgXFxcInRyYW5zZm9ybUZ1bmN0aW9uXFxcIiwgdm9pZCAwKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0sIFxcXCJtdXN0U2lua1xcXCIsIHZvaWQgMCk7XFxuX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0KCkoV29ya2VyVHJhbnNmb3JtU3RyZWFtLCBcXFwiZm9yY2VJbnZhbGlkRnJhbWVcXFwiLCB2b2lkIDApO1xcbi8qIHVudXNlZCBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBfX1dFQlBBQ0tfREVGQVVMVF9FWFBPUlRfXyA9IChudWxsKTtcXG59KSgpO1xcblxcbi8qKioqKiovIH0pKClcXG47XFxuXCIsIFwiV29ya2VyXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYsIG5vLXVzZS1iZWZvcmUtZGVmaW5lLCBuZXctY2FwICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZW50LCB3b3JrZXJDb25zdHJ1Y3Rvciwgd29ya2VyT3B0aW9ucywgdXJsKSB7XG4gIHZhciBnbG9iYWxTY29wZSA9IHNlbGYgfHwgd2luZG93O1xuXG4gIHRyeSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBibG9iO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBOZXcgQVBJXG4gICAgICAgIGJsb2IgPSBuZXcgZ2xvYmFsU2NvcGUuQmxvYihbY29udGVudF0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBCbG9iQnVpbGRlciA9IERlcHJlY2F0ZWQsIGJ1dCB3aWRlbHkgaW1wbGVtZW50ZWRcbiAgICAgICAgdmFyIEJsb2JCdWlsZGVyID0gZ2xvYmFsU2NvcGUuQmxvYkJ1aWxkZXIgfHwgZ2xvYmFsU2NvcGUuV2ViS2l0QmxvYkJ1aWxkZXIgfHwgZ2xvYmFsU2NvcGUuTW96QmxvYkJ1aWxkZXIgfHwgZ2xvYmFsU2NvcGUuTVNCbG9iQnVpbGRlcjtcbiAgICAgICAgYmxvYiA9IG5ldyBCbG9iQnVpbGRlcigpO1xuICAgICAgICBibG9iLmFwcGVuZChjb250ZW50KTtcbiAgICAgICAgYmxvYiA9IGJsb2IuZ2V0QmxvYigpO1xuICAgICAgfVxuXG4gICAgICB2YXIgVVJMID0gZ2xvYmFsU2NvcGUuVVJMIHx8IGdsb2JhbFNjb3BlLndlYmtpdFVSTDtcbiAgICAgIHZhciBvYmplY3RVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgdmFyIHdvcmtlciA9IG5ldyBnbG9iYWxTY29wZVt3b3JrZXJDb25zdHJ1Y3Rvcl0ob2JqZWN0VVJMLCB3b3JrZXJPcHRpb25zKTtcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VVJMKTtcbiAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG5ldyBnbG9iYWxTY29wZVt3b3JrZXJDb25zdHJ1Y3Rvcl0oXCJkYXRhOmFwcGxpY2F0aW9uL2phdmFzY3JpcHQsXCIuY29uY2F0KGVuY29kZVVSSUNvbXBvbmVudChjb250ZW50KSksIHdvcmtlck9wdGlvbnMpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICghdXJsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcIklubGluZSB3b3JrZXIgaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IGdsb2JhbFNjb3BlW3dvcmtlckNvbnN0cnVjdG9yXSh1cmwsIHdvcmtlck9wdGlvbnMpO1xuICB9XG59OyIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xuICBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTtcbiAgcmV0dXJuIG47XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikge1xuICBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkocik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkge1xuICBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKG4sIHQsIGUsIHIsIG8sIGEsIGMpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaSA9IG5bYV0oYyksXG4gICAgICB1ID0gaS52YWx1ZTtcbiAgfSBjYXRjaCAobikge1xuICAgIHJldHVybiB2b2lkIGUobik7XG4gIH1cbiAgaS5kb25lID8gdCh1KSA6IFByb21pc2UucmVzb2x2ZSh1KS50aGVuKHIsIG8pO1xufVxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3Iobikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ID0gdGhpcyxcbiAgICAgIGUgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyLCBvKSB7XG4gICAgICB2YXIgYSA9IG4uYXBwbHkodCwgZSk7XG4gICAgICBmdW5jdGlvbiBfbmV4dChuKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChhLCByLCBvLCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgbik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfdGhyb3cobikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoYSwgciwgbywgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBuKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHZvaWQgMCk7XG4gICAgfSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHtcbiAgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2ssIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7XG4gIGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykge1xuICAgIHZhciBvID0gclt0XTtcbiAgICBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkge1xuICByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkge1xuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIF9nZXRQcm90b3R5cGVPZih0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2YuanNcIik7XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkge1xuICBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHQsXG4gICAgICB3cml0YWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfVxuICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGUgJiYgc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikge1xuICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiKTtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHtcbiAgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sID8gU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBPYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxcbiAgICAgIGMgPSBuZXcgQ29udGV4dChuIHx8IFtdKTtcbiAgICByZXR1cm4gbyhhLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QodCwgciwgYylcbiAgICB9KSwgYTtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaCh0LCBlLCByKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogdC5jYWxsKGUsIHIpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiB0XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBlLndyYXAgPSB3cmFwO1xuICB2YXIgaCA9IFwic3VzcGVuZGVkU3RhcnRcIixcbiAgICBsID0gXCJzdXNwZW5kZWRZaWVsZFwiLFxuICAgIGYgPSBcImV4ZWN1dGluZ1wiLFxuICAgIHMgPSBcImNvbXBsZXRlZFwiLFxuICAgIHkgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBwID0ge307XG4gIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAobyA9PT0gcykge1xuICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBpKSB0aHJvdyBhO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB0LFxuICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmb3IgKG4ubWV0aG9kID0gaSwgbi5hcmcgPSBhOzspIHtcbiAgICAgICAgdmFyIGMgPSBuLmRlbGVnYXRlO1xuICAgICAgICBpZiAoYykge1xuICAgICAgICAgIHZhciB1ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShjLCBuKTtcbiAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgaWYgKHUgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gbi5tZXRob2QpIG4uc2VudCA9IG4uX3NlbnQgPSBuLmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IG4ubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKG8gPT09IGgpIHRocm93IG8gPSBzLCBuLmFyZztcbiAgICAgICAgICBuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IG4ubWV0aG9kICYmIG4uYWJydXB0KFwicmV0dXJuXCIsIG4uYXJnKTtcbiAgICAgICAgbyA9IGY7XG4gICAgICAgIHZhciBwID0gdHJ5Q2F0Y2goZSwgciwgbik7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSBwLnR5cGUpIHtcbiAgICAgICAgICBpZiAobyA9IG4uZG9uZSA/IHMgOiBsLCBwLmFyZyA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBwLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IG4uZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSBwLnR5cGUgJiYgKG8gPSBzLCBuLm1ldGhvZCA9IFwidGhyb3dcIiwgbi5hcmcgPSBwLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpIHtcbiAgICB2YXIgbiA9IHIubWV0aG9kLFxuICAgICAgbyA9IGUuaXRlcmF0b3Jbbl07XG4gICAgaWYgKG8gPT09IHQpIHJldHVybiByLmRlbGVnYXRlID0gbnVsbCwgXCJ0aHJvd1wiID09PSBuICYmIGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKHIubWV0aG9kID0gXCJyZXR1cm5cIiwgci5hcmcgPSB0LCBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpLCBcInRocm93XCIgPT09IHIubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBuICYmIChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBuICsgXCInIG1ldGhvZFwiKSksIHk7XG4gICAgdmFyIGkgPSB0cnlDYXRjaChvLCBlLml0ZXJhdG9yLCByLmFyZyk7XG4gICAgaWYgKFwidGhyb3dcIiA9PT0gaS50eXBlKSByZXR1cm4gci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gaS5hcmcsIHIuZGVsZWdhdGUgPSBudWxsLCB5O1xuICAgIHZhciBhID0gaS5hcmc7XG4gICAgcmV0dXJuIGEgPyBhLmRvbmUgPyAocltlLnJlc3VsdE5hbWVdID0gYS52YWx1ZSwgci5uZXh0ID0gZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSByLm1ldGhvZCAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpIDogYSA6IChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIHIuZGVsZWdhdGUgPSBudWxsLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkodCkge1xuICAgIHZhciBlID0ge1xuICAgICAgdHJ5TG9jOiB0WzBdXG4gICAgfTtcbiAgICAxIGluIHQgJiYgKGUuY2F0Y2hMb2MgPSB0WzFdKSwgMiBpbiB0ICYmIChlLmZpbmFsbHlMb2MgPSB0WzJdLCBlLmFmdGVyTG9jID0gdFszXSksIHRoaXMudHJ5RW50cmllcy5wdXNoKGUpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkodCkge1xuICAgIHZhciBlID0gdC5jb21wbGV0aW9uIHx8IHt9O1xuICAgIGUudHlwZSA9IFwibm9ybWFsXCIsIGRlbGV0ZSBlLmFyZywgdC5jb21wbGV0aW9uID0gZTtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHQpIHtcbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgdHJ5TG9jOiBcInJvb3RcIlxuICAgIH1dLCB0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGUpIHtcbiAgICBpZiAoZSB8fCBcIlwiID09PSBlKSB7XG4gICAgICB2YXIgciA9IGVbYV07XG4gICAgICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUubmV4dCkgcmV0dXJuIGU7XG4gICAgICBpZiAoIWlzTmFOKGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgbyA9IC0xLFxuICAgICAgICAgIGkgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsrbyA8IGUubGVuZ3RoOykgaWYgKG4uY2FsbChlLCBvKSkgcmV0dXJuIG5leHQudmFsdWUgPSBlW29dLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGkubmV4dCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoX3R5cGVvZihlKSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIG8oZywgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG8oR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdCAmJiB0LmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWUgJiYgKGUgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGUuZGlzcGxheU5hbWUgfHwgZS5uYW1lKSk7XG4gIH0sIGUubWFyayA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZyksIHQ7XG4gIH0sIGUuYXdyYXAgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiB0XG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBjLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBlLmFzeW5jID0gZnVuY3Rpb24gKHQsIHIsIG4sIG8sIGkpIHtcbiAgICB2b2lkIDAgPT09IGkgJiYgKGkgPSBQcm9taXNlKTtcbiAgICB2YXIgYSA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAodCwgciwgbiwgbyksIGkpO1xuICAgIHJldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocikgPyBhIDogYS5uZXh0KCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQuZG9uZSA/IHQudmFsdWUgOiBhLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKGcpLCBkZWZpbmUoZywgdSwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShnLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoZywgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBlLmtleXMgPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gT2JqZWN0KHQpLFxuICAgICAgciA9IFtdO1xuICAgIGZvciAodmFyIG4gaW4gZSkgci5wdXNoKG4pO1xuICAgIHJldHVybiByLnJldmVyc2UoKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyByLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIHQgPSByLnBvcCgpO1xuICAgICAgICBpZiAodCBpbiBlKSByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGUudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoZSkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB0LCB0aGlzLmRvbmUgPSAhMSwgdGhpcy5kZWxlZ2F0ZSA9IG51bGwsIHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMuYXJnID0gdCwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtyLnNsaWNlKDEpKSAmJiAodGhpc1tyXSA9IHQpO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHRoaXMuZG9uZSA9ICEwO1xuICAgICAgdmFyIHQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGUpIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGU7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobiwgbykge1xuICAgICAgICByZXR1cm4gYS50eXBlID0gXCJ0aHJvd1wiLCBhLmFyZyA9IGUsIHIubmV4dCA9IG4sIG8gJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksICEhbztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIG8gPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgbyA+PSAwOyAtLW8pIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLnRyeUVudHJpZXNbb10sXG4gICAgICAgICAgYSA9IGkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBpLnRyeUxvYykgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgaWYgKGkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBjID0gbi5jYWxsKGksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICB1ID0gbi5jYWxsKGksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoYyAmJiB1KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdSkgdGhyb3cgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheVdpdGhIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIik7XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCIpO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheShyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSB0b1ByaW1pdGl2ZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCIuL3RvUHJpbWl0aXZlLmpzXCIpO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJvcGVydHlLZXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgX3R5cGVvZihvKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7XG4gIGlmIChyKSB7XG4gICAgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIsIGEpO1xuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XG4gICAgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyJdLCJuYW1lcyI6WyJHbG9iYWxTY29wZSIsIkRpc3Bvc2FibGUiLCJEaXNwb3NhYmxlTGlzdCIsIlN1YmplY3QiLCJSZWFkT25seVN1YmplY3QiLCJ2aXNpYmlsaXR5Q2hhbmdlRXZlbnQiLCJBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiX3JlYWRPbmx5SXNGb3JlZ3JvdW5kIiwiaW5pdGlhbGl6ZSIsIl9jcmVhdGVDbGFzcyIsImtleSIsImdldCIsInZhbHVlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2UiLCJkaXNwb3NlIiwiX2Rpc3Bvc2FibGVzIiwiX3RoaXMiLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnRJc0hpZGRlbiIsInVzZUV2ZW50Q2FwdHVyZVBoYXNlIiwiYWRkRG9jdW1lbnRFdmVudExpc3RlbmVyIiwiYWRkIiwicmVtb3ZlRG9jdW1lbnRFdmVudExpc3RlbmVyIiwiZGVmYXVsdCIsIkJyb3dzZXJEZXRlY3RvciIsIl9icm93c2VyTmFtZUFuZFZlcnNpb24iLCJfYnJvd3Nlck5hbWUiLCJfYnJvd3Nlck1ham9yVmVyc2lvbiIsIl9pc0FuZHJvaWQiLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwiaXNNb2JpbGUiLCJfaXNNb2JpbGUiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm1hdGNoIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSIsInBhcnNlQnJvd3Nlck5hbWUiLCJicm93c2VyTmFtZUxpc3QiLCJzcGxpdCIsInBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbiIsImJyb3dzZXJWZXJzaW9uTGlzdCIsImZ1bGxWZXJzaW9uIiwiTnVtYmVyIiwibXNpZSIsImluZGV4T2YiLCJjb25jYXQiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInRyaWRlbnQiLCJ2ZXJzaW9uIiwiX0Jyb3dzZXJEZXRlY3RvciIsInRlc3QiLCJfbmF2aWdhdG9yIiwiX25hdmlnYXRvcjIiLCJpbmNsdWRlcyIsIkxvZ2dlckRlZmF1bHRzIiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIlRlbGVtZXRyeURlZmF1bHQiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwiZ2V0U3RyaW5nVmFsdWUiLCJuYW1lIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUiLCJkZWZhdWx0U3RyaW5nVmFsdWUiLCJnZXRCb29sZWFuVmFsdWUiLCJ2YWx1ZUZyb21VcmkiLCJkZWZhdWx0Qm9vbGVhblZhbHVlIiwiY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUiLCJkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwiLCJjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlIiwiZGVmYXVsdExvZ2dpbmdMZXZlbCIsImRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsIiwiZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCIsIm1ldGFWYWx1ZSIsImRvY3VtZW50UXVlcnlTZWxlY3RvciIsImdldEF0dHJpYnV0ZSIsInZhbHVlVVJJUGFyYW1ldGVyTmFtZSIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uU2VhcmNoIiwidW5kZWZpbmVkIiwiRmVhdHVyZUVuYWJsZW1lbnQiLCJHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciIsIkVycm9yIiwiZm9yY2VHYXJiYWdlQ29sbGVjdGlvbiIsImlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCIsImZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24iLCJpc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkIiwicXVldWVNaWNyb3Rhc2siLCJvdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24iLCJiaW5kIiwic2V0VGltZW91dCIsImltZyIsImRvY3VtZW50Q3JlYXRlRWxlbWVudCIsInNyYyIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIkJsb2IiLCJBcnJheUJ1ZmZlciIsIm9uZXJyb3IiLCJyZXZva2VPYmplY3RVUkwiLCJOZXR3b3JrTW9uaXRvciIsIm5hdmlnYXRvckNvbm5lY3Rpb24iLCJpc1N1cHBvcnRlZCIsInNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycyIsInVwZGF0ZVN0YXRpc3RpY3MiLCJfaXNTdXBwb3J0ZWQiLCJfcnR0IiwiX2VmZmVjdGl2ZVR5cGUiLCJfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsIl9yZWYiLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG8iLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG8yIiwiX0dsb2JhbFNjb3BlJG5hdmlnYXRvMyIsImRvd25saW5rIiwiZG93bmxpbmtNYXgiLCJnZXRFZmZlY3RpdmVUeXBlIiwiX3JlZjIiLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG80IiwiX0dsb2JhbFNjb3BlJG5hdmlnYXRvNSIsIl9HbG9iYWxTY29wZSRuYXZpZ2F0bzYiLCJlZmZlY3RpdmVUeXBlIiwidHlwZSIsImdldFJvdW5kVHJpcFRpbWUiLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG83IiwiX0dsb2JhbFNjb3BlJG5hdmlnYXRvOCIsInJ0dCIsIl9HbG9iYWxTY29wZSRuYXZpZ2F0bzkiLCJsaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG8xMCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJNZXRyaWNzVHlwZSIsIk1ldHJpY1R5cGUiLCJEdXJhdGlvbnMiLCJTREsiLCJMb2dnZXJGYWN0b3J5IiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsImdldExvZ2dlciIsIm1ldHJpY3NTZXJ2aWNlIiwiX3N0YXJ0VGltZSIsIl9wYWdlTG9hZFRpbWUiLCJzdWNjZXNzIiwic3RyZWFtSWQiLCJyZWNvcmRTdHJlYW1NZXRyaWMiLCJTZXR1cENvbXBsZXRlZCIsImZhaWwiLCJTZXR1cEZhaWxlZCIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsImdldE5hbWUiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwidG9Jc29TdHJpbmciLCJFZGdlVG9rZW4iLCJlZGdlQXV0aFRva2VuUHJlZml4IiwiRWRnZUF1dGhQYXJzZXIiLCJwYXJzZVRva2VuIiwidG9rZW4iLCJpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCIsImVycm9yIiwiZGVjb2RlZFRva2VuIiwiYXRvYiIsInN1YnN0ciIsImxlbmd0aCIsImVkZ2VUb2tlbiIsIkpTT04iLCJwYXJzZSIsImUiLCJzdGFydHNXaXRoIiwiX2VkZ2VUb2tlbiR0b2tlbiIsIl9lZGdlVG9rZW4kdG9rZW4yIiwiX2FwcGxpY2F0aW9uSWQiLCJhcHBsaWNhdGlvbklkIiwiX3Rva2VuIiwidXJpIiwiY2FwYWJpbGl0aWVzIiwiQnVpbGRGZWF0dXJlcyIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX3NlbmRMb2dzIiwiX3NlbmRNZXRyaWNzIiwiX2xvZ1RvQ29uc29sZSIsImFwcGx5RmVhdHVyZXMiLCJmZWF0dXJlcyIsIl9fRkVBVFVSRVNfXyIsInNlbmRMb2NhbENhbmRpZGF0ZXMiLCJzZW5kTG9ncyIsInNlbmRNZXRyaWNzIiwibG9nVG9Db25zb2xlIiwiaXNDaHJvbWU3NCIsImlzQ2hyb21lNzUiLCJpc0Nocm9tZTc2IiwiaXNDaHJvbWU3NyIsImFkZFRyYW5jZWl2ZXJEaXNhYmxlZCIsImlzQ2hyb21lNjkiLCJpc0Nocm9tZTcwIiwiaXNDaHJvbWU3MSIsImlzQ2hyb21lNzIiLCJicm93c2VyTmFtZSIsImJyb3dzZXJNYWpvclZlcnNpb24iLCJNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yIiwiTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciIsIlJUQ1J0cFJlY2VpdmVyIiwicHJvdG90eXBlIiwiY3JlYXRlRW5jb2RlZFN0cmVhbXMiLCJSVENSdHBTY3JpcHRUcmFuc2Zvcm0iLCJIVE1MVmlkZW9FbGVtZW50IiwicmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayIsImlzUmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFja1N1cHBvcnRlZCIsImlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkIiwiaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQiLCJQYXJhbWV0ZXJzIiwiX2Rpc2NvdmVyeVBhcmFtZXRlcnMiLCJhcHBseVBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzIiwiX19QQVJBTUVURVJTX18iLCJkaXNjb3ZlcnkiLCJpbnRlbnRpb25zIiwiX2RvY3VtZW50IiwiZG9jdW1lbnQiLCJfbG9jYXRpb24iLCJsb2NhdGlvbiIsIl93aW5kb3ciLCJ3aW5kb3ciLCJGb3JtRGF0YSIsImNsZWFySW50ZXJ2YWwiLCJjbGVhclRpbWVvdXQiLCJjcmVhdGVFbGVtZW50IiwiaGFzRm9jdXMiLCJoaWRkZW4iLCJxdWVyeVNlbGVjdG9yIiwiZmV0Y2giLCJob3N0bmFtZSIsInNlYXJjaCIsImNvbm5lY3Rpb24iLCJvbkxpbmUiLCJzZXRJbnRlcnZhbCIsImdldEluc3RhbmNlIiwiX2luc3RhbmNlIiwiX0dsb2JhbFNjb3BlIiwiZGlzcG9zYWJsZSIsIl9kaXNwb3NlZCIsIl9kaXNwb3NhYmxlIiwiY2FsbCIsIl9saXN0IiwiZm9yRWFjaCIsInRvU3RyaW5nIiwibWF4RGlnaXRzSW5GbG9hdEFmdGVyRG90IiwiTnVtYmVycyIsImNvdW50TnVtYmVyTGVuZ3RoIiwiaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSIsIm51bWJlciIsImNvdW50RGlnaXRzQmVmb3JlRGVjaW1hbCIsIk1hdGgiLCJmbG9vciIsImNvdW50RGlnaXRzQWZ0ZXJEZWNpbWFsIiwiZml4Um91bmRpbmciLCJwcmVjaXNpb24iLCJwb3dlciIsInBvdyIsInJvdW5kIiwiZGlnaXRzQmVmb3JlRGVjaW1hbCIsIm9yaWdpbmFsVmFsdWUiLCJtb2RpZmllZFZhbHVlIiwiY291bnQiLCJTdHJpbmdzIiwicmFuZG9tIiwicmFuZG9tMTNDaGFyYWN0ZXJzIiwibG9vcHMiLCJjZWlsIiwiQXJyYXkiLCJmaWxsIiwicmVkdWNlIiwic3RyaW5nIiwiZnVuYyIsIlVpbnQ4QXJyYXlzIiwiaXNEYXRhQXRPZmZzZXRUYXJnZXRCeXRlU2VxdWVuY2UiLCJ0YXJnZXRCeXRlU2VxdWVuY2UiLCJkYXRhIiwib2Zmc2V0IiwiaWR4IiwiZmluZFRhcmdldEJ5dGVTZXF1ZW5jZUluZGV4RnJvbU9mZnNldCIsInJldHVyblZhbHVlV2hlbk5vdEZvdW5kIiwiYXJndW1lbnRzIiwiY3VycmVudEluZGV4IiwiYnl0ZUxlbmd0aCIsImdldFV1aWRTdHJpbmdGcm9tVWludDhBcnJheSIsInV1aWRCeXRlTGVuZ3RoIiwidXVpZCIsImJ5dGVIZXgiLCJwYWRTdGFydCIsImpvaW4iLCJhc3NlcnRVbnJlYWNoYWJsZSIsIngiLCJBcHBlbmRlcnMiLCJfYXBwZW5kZXJzIiwiYXBwZW5kZXIiLCJyZW1vdmUiLCJpdGVtcyIsIml0ZW0iLCJMb2dnaW5nTGV2ZWwiLCJDb25zb2xlQXBwZW5kZXIiLCJ0aHJlc2hvbGQiLCJfdGhyZXNob2xkIiwibG9nIiwibG9nTGV2ZWwiLCJtZXNzYWdlIiwiY2F0ZWdvcnkiLCJkYXRlIiwiZnVsbE1lc3NhZ2UiLCJ0b0lTT1N0cmluZyIsIldhcm4iLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiX2xlbjQiLCJfa2V5NCIsIl9sZW41IiwiX2tleTUiLCJmYXRhbCIsIkZhdGFsIiwiX2xlbjYiLCJfa2V5NiIsImxldmVsIiwicmVwbGFjZVBsYWNlaG9sZGVycyIsIl90aGlzMiIsInJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmciLCJpbmRleCIsInJlcGxhY2VBcmd1bWVudCIsInNwbGljZSIsInN0cmluZ2lmeSIsImFjY3VtdWxhdG9yIiwiY3VycmVudFZhbHVlIiwiYXJyYXkiLCJlcnJvclN0YWNrQWxzb0hhc0Vycm9yTWVzc2FnZSIsInN0YWNrIiwiYXJnIiwiY2FjaGUiLCJPYmplY3QiLCJhcmd1bWVudCIsInRvU3RyaW5nU3RyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsIl90ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwibG9nZ2VyIiwiX2xvZ2dlcnMiLCJhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlMb2dnaW5nTGV2ZWwiLCJhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsIiwiYXBwbHlDb25zb2xlTG9nZ2VyIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsInNldFRocmVzaG9sZCIsImFwcGx5QXBwZW5kZXIiLCJsb2dnaW5nTGV2ZWwiLCJPZmYiLCJBbGwiLCJjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsIiwibG9nZ2luZ0xldmVsVHlwZSIsIlRlbGVtZXRyeUxldmVsIiwibWV0cmljcyIsIl9tZXRyaWNzIiwiZ2V0VGVsZW1ldHJ5TGV2ZWwiLCJUaW1lVG9GaXJzdEZyYW1lIiwiRXNzZW50aWFsIiwiQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIlN0YWxsZWQiLCJCdWZmZXJpbmciLCJSb3VuZFRyaXBUaW1lIiwiRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJOZXR3b3JrVHlwZSIsIlJlc29sdXRpb25DaGFuZ2VkIiwiQXBwbGljYXRpb25Gb3JlZ3JvdW5kIiwiQXBwbGljYXRpb25CYWNrZ3JvdW5kIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc1NlcnZpY2UiLCJUZWxlbWV0cnlVcmwiLCJFbnZpcm9ubWVudCIsIk1ldHJpY3NGYWN0b3J5IiwiZ2V0TWV0cmljc1NlcnZpY2UiLCJfdHlwZW9mIiwibWV0cmljc1NlcnZpY2VzIiwiX21ldHJpY3NTZXJ2aWNlcyIsIm1ldHJpY3NDb25maWd1cmF0aW9uIiwiY2xpZW50U2Vzc2lvbklkIiwiZ2V0VGVsZW1ldHJ5VXJsIiwiZ2V0RW52aXJvbm1lbnRGcm9tVXJsIiwiY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbCIsInNldFRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwiRXhwb25lbnRpYWxCYWNrb2ZmIiwiVmVyc2lvbk1hbmFnZXIiLCJyZXF1ZXN0U2l6ZUxpbWl0IiwibWF4QnVmZmVyZWRSZWNvcmRzIiwibG9jYXRpb25Ib3N0bmFtZSIsIl9tZXRyaWNzQ29uZmlndXJhdGlvbiIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJtZXRyaWMiLCJwcmV2aW91c1ZhbHVlIiwicmVzb3VyY2UiLCJraW5kIiwibWV0cmljUmVjb3JkIiwidGltZXN0YW1wIiwiZnVsbFF1YWxpZmllZE5hbWUiLCJfZG9tYWluIiwic2RrVmVyc2lvbiIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwibWV0cmljc01lc3NhZ2VzIiwiZm9ybURhdGEiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiYXBwZW5kIiwicmVjb3JkcyIsIm1ldGhvZCIsImJvZHkiLCJhYnJ1cHQiLCJzZW50Iiwic3RvcCIsIl94IiwiYXBwbHkiLCJfc2VuZE1ldHJpY3NJZkFibGUiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIl9pc1NlbmRpbmciLCJzbGljZSIsInRoZW4iLCJyZXNwb25zZSIsImlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlIiwiX2ZhaWx1cmVDb3VudCIsIl90b0NvbnN1bWFibGVBcnJheSIsImdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQiLCJjYXRjaCIsInN0YXR1cyIsInRlbGVtZXRyeUxldmVsVHlwZSIsIlByb21pc2VIYW5kbGVyIiwiUHJvbWlzZSIsImNhbGxiYWNrIiwiVHlwZUVycm9yIiwiX3N0YXRlIiwiX2hhbmRsZWQiLCJfdmFsdWUiLCJfZGVmZXJyZWRzIiwiZG9SZXNvbHZlIiwiZG9uZSIsInByb21pc2VSZXNvbHZlIiwicmVhc29uIiwicHJvbWlzZVJlamVjdCIsIm5ld1ZhbHVlIiwicHJvbWlzZSIsImZpbmFsZSIsIl9pbW1lZGlhdGUiLCJfdW5oYW5kbGVkUmVqZWN0aW9uIiwiaSIsImxlbiIsImhhbmRsZSIsImRlZmVycmVkIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwicmVzdWx0IiwiYWxsIiwiYXJyIiwicmVzb2x2ZSIsInJlamVjdCIsImlzQXJyYXkiLCJyZW1haW5pbmciLCJtYW5hZ2VSZXNwb25zZSIsImNvbnN0cnVjdG9yIiwiXyIsInJhY2UiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJpc1ByZWNhY2hpbmdFbmFibGVkIiwicHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX3ByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWNoZWQiLCJkaXJlY3Rpb24iLCJwZWVyQ29ubmVjdGlvbiIsImNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jYWxsZWUzIiwiZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIiwiY29uZmlndXJhdGlvbiIsIl9hcmdzMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImNyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3VwcG9ydHNBZGRUcmFuc2NlaXZlciIsInZpZGVvVHJhbnNjZWl2ZXIiLCJhdWRpb1RyYW5zY2VpdmVyIiwib3B0aW9ucyIsImFkZFRyYW5zY2VpdmVyIiwidDAiLCJ0MSIsInQyIiwiY3JlYXRlT2ZmZXIiLCJ0MyIsImxvY2FsT2ZmZXIiLCJvZmZlclRvUmVjZWl2ZUF1ZGlvIiwib2ZmZXJUb1JlY2VpdmVWaWRlbyIsInQ0IiwidDUiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwiU2RwUGFyc2VyIiwidXBkYXRlU3RhdGlzdGljVGltZW91dCIsIlJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwibWVkaWFTdHJlYW0iLCJlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3BlZXJDb25uZWN0aW9uIiwiX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfdHJhY2tzVG9Nb25pdG9yIiwiZ2V0VHJhY2tzIiwibWFwIiwidHJhY2siLCJnZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCIsInBhcnNlZFNEUCIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsInNkcCIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsInVwZGF0ZVN0YXRpc3RpYyIsIl9ydGNTdGF0aXN0aWMiLCJfaXNNb25pdG9yUnVubmluZyIsIl91cGRhdGVUaW1lb3V0IiwiX3VwZGF0ZVN0YXRpc3RpYyIsIl9pZ25vcmVkIiwiZ2V0S2luZEZvclNhZmFyaTExIiwiZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCIsInVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRpc3RpY3MiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIiwicmVwb3J0IiwiY3VycmVudFJvdW5kVHJpcFRpbWUiLCJtZWRpYVR5cGUiLCJjb2RlYyIsImNvZGVjSWQiLCJtaW1lVHlwZSIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjIiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYzIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NCIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjUiLCJieXRlcyIsImJ5dGVzUmVjZWl2ZWQiLCJwcmV2aW91c0J5dGVzUmVjZWl2ZWQiLCJieXRlc0RlbHRhIiwidGltZURlbHRhIiwiYml0cmF0ZSIsInNzcmMiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwiX3VwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImdldFN0YXRzTGVnYWN5IiwibmFtZXMiLCJzdGF0IiwiX3NkcCIsInNkcFNwbGl0QnlMaW5lcyIsInNkcFNwbGl0QnlUcmFja3MiLCJfYXVkaW9Db2RlYyIsImFwcGx5Q29kZWMiLCJfdmlkZW9Db2RlYyIsIl9pc0F1ZGlvVHJhY2tFbmFibGVkIiwiaXNUcmFja0J5VHlwZUVuYWJsZWQiLCJfaXNWaWRlb1RyYWNrRW5hYmxlZCIsInNkcFNlY3Rpb25Gb3JUeXBlIiwiZmluZCIsInNkcFRyYWNrIiwidXNlZENvZGVjTGluZSIsInNkcExpbmUiLCJ1c2VkQ29kZWMiLCJjb2RlY05hbWUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQiLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1BlZXJDb25uZWN0aW9uIiwiY3VycmVudExvY2FsRGVzY3JpcHRpb24iLCJjb25uZWN0aW9uU3RhdGUiLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsImdldFRyYW5zY2VpdmVyc0Rpc2FibGVkIiwiZ2V0VHJhbnNjZWl2ZXJzIiwiX2NyZWF0ZU9mZmVyIiwicHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQiLCJfY3JlYXRlQW5zd2VyIiwiY3JlYXRlQW5zd2VyIiwiX3gyIiwiX3NldExvY2FsRGVzY3JpcHRpb24iLCJkZXNjcmlwdGlvbiIsInNldExvY2FsRGVzY3JpcHRpb24iLCJSVENTZXNzaW9uRGVzY3JpcHRpb24iLCJfeDMiLCJfc2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfY2FsbGVlNCIsIl9kZXNjcmlwdGlvbiRzZHAiLCJoYXNDcnlwdG8iLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJzZXRSZW1vdGVEZXNjcmlwdGlvbiIsIl94NCIsImdldFNlbmRlcnMiLCJnZXRSZWNlaXZlcnMiLCJzZWxlY3RvciIsIl90aGlzMyIsImFkZFN0cmVhbSIsIl90aGlzNCIsImFkZFRyYWNrIiwib250cmFjayIsImhhbmRsZXIiLCJvbmljZWNhbmRpZGF0ZSIsIm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwib25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJjbG9zZSIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbiIsInN1YmplY3QiLCJfc3ViamVjdCIsInN1YnNjcmliZSIsIkRpc3Bvc2FibGVMaXN0ZW5lciIsIl9EaXNwb3NhYmxlIiwibGlzdGVuZXJzIiwiX2NhbGxTdXBlciIsIl9pbmhlcml0cyIsIl9saXN0ZW5lcnMiLCJjaGFuZ2VkIiwiY29tcGFyYWJsZSIsImVxdWFscyIsImJhc2VVUkwiLCJvcmlnaW4iLCJEaXNjb3ZlcnlVcmkiLCJfY2xpZW50U2Vzc2lvbklkIiwiX2xvYWRlZFRpbWVzdGFtcCIsIl9yZWFkT25seUluaXRpYWxpemVkIiwiX3JlYWRPbmx5RGlzY292ZXJ5VXJpIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSIsIl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsIl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0IiwiX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyIsIl93ZWJQbGF5ZXJMb2FkZXIiLCJfc2hha2FQbGF5ZXJMb2FkZXIiLCJfaGxzSnNMb2FkZXIiLCJfbWV0cmljc1NlcnZpY2UiLCJfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfdGVsZW1ldHJ5VXJsIiwiX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJyZXRyaWVzQW1vdW50IiwiX3RlbGVtZXRyeUxldmVsIiwiYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwidGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsImlnbm9yZWRFbnZpcm9ubWVudCIsImlnbm9yZWREaXNjb3ZlcnlVcmkiLCJ0ZWxlbWV0cnlVcmwiLCJ0ZWxlbWV0cnlBcHBlbmRlciIsImlnbm9yZWRUZW5hbmN5IiwiYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbiIsImlnbm9yZWRUZWxlbWV0cnlMZXZlbCIsImFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJkaXNjb3ZlcnlVcmkiLCJjaGFubmVsVG9rZW4iLCJ1cmlWYWx1ZSIsImJhc2VVUklWYWx1ZSIsImluaXQiLCJfaW5pdGlhbGl6ZWQiLCJwZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJjb25zb2xlTG9nZ2luZ0xldmVsIiwiY29uc29sZUFwcGVuZGVyIiwiYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwid2ViUGxheWVyTG9hZGVyIiwic2hha2FQbGF5ZXJMb2FkZXIiLCJobHNKc0xvYWRlciIsIl9TREsiLCJhZGRXaW5kb3dFdmVudExpc3RlbmVyIiwic2VnbWVudHMiLCJwcm90b2NvbCIsInVuc2hpZnQiLCJlbmRzV2l0aCIsIkJpdHJhdGVTdGF0ZSIsIkJpdHJhdGVNb2RlIiwiRGltZW5zaW9uIiwiQ2hhbm5lbFN0YXRlIiwiVmlkZW9UZWxlbWV0cnkiLCJTZXNzaW9uVGVsZW1ldHJ5IiwiVG9rZW5Db250ZXh0IiwiQ2hhbm5lbENvbnRleHQiLCJFbmNvZGVkU3RyZWFtU2luayIsIlN0cmVhbVRyYWNrVHJhbnNmb3JtIiwiU3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIlBlZXJDb25uZWN0aW9uQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsIkZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IiwiU3RyZWFtRmFjdG9yeSIsIkRpc2NvdmVyeSIsImRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiIsImZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwic3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiQ2hhbm5lbCIsInZpZGVvRWxlbWVudCIsImNoYW5uZWxDb250ZXh0T3B0aW9ucyIsInRhcmdldExhZyIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImVuY29kZWRWaWRlb1N0cmVhbVNpbmsiLCJlbmNvZGVkQXVkaW9TdHJlYW1TaW5rIiwiX3Rva2VuQ29udGV4dCIsIl9jaGFubmVsQ29udGV4dCIsIl9wZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIl9zdGF0ZUNvbnRleHQiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uIiwiX3JlYWRPbmx5U3RhdGUiLCJzdGF0ZSIsIl9yZWFkT25seUF1dG9NdXRlZCIsImF1dG9NdXRlZCIsIl9yZWFkT25seUF1dG9QYXVzZWQiLCJhdXRvUGF1c2VkIiwiX3JlYWRPbmx5VG9rZW5FeHBpcmluZyIsInRva2VuRXhwaXJpbmciLCJfcmVhZE9ubHlBdXRob3JpemVkIiwiYXV0aG9yaXplZCIsIl9yZWFkT25seU9ubGluZSIsIm9ubGluZSIsIl9yZWFkT25seUxvYWRpbmciLCJsb2FkaW5nIiwiX3JlYWRPbmx5UGxheWluZyIsInBsYXlpbmciLCJfcmVhZE9ubHlTdGFuZGJ5Iiwic3RhbmRieSIsIl9yZWFkT25seVN0b3BwZWQiLCJzdG9wcGVkIiwiX3JlYWRPbmx5VGFyZ2V0TGFnIiwiX3JlYWRPbmx5TGFnIiwibGFnIiwiX3JlYWRPbmx5Qml0cmF0ZUxpbWl0IiwiYml0cmF0ZUxpbWl0IiwiX3JlYWRPbmx5UmVzb2x1dGlvbiIsInJlc29sdXRpb24iLCJfcmVhZE9ubHlGYWlsdXJlQ291bnQiLCJmYWlsdXJlQ291bnQiLCJfcmVhZE9ubHlFbmRQb2ludCIsImVuZFBvaW50IiwiX3JlYWRPbmx5U3RyZWFtIiwic3RyZWFtIiwiX3JlYWRPbmx5UnRjU3RhdGlzdGljcyIsIl9yZWFkT25seU1lZGlhU3RyZWFtIiwiX3Nlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJfZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQiLCJjb25maWd1cmVGcmFtZVRpbWluZ0luZm9ybWF0aW9uIiwiX3JlYWRPbmx5SXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uRW5hYmxlZCIsImlzRW5hYmxlZCIsIl9yZWFkT25seURlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIiwiZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJfcmVhZE9ubHlSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJyZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0Iiwic2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSIsInNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyIsIlN0b3BwZWQiLCJyZXN0YXJ0QWZ0ZXJTdG9wIiwiY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0IiwiUGxheWluZyIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJLZWVwIiwiTm9ybWFsIiwiZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsInJlbW92ZVdpbmRvd0V2ZW50TGlzdGVuZXIiLCJzdGFydCIsInBhdXNlIiwic3JjT2JqZWN0IiwiSW5pdGlhbGl6aW5nIiwid2lkdGgiLCJ2aWRlb1dpZHRoIiwiaGVpZ2h0IiwidmlkZW9IZWlnaHQiLCJlbXB0eSIsImRpc3Bvc2FibGVzIiwic2V0Qml0cmF0ZUxpbWl0IiwiY2xlYXJCaXRyYXRlTGltaXQiLCJiaXRyYXRlSW5CaXRzUGVyU2Vjb25kIiwiUmVzZXQiLCJ1cGRhdGVUYXJnZXRMYWciLCJfc3RvcCIsImlzU3RhcnRpbmciLCJwcm9jZXNzU3RvcCIsImNsZWFuVXBSZXNvdXJjZXMiLCJfcmVzdW1lIiwicGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJyZXN1bWUiLCJtdXRlIiwibXV0ZWQiLCJ1bm11dGUiLCJfZGlzcG9zZSIsImlzRGlzcG9zZWQiLCJnZXRVcmkiLCJfc3RhcnQiLCJwcm9jZXNzU3RhcnQiLCJfcHJvY2Vzc1N0YXJ0IiwiX2NhbGxlZTUiLCJfdGhpczUiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwiX1N0cmVhbVRyYWNrVHJhbnNmb3JtIiwidmFsaWQiLCJ2YWxpZGF0aW9uUmVzdWx0IiwiX1N0cmVhbVRyYWNrVHJhbnNmb3JtMiIsIl92YWxpZCIsIl92YWxpZGF0aW9uUmVzdWx0IiwiX0VuY29kZWRTdHJlYW1TaW5rJHZhIiwiX3ZhbGlkMiIsIl92YWxpZGF0aW9uUmVzdWx0MiIsIl9FbmNvZGVkU3RyZWFtU2luayR2YTIiLCJfdmFsaWQzIiwiX3ZhbGlkYXRpb25SZXN1bHQzIiwiaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2siLCJoYXNFbmNvZGVkU3RyZWFtU2luayIsImhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayIsInN0cmVhbVBsYXllciIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsIlN0YXJ0aW5nIiwiVW5hdXRob3JpemVkIiwidmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtIiwiQ29uZmlndXJhdGlvbkVycm9yIiwidmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luayIsImlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQiLCJVbnN1cHBvcnRlZEZlYXR1cmUiLCJSZWNvdmVyaW5nIiwiY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQiLCJoYW5kbGVTdHJlYW1GYWlsdXJlIiwiY3JlYXRlIiwiQ2xpZW50U3RhcnRFcnJvciIsImZpbmFsbHkiLCJhdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSIsInRpbWVvdXRJZCIsImdldFJldHJ5SW50ZXJ2YWwiLCJfcmVzdGFydEFmdGVyU3RvcCIsIl9jYWxsZWU2IiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwiX3BsYXkiLCJfY2FsbGVlNyIsIl9jYWxsZWU3JCIsIl9jb250ZXh0NyIsInBsYXkiLCJTdGFuZEJ5IiwiT2ZmbGluZSIsIkdlb1Jlc3RyaWN0ZWQiLCJHZW9CbG9ja2VkIiwiUGF1c2VkIiwiUmVjb25uZWN0aW5nIiwiVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yIiwiQ29ubmVjdGlvbkVycm9yIiwiX2hhbmRsZVN0cmVhbUZhaWx1cmUiLCJfY2FsbGVlOCIsIl9jYWxsZWU4JCIsIl9jb250ZXh0OCIsIl90aGlzNiIsImZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQiLCJza2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMiLCJkZXN0cm95U3RyZWFtIiwicGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsIl90aGlzNyIsImZyYW1lVGltaW5nSW5mb3JtYXRpb25DYXBhYmlsaXR5IiwiY2FwYWJpbGl0eSIsInNob3VsZEV4dHJhY3RUaW1lY29kZSIsInNob3VsZEV4dHJhY3RUaW1lc3RhbXBzIiwiaXNDaGFubmVsRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZCIsIm9wdGlvbiIsInRyaW0iLCJfcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJfY2FsbGVlOSIsIl90aGlzOCIsInBsYXlQcm9taXNlIiwiX2NhbGxlZTkkIiwiX2NvbnRleHQ5IiwiaGFzQXVkaW9UcmFjayIsImZpbHRlciIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIiwiQ2hhbm5lbHMiLCJjcmVhdGVDaGFubmVsIiwiaW5pdGlhbGl6ZWQiLCJjaGFubmVsT3B0aW9ucyIsImRlZmF1bHRUYXJnZXRMYWciLCJfb3B0aW9ucyR0YXJnZXRMYWciLCJhcHBseVN0YXR1cyIsImFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCIsIm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsIkJpdHN0cmVhbVJlYWRlciIsIl9kYXRhIiwiX2JpdE9mZnNldCIsInJlYWRCaXRzIiwiYml0c1RvUmVhZCIsImdldFJlbWFpbmluZ0JpdHMiLCJiaXRzUmVtYWluaW5nIiwiYnl0ZU9mZnNldCIsImJpdFBvc2l0aW9uSW5CeXRlIiwiYml0c0F2YWlsYWJsZUluQnl0ZSIsIm1pbiIsIm1hc2siLCJieXRlVmFsdWUiLCJiaXRzIiwic2tpcEJpdHMiLCJiaXRzVG9Ta2lwIiwiRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQiLCJIMjY0Qml0c3RyZWFtIiwiZXZlbnRQdWJsaXNoZXIiLCJfZXZlbnRQdWJsaXNoZXIiLCJzdWJzY3JpYmVUb05hbFVuaXQiLCJuYWxVbml0VHlwZSIsIk5hbFVuaXQiLCJuYWxVbml0RXZlbnQiLCJzdWJzY3JpYmVUb1NlaVBheWxvYWRUeXBlIiwic2VpUGF5bG9hZFR5cGUiLCJTZWlQYXlsb2FkIiwic2VpUGF5bG9hZEV2ZW50Iiwic3Vic2NyaWJlVG9QYXlsb2FkIiwiY29udGV4dCIsInBheWxvYWRVdWlkIiwicHVibGlzaCIsIlBheWxvYWRTdWJzY3JpcHRpb24iLCJQYXlsb2FkIiwicGF5bG9hZEV2ZW50IiwiTmFsVW5pdFR5cGUiLCJTZWlQYXlsb2FkVHlwZSIsIkVtdWxhdGlvblByZXZlbnRpb25CeXRlcyIsIkFubmV4QkJ5dGVTdHJlYW1QYXJzZXIiLCJ2Y2xFeHRyYWN0aW9uU3RyYXRlZ3kiLCJfdmNsRXh0cmFjdGlvblN0cmF0ZWd5Iiwic3Vic2NyaWJlVG9FbmNvZGVkVmlkZW9TdHJlYW1DaHVua0V2ZW50cyIsIkVuY29kZWRWaWRlb1N0cmVhbUNodW5rIiwicGFyc2VFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayIsImNodW5rIiwiaGFuZGxlRXh0cmFjdGVkRGF0YSIsImV4dHJhY3ROYWxVbml0QXRPZmZzZXQiLCJub3RpZnlFbmRPZkNodW5rIiwiYW5uZXhCU3RhcnRDb2RlTGVuZ3RoIiwibmFsVW5pdCIsInNlaVBheWxvYWRzIiwicHVibGlzaE5hbFVuaXQiLCJoYW5kbGVTZWlQYXlsb2FkIiwic2VpUGF5bG9hZCIsInB1Ymxpc2hTZWlQYXlsb2FkIiwiVXNlckRhdGFVbnJlZ2lzdGVyZWQiLCJoYW5kbGVTZWlQYXlsb2FkVXNlckRhdGFVbnJlZ2lzdGVyZWQiLCJzdWJhcnJheSIsInBheWxvYWREYXRhIiwicHVibGlzaFBheWxvYWQiLCJwYXlsb2FkIiwiRW5kT2ZDaHVuayIsIm5hbFVuaXRIZWFkZXJJbmRleCIsImV4dHJhY3RlZERhdGEiLCJTbGljZUxheWVyTm9uSWRyRGF0YSIsIlNsaWNlRGF0YVBhcnRpdGlvbkFMYXllciIsIlNsaWNlRGF0YVBhcnRpdGlvbkJMYXllciIsIlNsaWNlRGF0YVBhcnRpdGlvbkNMYXllciIsIlNsaWNlTGF5ZXJJZHJEYXRhIiwiZXh0cmFjdFZjbE5hbFVuaXQiLCJTdXBwbGVtZW50YWxFbmhhbmNlbWVudEluZm9ybWF0aW9uIiwiZXh0cmFjdFNlaU5hbFVuaXQiLCJleHRyYWN0Tm9uVmNsTmFsVW5pdCIsIm5hbFVuaXREYXRhIiwiX3NlaVBheWxvYWQ0Qnl0ZUVuZENvZGUiLCJfc2VpUGF5bG9hZDNCeXRlRW5kQ29kZSIsImV4dHJhY3RlZFNlaVBheWxvYWQiLCJleHRyYWN0U2VpUGF5bG9hZCIsInBheWxvYWRUeXBlIiwiZW5kSW5kZXgiLCJuZXh0QW5uZXhCU3RhcnRDb2RlSW5kZXgiLCJmaW5kQW5uZXhCU3RhcnRJbmRleEZyb21PZmZzZXQiLCJmZkNvdW50IiwicGF5bG9hZFNpemUiLCJnZXRPZmZzZXRXaXRoRXhwYW5kZWRFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMiLCJpbmRleDQiLCJhbm5leEI0Qnl0ZVN0YXJ0Q29kZSIsImFubmV4QjNCeXRlU3RhcnRDb2RlIiwiVWludDhBcnJheSIsImJ1ZmZlciIsIm51bWJlck9mTm9uRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIiwibGVhZGluZ1plcm9CeXRlcyIsIm51bWJlck9mQnl0ZXNWaXNpdGVkIiwibnVtYmVyT2ZCeXRlc1RvU2VlayIsInJlbW92ZUVtdWxhdGlvblByZXZlbnRpb25CeXRlcyIsIm91dHB1dCIsIm91dE9mZnNldCIsImVic3BPZmZzZXQiLCJwcmV2ZW50aW9uQnl0ZUlkeCIsIlBpY1N0cnVjdCIsIlBpY3R1cmVUaW1pbmdQYXJzZXIiLCJjb25maWciLCJiaXRzdHJlYW1SZWFkZXIiLCJwaWN0dXJlVGltaW5nIiwicGljU3RydWN0IiwiY3BiRHBiRGVsYXlzUHJlc2VudEZsYWciLCJjcGJSZW1vdmFsRGVsYXlMZW5ndGhNaW51czEiLCJkcGJPdXRwdXREZWxheUxlbmd0aE1pbnVzMSIsInBpY1N0cnVjdFByZXNlbnRGbGFnIiwibnVtQ2xvY2tUUyIsImNvbnZlcnRQaWNTdHJ1Y3RUb051bUNsb2NrVFMiLCJjbG9ja1RpbWVzdGFtcHMiLCJjbG9ja1RpbWVzdGFtcEZsYWciLCJjbG9ja1RpbWVzdGFtcCIsImN0VHlwZSIsIm51aXRGaWVsZEJhc2VkRmxhZyIsImNvdW50aW5nVHlwZSIsImZ1bGxUaW1lc3RhbXBGbGFnIiwiZGlzY29udGludWl0eUZsYWciLCJjbnREcm9wcGVkRmxhZyIsIm5GcmFtZXMiLCJzZWNvbmRzIiwibWludXRlcyIsImhvdXJzIiwic2Vjb25kc0ZsYWciLCJtaW51dGVzRmxhZyIsImhvdXJzRmxhZyIsInRpbWVPZmZzZXQiLCJQcm9ncmVzc2l2ZUZyYW1lIiwiVG9wRmllbGQiLCJCb3R0b21GaWVsZCIsIlRvcEZpZWxkQm90dG9tRmllbGQiLCJCb3R0b21GaWVsZFRvcEZpZWxkIiwiRnJhbWVEb3VibGluZyIsIlRvcEZpZWxkQm90dG9tRmllbGRUb3BGaWVsZFJlcGVhdGVkIiwiQm90dG9tRmllbGRUb3BGaWVsZEJvdHRvbUZpZWxkUmVwZWF0ZWQiLCJGcmFtZVRyaXBsaW5nIiwiUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kiLCJuZXh0UG90ZW50aWFsNEJ5dGVTdGFydENvZGVJbmRleCIsIl90cnVuY2F0ZWRWY2xOYWxVbml0Qnl0ZUxlbmd0aCIsIm5leHRQb3RlbnRpYWwzQnl0ZVN0YXJ0Q29kZUluZGV4IiwiVmFuaWxsYVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kiLCJFdmVudFB1Ymxpc2hlciIsIlBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMiLCJIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIiwiUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIiLCJCaXRzdHJlYW1EZWNvZGVycyIsImNyZWF0ZUgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIiLCJkZWNvZGVyRXZlbnRQdWJsaXNoZXIiLCJiaXRzdHJlYW0iLCJwYXJzZXIiLCJjcmVhdGVQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlciIsImgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIiLCJlbmNvZGluZyIsIl9iaXRzdHJlYW0iLCJfcGFyc2VyIiwiZGVjb2RlIiwiZW5jb2RlZE1lZGlhU3RyZWFtQ2h1bmsiLCJfaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciIsIl9lbmNvZGluZyIsInN1YnNjcmliZVRvRW1iZWRkZWREYXRhIiwib25EZWNvZGVkTWVkaWFDaHVuayIsInRyYWNrSWQiLCJkZWNvZGVkTWVkaWFDaHVua0V2ZW50Iiwibm9vcCIsIlNldCIsIk1hcCIsImVuYWJsZVdhcm5pbmdMb2dXaGVuVmNsRW1iZWRkZWREYXRhTm90Rm91bmQiLCJfZXhwZWN0ZWRQYXlsb2FkVXVpZCIsIl9waGVuaXhWY2xFbWJlZGRlZERhdGFVdWlkIiwiX3BoZW5peEluaXRpYWxpemF0aW9uU2VnbWVudFV1aWQiLCJzdWJzY3JpYmVUb1BheWxvYWRFdmVudHMiLCJzdWJzY3JpYmVUb1BheWxvYWRTdWJzY3JpcHRpb25FdmVudHMiLCJzdWJzY3JpYmVUb05hbFVuaXRFdmVudHMiLCJfZW5hYmxlV2FybmluZ0xvZ1doZW5WY2xFbWJlZGRlZERhdGFOb3RGb3VuZCIsIl9lbmRPZkNodW5rSGFuZGxlcnNCeVRyYWNrSWQiLCJjbGVhciIsInN1YnNjcmliZVRvRW5kT2ZDaHVua0V2ZW50cyIsImFybUxvZ2dpbmdOb1ZjbEVtYmVkZGVkRGF0YUZvdW5kIiwiaGFuZGxlTmFsVW5pdEV2ZW50IiwiX3JlZjMiLCJfdHJ1bmNhdGVkVmNsTmFsVW5pdERhdGFCeXRlTGVuZ3RoIiwicHVibGlzaFZjbEVtYmVkZGVkUGF5bG9hZCIsImV4dHJhY3RWY2xFbWJlZGRlZERhdGEiLCJkaXNhcm1Mb2dnaW5nTm9WY2xFbWJlZGRlZERhdGFGb3VuZCIsIl9yZWY0IiwibG9nV2FybmluZ1ZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kIiwiY29udGV4dElkIiwiaGFuZGxlRW5kT2ZFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayIsIl9yZWY1IiwiZW5kT2ZDaHVua0V2ZW50SGFuZGxlciIsImhhbmRsZVBheWxvYWRFdmVudCIsIl9yZWY2IiwiaGFzIiwibG9nV2FybmluZ1VuZXhwZWN0ZWRQYXlsb2FkVXVpZFJlY2VpdmVkT25jZSIsIkV2ZW50RW1pdHRlciIsImRlbGV0ZSIsImVtaXQiLCJldmVudCIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImVyciIsImYiLCJvbkV2ZW50V2l0aE5vU3Vic2NyaWJlciIsIm9uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlciIsIl9vbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXJzIiwiZXZlbnRUeXBlIiwiZW1pdHRlciIsIl9ldmVudEVtaXR0ZXJzIiwiY3JlYXRlRW1pdHRlciIsImRpc3Bvc2FibGVMaXN0ZW5lciIsImRlZmF1bHREaXNjb3ZlcnlVcmkiLCJCaXRyYXRlTW9kZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZSIsImJpdHJhdGVNb2RlIiwiRm9yY2UiLCJCaXRyYXRlU3RhdGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZSIsImJpdHJhdGVTdGF0ZSIsIkRpc2NvdmVyeVNlcnZpY2UiLCJkaXNjb3ZlcnlDYWNoZUludGVydmFsIiwiX3ByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsInByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5IiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJkaXNjb3ZlcnlTZXJ2aWNlIiwiY2FjaGVkVmFsdWUiLCJfY2FjaGUiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsIkVuZFBvaW50IiwiZGVmYXVsdFRpbWVvdXQiLCJfdXJpIiwiX2Rpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwidGltZW91dCIsImFzU3RyaW5nIiwiZW5kUG9pbnRzIiwib2siLCJ0ZXh0IiwiZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJmYWlsZWRSZXF1ZXN0cyIsInByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkIiwiX2FyZ3MyIiwiYnVpbGREaXNjb3ZlcnlVcmwiLCJwaW5nIiwidGltZSIsIl9kaXNjb3ZlcnlVcmkiLCJkaXNjb3ZlcnlQYXJhbWV0ZXJzIiwic2VhcmNoUGFyYW1zIiwiYXBpVmVyc2lvbiIsIl90aW1lb3V0IiwiX3JvdW5kVHJpcFRpbWUiLCJfcGluZyIsImZpbmlzaGVkIiwiYnVpbGRQaW5nVXJsIiwiX3N1YnNjcmliZSIsImxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uIiwiY2xpZW50VmVyc2lvbiIsImJvZHlXaXRoT2ZmZXIiLCJib2R5V2l0aG91dE9mZmVyIiwiaHR0cFJlc3BvbnNlIiwic3Vic2NyaWJlUmVzcG9uc2UiLCJidWlsZFVybCIsImJlYXJlclRva2VuIiwiaHR0cFJvdW5kVHJpcFRpbWUiLCJzZXNzaW9uRGVzY3JpcHRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb24iLCJtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsIl9wdWJsaXNoIiwibWFwSHR0cFN0YXR1c1RvUHVibGlzaFN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl94NSIsIl94NiIsIl94NyIsInNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJzaGFyZWRTZWNyZXQiLCJtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfeDgiLCJfeDkiLCJfbGltaXRCaXRyYXRlIiwibWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3gxNCIsIl9hZGRJY2VDYW5kaWRhdGVzIiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsImFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9hcmdzNiIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJhZGRJY2VDYW5kaWRhdGVzIiwiX3gxNSIsIl94MTYiLCJfeDE3IiwiX2Rlc3Ryb3lTdHJlYW0iLCJkZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX3gxOCIsIl94MTkiLCJfZGVzdHJveVN0cmVhbU9uVW5tb3VudCIsInNlbmRCZWFjb24iLCJfeDIwIiwiX3gyMSIsInBhdGgiLCJwYXRoQXNBcnJheSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjIiLCJfeDIzIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCIsInB1Ymxpc2hSZXNwb25zZSIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiX3gyNCIsIl94MjUiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiX3gyNiIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfY2FsbGVlMTIiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsIl94MjciLCJfY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlIiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJfeDI4IiwiSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyIiwiY2hhbm5lbENvbnRleHQiLCJmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCIsIl9iaXRzdHJlYW1EZWNvZGVyIiwiX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wIiwiX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzIiwic2V0dXBWaWRlb0V2ZW50TGlzdGVuZXJzIiwiUGljdHVyZVRpbWluZyIsIm9uUGljdHVyZVRpbWluZ0V4dHJhY3RlZCIsInByb2Nlc3NGcmFtZSIsIm1pZCIsImZyYW1lIiwiZnJhbWVUaW1pbmciLCJyZWNlaXZlVGltZXN0YW1wIiwicmVtb3ZlRnJhbWVUaW1pbmdzRXhjZWVkaW5nTWF4Q2FwYWNpdHkiLCJydHBUaW1lc3RhbXAiLCJfcGljdHVyZVRpbWluZyRwaWNTdHIiLCJfcGljdHVyZVRpbWluZyRwaWNTdHIyIiwiX2Nsb2NrVGltZXN0YW1wJGhvdXJzIiwiX2Nsb2NrVGltZXN0YW1wJG1pbnV0IiwiX2Nsb2NrVGltZXN0YW1wJHNlY29uIiwiX3JlZiRjb250ZXh0IiwiX3BpY3R1cmVUaW1pbmdQYXJzZXIiLCJfcGljdHVyaW5nVGltaW5nUGFyc2luZ0NvbmZpZyIsInRpbWVjb2RlIiwiZnJhbWVzIiwiaXNGcmFtZURyb3AiLCJzb3VyY2VUaW1lc3RhbXAiLCJpbmdlc3RUaW1lc3RhbXAiLCJlbmNvZGVUaW1lc3RhbXAiLCJ0cmFuc2NvZGVUaW1lc3RhbXAiLCJwbGF5YmFja1N0YXRlIiwiX2N1cnJlbnRQbGF5YmFja1N0YXRlIiwidmlkZW9GcmFtZUNhbGxiYWNrIiwibWV0YWRhdGEiLCJhcm1WaWRlb0ZyYW1lQ2FsbGJhY2siLCJ0aW1lc3RhbXBzVG9EZWxldGUiLCJfc3RlcCR2YWx1ZSIsIl9zbGljZWRUb0FycmF5IiwiX29iamVjdFNwcmVhZCIsInJlbmRlclRpbWVzdGFtcCIsInBlcmZvcm1hbmNlIiwidGltZU9yaWdpbiIsIl9pIiwiX3RpbWVzdGFtcHNUb0RlbGV0ZSIsImVsZW1lbnRzVG9EZWxldGUiLCJzaXplIiwiTUFYX0ZSQU1FX1RJTUlOR19FTlRSSUVTIiwiaXRlcmF0b3IiLCJrZXlzIiwia2V5VG9EZWxldGUiLCJvblBsYXlpbmciLCJvblBhdXNlIiwib25TdGFsbGVkIiwib25XYWl0aW5nIiwib25FbmRlZCIsIm9uRXJyb3IiLCJfYXJtZWRWaWRlb0ZyYW1lQ2FsbGJhY2tJZCIsIl90aGlzMiRfY2hhbm5lbENvbnRleCIsImNhbmNlbFZpZGVvRnJhbWVDYWxsYmFjayIsIl90aGlzJF9jaGFubmVsQ29udGV4dCIsIkNodW5rZWRTdHJlYW1pbmciLCJOZXR3b3JrU3RhdGVzIiwiQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSIsIkNodW5rZWRTdHJlYW0iLCJjaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlIiwiX2NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUiLCJvZmZlclNkcCIsIm9yaWdpblN0YXJ0VGltZSIsInBsYXllciIsIm1vbml0b3IiLCJfbW9uaXRvckRpc3Bvc2FibGVzIiwibmV3U3RyZWFtU3RhdGlzdGljcyIsIkxpdmUiLCJuZXR3b3JrU3RhdGUiLCJOZXR3b3JrTm9Tb3VyY2UiLCJjdXJyZW50VGltZSIsImR1cmF0aW9uIiwiX21vbml0b3JGYWlsdXJlQ291bnQiLCJfc3RyZWFtU3RhdGlzdGljcyIsInBhdXNlZCIsImRhdGFCdWZmZXJlZCIsIldlYlBsYXllciIsIlNoYWthUGxheWVyIiwiSGxzUGxheWVyIiwiX2hsc1BsYXllciIsIl9waGVuaXhXZWJQbGF5ZXIiLCJfc2hha2EiLCJfb3B0aW9ucyIsImxvYWRlZCIsIl9wZW5kaW5nIiwiX3BsYXllciIsIlBsYXllciIsImRhc2hNYW5pZmVzdFVybE1hdGNoIiwiaGxzTWFuaWZlc3RVcmxNYXRjaCIsIm1hbmlmZXN0VXJsIiwicGxheWxpc3RVcmwiLCJzaG91bGRVc2VOYXRpdmVIbHMiLCJwcmVmZXJOYXRpdmUiLCJtYW5pZmVzdFVSSSIsIl92aWRlb0VsZW1lbnQiLCJfa2luZCIsIl9zdHJlYW1JZCIsIl9tYW5pZmVzdFVSSSIsImVuY29kZVVSSSIsInJlcGxhY2UiLCJobHNQbGF5ZXIiLCJlbmFibGVXb3JrZXIiLCJtYXhCdWZmZXJMZW5ndGgiLCJiYWNrQnVmZmVyTGVuZ3RoIiwibGl2ZVN5bmNEdXJhdGlvbiIsImxpdmVEdXJhdGlvbkluZmluaXR5IiwibGl2ZU1heExhdGVuY3lEdXJhdGlvbiIsIkluZmluaXR5IiwiaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kIiwibG9hZFNvdXJjZSIsImF0dGFjaE1lZGlhIiwiY2FuUGxheVR5cGUiLCJzdGF0aXN0aWNzIiwibWVkaWEiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsIk5ldHdvcmtJZGxlIiwiYnVmZmVyZWQiLCJlbmQiLCJzdHJlYW1Db250cm9sbGVyIiwiTmV0d29ya0xvYWRpbmciLCJOZXR3b3JrRW1wdHkiLCJ0cnVlQ3VycmVudFRpbWUiLCJtYXgiLCJkZXN0cm95IiwiSW5zZXJ0YWJsZVN0cmVhbXMiLCJpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCIsImRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQiLCJSZWFsVGltZVN0cmVhbSIsInBlZXJDb25uZWN0aW9uQ29udGV4dCIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHQiLCJyZXF1aXJlc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyIsIl9yZWYzJCIsImNsaWVudE9mZmVyRGlzYWJsZWQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJhcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJzdWJtaXRDYW5kaWRhdGVzVGltZW91dCIsImNhbmNlbERpc2NvdmVyeSIsImNhbmRpZGF0ZSIsInJldHJ5Q2FsbGJhY2siLCJuYXZpZ2F0b3JJc09uTGluZSIsInJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwibWVkaWFTdHJlYW1Qcm9taXNlIiwib25UcmFja0Rpc2FibGVkIiwic3RyZWFtcyIsInRyYWNrTGlzdGVuZXIiLCJhbnN3ZXIiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsInBhcnNlZFJlbW90ZURlc2NyaXB0aW9uIiwicmVjZWl2ZXJzIiwiX0luc2VydGFibGVTdHJlYW1zJGNvIiwiY29uZmlndXJlRW5jb2RlZFN0cmVhbVBpcGVsaW5lIiwiZW5jb2RlZFZpZGVvRnJhbWUiLCJyZXF1aXJlc0ZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJ0b1VwcGVyQ2FzZSIsImZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyIiwiZ2V0VmlkZW9UcmFja3MiLCJfcGVlckNvbm5lY3Rpb24kZ2V0VHIiLCJyZWNlaXZlciIsInN1cHBvcnRzR2V0VHJhbnNjZWl2ZXJzIiwidHJhbnNjZWl2ZXIiLCJfSW5zZXJ0YWJsZVN0cmVhbXMkY28yIiwiY29uZmlndXJlSW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybWF0aW9uIiwidHJhbnNmb3JtZWRTdHJlYW0iLCJydGNDb25uZWN0aW9uTW9uaXRvciIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yU3RhdGlzdGljU3Vic2NyaXB0aW9uIiwicnRjU3RhdGlzdGljIiwicnRjVmlkZW9TdGF0aXN0aWMiLCJydGNBdWRpb1N0YXRpc3RpYyIsImF1ZGlvIiwiYXVkaW9UcmFja0ZhaWxlZCIsInZpZGVvVHJhY2tGYWlsZWQiLCJfYXBwbHlSdGNDb25maWd1cmF0aW9uIiwib3B0aW9uYWxQZWVyQ29ubmVjdGlvbiIsIm5ld1J0Y0NvbmZpZ3VyYXRpb24iLCJtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwiYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiX3BlZXJDb25uZWN0aW9uJGN1cnJlIiwiaXNDbGllbnRPZmZlckZsb3ciLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJfbW9uaXRvcmVkU3RhdGlzdGljcyIsImVzdGltYXRlZEJhbmR3aWR0aCIsInBsYXlUaW1lIiwic2hha2EiLCJwbGF5ZXJPcHRpb25zIiwiYWJyIiwiZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlIiwibWFuaWZlc3QiLCJyZXRyeVBhcmFtZXRlcnMiLCJzdHJlYW1pbmciLCJsaXZlU3luY1BhbmljVGhyZXNob2xkIiwiYnVmZmVyaW5nR29hbCIsImJ1ZmZlckJlaGluZCIsIm1heEF0dGVtcHRzIiwiYmFja29mZkZhY3RvciIsImxvYWRQbGF5ZXIiLCJ1bmxvYWQiLCJwbGF5ZXJDb25maWciLCJjb25maWd1cmUiLCJsb2FkIiwiY29kZSIsInRva2VuQ2FwYWJpbGl0aWVzIiwiaGFzU3RyZWFtaW5nIiwiaGFzT25EZW1hbmQiLCJPbmREZW1hbmQiLCJiYW5kd2lkdGhUb1N0YXJ0QXQiLCJtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCIsInBoZW5peFdlYlBsYXllciIsImVycm9yT2JqZWN0IiwiY2FuUmVsb2FkIiwic2V2ZXJpdHkiLCJlcnJvcnMiLCJSRUNPVkVSQUJMRSIsInJlbG9hZElmQWJsZSIsIl90aGlzJF92aWRlb0VsZW1lbnQkYiIsIl90aGlzJF92aWRlb0VsZW1lbnQkYjIiLCJpc05hdGl2ZSIsImRlbGl2ZXJ5VHlwZSIsImhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkIiwiX2xhc3RSZWxvYWRUaW1lIiwicmVsb2FkIiwibW9kZSIsIlN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIiLCJTa2lwRnJhbWUiLCJXb3JrZXJUcmFuc2Zvcm1TdHJlYW0iLCJlbmNvZGVkQXVkaW9GcmFtZSIsInJlY2VpdmUiLCJtdXN0U2luayIsIndvcmtlciIsIm9ubWVzc2FnZSIsInBvc3RNZXNzYWdlIiwiZm9yY2VJbnZhbGlkRnJhbWUiLCJ0cmFuc2Zvcm0iLCJ0ZXJtaW5hdGUiLCJlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJjb250cm9sbGVyIiwic3Vycm9nYXRlIiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lIiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvUEZyYW1lIiwiZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlYyIsImdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWMiLCJlbnF1ZXVlIiwidHJhbnNmb3JtZXIiLCJUcmFuc2Zvcm1TdHJlYW0iLCJyZWNlaXZlclN0cmVhbXMiLCJzb3VyY2UiLCJyZWFkYWJsZSIsInNpbmsiLCJ3cml0YWJsZSIsInBpcGVUaHJvdWdoIiwicGlwZVRvIiwiTWVkaWFTdHJlYW0iLCJhdWRpb1B1bXBlciIsIkF1ZGlvIiwiYXBwZW5kQ2hpbGQiLCJyZW1vdmVDaGlsZCIsImdldEludmFsaWRTdXJyb2dhdGVBdWRpb0RhdGEiLCJnZXRTdXJyb2dhdGVBdWRpb1NpbGVudFBlckNvZGVjIiwiaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwidmlkZW9UcmFjayIsInByb2Nlc3NvciIsImdlbmVyYXRvciIsInJlbW92ZVRyYWNrIiwiYXVkaW9UcmFjayIsIlN5bWJvbCIsIl9kdW1teUF1ZGlvU2lsZW50UGVyQ29kZWMiLCJPUFVTIiwiX3NpbmdsZVplcm9CeXRlIiwiX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIiLCJfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciIsIl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQiLCJfZHVtbXk4Mng4MkgyNjQiLCJJRnJhbWUiLCJfZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjIiwiSDI2NCIsIlZQOCIsIlZQOSIsIl9pc0FuZHJvaWRDaHJvbWUiLCJnZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyIiwiX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYyIsInNhdmVkU3Vycm9nYXRlRnJhbWVOdW1iZXIiLCJiaXRNYXNrMSIsImJpdE1hc2syIiwiYml0U2hpZnRSaWdodEJ5MSIsImJpdFNoaWZ0TGVmdEJ5NyIsImJ5dGUxIiwiYnl0ZTIiLCJjb3B5T2ZEdW1teVBGcmFtZXMiLCJQRnJhbWUiLCJidWZmZXJJbmRleCIsIl9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXgiLCJfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciIsImlzQW5kcm9pZCIsIl9pc01vYmlsZUNocm9tZSIsIl9pc1NhZmFyaSIsIl9fQlVJTERfVkVSU0lPTl9fIiwiX2RlZmF1bHRWZXJzaW9uIiwiVGVsZW1ldHJ5U2VydmljZSIsIl90ZWxlbWV0cnlTZXJ2aWNlIiwidmFsdWVPZiIsImxvZ1JlY29yZCIsIl9sb2dzIiwic2VuZExvZ3NJZkFibGUiLCJsb2dNZXNzYWdlcyIsIl9zZW5kTG9nc0lmQWJsZSIsIm51bWJlck9mTG9nc1RvU2VuZCIsInNpemVPZkxvZ3NUb1NlbmQiLCJnZXRJdGVtU2l6ZSIsImdldExvZ1NpemUiLCJzdW0iLCJfZHVyYXRpb24iLCJpc05lZ2F0aXZlIiwiYWJzIiwibWlsbGlzZWNvbmRzIiwicGFydHMiLCJTdHJpbmciLCJ0YXJnZXRMZW5ndGgiLCJwYWRTdHJpbmciLCJyZXBlYXQiLCJkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMiLCJyYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQiLCJvdGhlciIsImFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX25ldHdvcmtNb25pdG9yIiwiaXNGb3JlZ3JvdW5kIiwicmVjb3JkRm9yZWdyb3VuZENoYW5nZSIsInJlY29yZE5ldHdvcmtSVFRVcGRhdGUiLCJyZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSIsImRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwicmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlIiwidGltZVNpbmNlTGFzdENoYW5nZSIsIm5ld1JUVCIsIm9sZFJ0dCIsIl9sYXN0TmV0d29ya1N0YXRpc3RpY3MiLCJuZXdOZXR3b3JrVHlwZSIsIm9sZE5ldHdvcmtUeXBlIiwibmV3Q2FwYWNpdHkiLCJvbGRDYXBhY2l0eSIsImZsb2F0IiwiY2hhbm5lbFN0YXJ0VGltZSIsIl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWUiLCJfbGlzdGVuVG9GaXJzdFRpbWUiLCJjYWxsVGltZVRvRmlyc3RGcmFtZSIsIl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciIsIl9saXN0ZW5Gb3JTdGFsbCIsIm9uU3RhbGwiLCJfbGlzdGVuRm9yQ29udGludWF0aW9uIiwib25Db250aW51YXRpb24iLCJfY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyIiwicHVzaFRpbWVUb0ZpcnN0RnJhbWUiLCJwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl90aW1lVG9GaXJzdEZyYW1lIiwiZHVyYXRpb25TaW5jZVBhZ2VMb2FkIiwiX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdmlkZW9TdGFsbGVkIiwiYnVmZmVyTGVuZ3RoIiwiaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQiLCJfbGFzdFByb2dyZXNzIiwidGltZVNpbmNlU3RvcCIsIm5ld1Jlc29sdXRpb24iLCJfdmlkZW9SZXNvbHV0aW9uIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
13314
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEs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QUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztFQUFFO0VBQ3hMZ2lCLEdBQUcsRUFBRSxJQUFJaGlCLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3pTaWlCLEdBQUcsRUFBRSxJQUFJamlCLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7QUFDcE0sQ0FBQztBQUFBcGlDLDRJQUFBLENBZGtCK2dELHlCQUF5QixrQ0FlVztFQUNyRG9ELElBQUksRUFBRSxJQUFJL2hCLFVBQVUsQ0FBQyxDQUNuQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7RUFBRTtFQUNwQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFBRTtFQUMxR2dpQixHQUFHLEVBQUUsSUFBSWhpQixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztFQUN2UmlpQixHQUFHLEVBQUUsSUFBSWppQixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNoSCxDQUFDO0FBQUFwaUMsNElBQUEsQ0FyQmtCK2dELHlCQUF5QixxQkFzQkY7RUFDeENrRCxNQUFNLEVBQUUsSUFBSTdoQixVQUFVLEVBQ3BCLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtFQUFFO0VBQ2xLLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0VBQUU7RUFDaEQsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUEvK0IsTUFBQSxDQUFBMmEsK0lBQUEsQ0FBSyxJQUFJb2tCLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQ3R3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUUsSUFBSSxHQUFBa00sK0lBQUEsQ0FBSyxJQUFJb2tCLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQ3R3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUUsSUFBSTtFQUFFO0VBQ3ZILElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUFrTSwrSUFBQSxDQUFLLElBQUlva0IsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDdHdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztFQUFFO0VBQ2pTbXpDLE1BQU0sRUFBRSxJQUFJN2lCLFVBQVUsRUFDcEIsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUEvK0IsTUFBQSxDQUFBMmEsK0lBQUEsQ0FBSyxJQUFJb2tCLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQ3R3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUUsSUFBSSxHQUFBa00sK0lBQUEsQ0FBSyxJQUFJb2tCLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQ3R3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUUsSUFBSTtFQUFFO0VBQ3ZILElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUFBOVIsNElBQUEsQ0EvQmtCK2dELHlCQUF5QiwyQ0FnQ29CLEtBQUs7QUFBQS9nRCw0SUFBQSxDQWhDbEQrZ0QseUJBQXlCLDJDQWlDb0IsQ0FBQztBQUFBL2dELDRJQUFBLENBakM5QytnRCx5QkFBeUIsK0NBa0N3QkEsMEJBQXlCLENBQUN1RSxlQUFlLElBQUl2RSwwQkFBeUIsQ0FBQ3dFLFNBQVM7QUFBQXZsRCw0SUFBQSxDQWxDakkrZ0QseUJBQXlCLHNDQW1DTUEsMEJBQXlCLENBQUNnRCxxQ0FBcUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdDbkg7QUFDQTtBQUNBO0FBRkEsSUFLcUI5b0MsY0FBYztFQUFBLFNBQUFBLGVBQUE7SUFBQWxiLDRJQUFBLE9BQUFrYixjQUFBO0VBQUE7RUFBQSxPQUFBM2EseUlBQUEsQ0FBQTJhLGNBQUE7SUFBQTFhLEdBQUE7SUFBQUMsR0FBQSxFQUdqQyxTQUFBQSxJQUFBLEVBQWdDO01BQzlCLElBQUk7UUFDRixPQUFPZ2xELDhDQUFpQjtNQUMxQixDQUFDLENBQUMsT0FBT2o2QyxDQUFDLEVBQUU7UUFDVixPQUFPLElBQUksQ0FBQ2s2QyxlQUFlO01BQzdCO0lBQ0Y7RUFBQztBQUFBO0FBQUF6bEQsNElBQUEsQ0FUa0JpYixjQUFjLHFCQUNBLElBQUloYixJQUFJLENBQUMsQ0FBQyxDQUFDb1UsV0FBVyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNOM0Q7QUFDQTtBQUNBO0FBQ2tEO0FBQUEsSUFLN0I4QyxpQkFBaUI7RUFNcEMsU0FBQUEsa0JBQVkwVixzQkFBOEMsRUFBRTtJQUFBOXNCLDRJQUFBLE9BQUFvWCxpQkFBQTtJQUFBblgsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFDMUQsSUFBSSxDQUFDNFosUUFBUSxHQUFHaVQsc0JBQXNCLENBQUNoVCxPQUFPO0lBQzlDLElBQUksQ0FBQ0MsVUFBVSxHQUFHK1Msc0JBQXNCLENBQUM5UyxTQUFTO0lBQ2xELElBQUksQ0FBQ2pHLFVBQVUsR0FBRytZLHNCQUFzQixDQUFDaFosU0FBUztJQUNsRCxJQUFJLENBQUM4eEMsaUJBQWlCLEdBQUcsSUFBSUQseURBQWdCLENBQUM3NEIsc0JBQXNCLENBQUM7RUFDdkU7RUFBQyxPQUFBdnNCLHlJQUFBLENBQUE2VyxpQkFBQTtJQUFBNVcsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXNULEdBQUdBLENBQUNDLFFBQXNCLEVBQUVDLE9BQWUsRUFBRUMsUUFBZ0IsRUFBRUMsSUFBVSxFQUFRO01BQy9FLElBQUlILFFBQVEsR0FBRyxJQUFJLENBQUNGLFVBQVUsRUFBRTtRQUM5QjtNQUNGO01BRUEsSUFBSSxDQUFDNnhDLGlCQUFpQixDQUFDeDdDLElBQUksQ0FBQzZKLFFBQVEsRUFBRUMsT0FBTyxFQUFFQyxRQUFRLEVBQUVDLElBQUksQ0FBQztJQUNoRTtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0JIO0FBQ0E7QUFDQTtBQUNxRDtBQUVDO0FBQUEsSUFFakNpRCxzQkFBc0I7RUFBQSxTQUFBQSx1QkFBQTtJQUFBclgsNElBQUEsT0FBQXFYLHNCQUFBO0lBQUFwWCw0SUFBQSxlQUMxQixnREFBZ0Q7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUEscUJBSzFDK0QsOERBQWMsQ0FBQ2tCLDRCQUE0QjtFQUFBO0VBQUEsT0FBQTNFLHlJQUFBLENBQUE4VyxzQkFBQTtJQUFBN1csR0FBQTtJQUFBQyxHQUFBLEVBRWhFLFNBQUFBLElBQUEsRUFBa0I7TUFDaEIsT0FBTyxJQUFJLENBQUM2WSxJQUFJO0lBQ2xCLENBQUM7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQVFDLEdBQVcsRUFBRTtNQUNuQixJQUFNeVQsWUFBWSxHQUFHLElBQUl4dEIsZ0VBQVcsQ0FBQytHLEdBQUcsQ0FBQ2dULEdBQUcsQ0FBQztNQUU3Q3lULFlBQVksQ0FBQ3ZULFFBQVEsR0FBR3VULFlBQVksQ0FBQ3ZULFFBQVEsR0FBRyxPQUFPO01BRXZELElBQUksQ0FBQ0osSUFBSSxHQUFHMlQsWUFBWSxDQUFDM2MsUUFBUSxDQUFDLENBQUM7SUFDckM7RUFBQztJQUFBOVAsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEwQjtNQUN4QixPQUFPLElBQUksQ0FBQ2taLFlBQVk7SUFDMUIsQ0FBQztJQUFBSixHQUFBLEVBRUQsU0FBQUEsSUFBZ0JLLFdBQW1CLEVBQUU7TUFDbkMsSUFBSSxDQUFDRCxZQUFZLEdBQUdDLFdBQVc7SUFDakM7RUFBQztJQUFBcFosR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzQjtNQUNwQixPQUFPLElBQUksQ0FBQ29aLFFBQVE7SUFDdEIsQ0FBQztJQUFBTixHQUFBLEVBRUQsU0FBQUEsSUFBWU8sT0FBZSxFQUFFO01BQzNCLElBQUksQ0FBQ0QsUUFBUSxHQUFHQyxPQUFPO0lBQ3pCO0VBQUM7SUFBQXRaLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBd0I7TUFDdEIsT0FBTyxJQUFJLENBQUNzWixVQUFVO0lBQ3hCLENBQUM7SUFBQVIsR0FBQSxFQUVELFNBQUFBLElBQWNTLFNBQWlCLEVBQUU7TUFDL0IsSUFBSSxDQUFDRCxVQUFVLEdBQUdDLFNBQVM7SUFDN0I7RUFBQztJQUFBeFosR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEyQjtNQUN6QixPQUFPLElBQUksQ0FBQytJLGFBQWE7SUFDM0IsQ0FBQztJQUFBK1AsR0FBQSxFQUVELFNBQUFBLElBQWlCblEsWUFBb0IsRUFBRTtNQUNyQyxJQUFJLENBQUNJLGFBQWEsR0FBR0osWUFBWTtJQUNuQztFQUFDO0lBQUE1SSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThCO01BQzVCLE9BQU8sSUFBSSxDQUFDc1QsVUFBVTtJQUN4QixDQUFDO0lBQUF3RixHQUFBLEVBRUQsU0FBQUEsSUFBY3pGLFNBQXVCLEVBQUU7TUFDckMsSUFBSSxDQUFDQyxVQUFVLEdBQUdELFNBQVM7SUFDN0I7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakVIO0FBQ0E7QUFDQTtBQUNxRDtBQUNmO0FBQ1E7QUFFYTtBQUUzRCxJQUFNcUgsZ0JBQWdCLEdBQUcsSUFBSTtBQUFDLElBZVR3cUMsZ0JBQWdCO0VBT25DLFNBQUFBLGlCQUFZNzRCLHNCQUE4QyxFQUFFO0lBQUE5c0IsNElBQUEsT0FBQTJsRCxnQkFBQTtJQUFBMWxELDRJQUFBO0lBQUFBLDRJQUFBLGdCQUozQixFQUFFO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBLGtCQUVqQlIsZ0VBQVcsQ0FBQzRiLGdCQUFnQjtJQUc1QyxJQUFJLENBQUMvRCx1QkFBdUIsR0FBR3dWLHNCQUFzQjtFQUN2RDtFQUFDLE9BQUF2c0IseUlBQUEsQ0FBQW9sRCxnQkFBQTtJQUFBbmxELEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEwSixJQUFJQSxDQUFDNkosUUFBc0IsRUFBRUMsT0FBZSxFQUFFQyxRQUFnQixFQUFFMEgsU0FBZSxFQUFRO01BQ3JGLElBQU14UixPQUFPLEdBQUcsQ0FBQ3dSLFNBQVMsQ0FBQ2dxQyxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQ3Z1Qyx1QkFBdUIsQ0FBQ2xPLFlBQVksSUFBSSxJQUFJO01BQ3hGLElBQU0wOEMsU0FBUyxHQUFHO1FBQ2hCanFDLFNBQVMsRUFBRUEsU0FBUyxDQUFDdkgsV0FBVyxDQUFDLENBQUM7UUFDbEN3RixPQUFPLEVBQUUsSUFBSSxDQUFDeEMsdUJBQXVCLENBQUN3QyxPQUFPO1FBQzdDN0QsS0FBSyxFQUFFckMsd0RBQVksQ0FBQ0ssUUFBUSxDQUFDO1FBQzdCRSxRQUFRLEVBQVJBLFFBQVE7UUFDUkQsT0FBTyxFQUFQQSxPQUFPO1FBQ1A4RixTQUFTLEVBQUUsSUFBSSxDQUFDMUMsdUJBQXVCLENBQUMwQyxTQUFTO1FBQ2pEdFcsT0FBTyxFQUFFd1gsbUVBQWMsQ0FBQ2MsVUFBVTtRQUNsQ3BDLFdBQVcsRUFBRSxJQUFJLENBQUN0Qyx1QkFBdUIsQ0FBQ3NDLFdBQVc7UUFDckRrQyxpQkFBaUIsRUFBRSxJQUFJLENBQUNDLE9BQU87UUFDL0IxUixPQUFPLEVBQVBBO01BQ0YsQ0FBQztNQUVELElBQUk0SixRQUFRLEdBQUdMLHdEQUFZLENBQUNoTyxLQUFLLEVBQUU7UUFDakMsSUFBSSxDQUFDbWdELEtBQUssQ0FBQzM3QyxJQUFJLENBQUMwN0MsU0FBUyxDQUFDO01BQzVCLENBQUMsTUFBTTtRQUNMLElBQUksQ0FBQ0MsS0FBSyxDQUFDbDNCLE9BQU8sQ0FBQ2kzQixTQUFTLENBQUM7TUFDL0I7TUFFQSxJQUFNN3BDLE9BQU8sR0FBRyxJQUFJLENBQUMrcEMsY0FBYyxDQUFDLENBQUM7SUFDdkM7RUFBQztJQUFBeGxELEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUF5TCxTQUFBLEdBQUFnUSw4SUFBQSxjQUFBQyw0SUFBQSxDQUVELFNBQUFFLFFBQXVCMnBDLFdBQTRCO1FBQUEsSUFBQXpwQyxRQUFBO1FBQUEsT0FBQUosNElBQUEsVUFBQU0sU0FBQUMsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1lBQUE7Y0FDM0NMLFFBQVEsR0FBRyxJQUFJL2MsZ0VBQVcsQ0FBQ3VQLFFBQVEsQ0FBQyxDQUFDO2NBRTNDd04sUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFeFIsSUFBSSxDQUFDa0wsU0FBUyxDQUFDO2dCQUFDdUcsT0FBTyxFQUFFa3BDO2NBQVcsQ0FBQyxDQUFDLENBQUM7Y0FBQ3RwQyxRQUFBLENBQUFFLElBQUE7Y0FBQSxPQUV2RHBkLGdFQUFXLENBQUM4UCxLQUFLLENBQUMsSUFBSSxDQUFDK0gsdUJBQXVCLENBQUNrQyxHQUFHLEVBQUU7Z0JBQy9Ed0QsTUFBTSxFQUFFLE1BQU07Z0JBQ2RDLElBQUksRUFBRVQ7Y0FDUixDQUFDLENBQUM7WUFBQTtjQUFBLE9BQUFHLFFBQUEsQ0FBQU8sTUFBQSxXQUFBUCxRQUFBLENBQUFRLElBQUE7WUFBQTtZQUFBO2NBQUEsT0FBQVIsUUFBQSxDQUFBUyxJQUFBO1VBQUE7UUFBQSxHQUFBZCxPQUFBO01BQUEsQ0FDSDtNQUFBLFNBVGE1UCxRQUFRQSxDQUFBMlEsRUFBQTtRQUFBLE9BQUFsUixTQUFBLENBQUFtUixLQUFBLE9BQUEzSyxTQUFBO01BQUE7TUFBQSxPQUFSakcsUUFBUTtJQUFBO0VBQUE7SUFBQWxNLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUF3bEQsZUFBQSxHQUFBL3BDLDhJQUFBLGNBQUFDLDRJQUFBLENBV3RCLFNBQUFvQixTQUFBO1FBQUEsSUFBQXpjLEtBQUE7UUFBQSxJQUFBb2xELGtCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLFdBQUEsRUFBQUMsVUFBQSxFQUFBTCxXQUFBO1FBQUEsT0FBQTdwQyw0SUFBQSxVQUFBcUIsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFkLElBQUEsR0FBQWMsU0FBQSxDQUFBYixJQUFBO1lBQUE7Y0FBQSxNQUNNLElBQUksQ0FBQ2twQyxLQUFLLENBQUMzNkMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUN1UyxVQUFVO2dCQUFBRCxTQUFBLENBQUFiLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUFhLFNBQUEsQ0FBQVIsTUFBQTtZQUFBO2NBSXpDaXBDLGtCQUFrQixHQUFHLENBQUM7Y0FDdEJDLGdCQUFnQixHQUFHLENBQUM7Y0FFeEIsSUFBSSxDQUFDem9DLFVBQVUsR0FBRyxJQUFJO2NBRWhCMG9DLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFHMXlDLElBQUk7Z0JBQUEsT0FBSSxPQUFPQSxJQUFJLEtBQUssUUFBUSxHQUFHbkQscURBQU8sQ0FBQ0MsaUJBQWlCLENBQUNrRCxJQUFJLENBQUMsR0FBR0EsSUFBSSxDQUFDdkksTUFBTTtjQUFBO2NBQzlGazdDLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFJdHlDLEdBQWE7Z0JBQUEsT0FBYWdELE1BQU0sQ0FBQ2dFLE1BQU0sQ0FBQ2hILEdBQUcsQ0FBQyxDQUM3RGhDLE1BQU0sQ0FBQyxVQUFDdTBDLEdBQUcsRUFBRTV5QyxJQUFJO2tCQUFBLE9BQUs0eUMsR0FBRyxJQUFJNXlDLElBQUksR0FBRzB5QyxXQUFXLENBQUMxeUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUFBLEdBQUUsQ0FBQyxDQUFDO2NBQUE7Y0FFakUsT0FBTyxJQUFJLENBQUNveUMsS0FBSyxDQUFDMzZDLE1BQU0sR0FBRys2QyxrQkFBa0IsSUFBSUcsVUFBVSxDQUFDLElBQUksQ0FBQ1AsS0FBSyxDQUFDSSxrQkFBa0IsQ0FBQyxDQUFDLEdBQUdDLGdCQUFnQixHQUFHanJDLGdCQUFnQixFQUFFO2dCQUNqSWlyQyxnQkFBZ0IsSUFBSUUsVUFBVSxDQUFDLElBQUksQ0FBQ1AsS0FBSyxDQUFDSSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUM5REEsa0JBQWtCLEVBQUU7Y0FDdEI7Y0FFQSxJQUFJLENBQUNBLGtCQUFrQixFQUFFO2dCQUN2QixJQUFJLENBQUNKLEtBQUssQ0FBQ0ksa0JBQWtCLENBQUMsQ0FBQ2p5QyxPQUFPLEdBQUcsSUFBSSxDQUFDNnhDLEtBQUssQ0FBQ0ksa0JBQWtCLENBQUMsQ0FBQ2p5QyxPQUFPLENBQUMxUSxTQUFTLENBQUMsQ0FBQyxFQUN6RjhpRCxVQUFVLENBQUMsSUFBSSxDQUFDUCxLQUFLLENBQUNJLGtCQUFrQixDQUFDLENBQUMsSUFBSWhyQyxnQkFBZ0IsR0FBR21yQyxVQUFVLENBQUMsSUFBSSxDQUFDUCxLQUFLLENBQUNJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvR0Esa0JBQWtCLEdBQUcsQ0FBQztjQUN4QjtjQUVNRixXQUFXLEdBQUcsSUFBSSxDQUFDRixLQUFLLENBQUNub0MsS0FBSyxDQUFDLENBQUMsRUFBRXVvQyxrQkFBa0IsQ0FBQztjQUUzRCxJQUFJLENBQUNKLEtBQUssR0FBRyxJQUFJLENBQUNBLEtBQUssQ0FBQ25vQyxLQUFLLENBQUN1b0Msa0JBQWtCLENBQUM7Y0FBQyxPQUFBem9DLFNBQUEsQ0FBQVIsTUFBQSxXQUUzQyxJQUFJLENBQUN4USxRQUFRLENBQUN1NUMsV0FBVyxDQUFDLENBQUNwb0MsSUFBSSxDQUFDLFVBQUFDLFFBQVEsRUFBSTtnQkFDakQvYyxLQUFJLENBQUM0YyxVQUFVLEdBQUcsS0FBSztnQkFFdkIsSUFBTTFCLE9BQU8sR0FBR2xiLEtBQUksQ0FBQ2lsRCxjQUFjLENBQUMsQ0FBQztnQkFFckMsT0FBT2xvQyxRQUFRO2NBQ2pCLENBQUMsQ0FBQyxDQUFDSyxLQUFLLENBQUMsWUFBTTtnQkFDYnBkLEtBQUksQ0FBQzRjLFVBQVUsR0FBRyxLQUFLO2dCQUV2QixJQUFNMUIsT0FBTyxHQUFHbGIsS0FBSSxDQUFDaWxELGNBQWMsQ0FBQyxDQUFDO2NBQ3ZDLENBQUMsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBdG9DLFNBQUEsQ0FBQU4sSUFBQTtVQUFBO1FBQUEsR0FBQUksUUFBQTtNQUFBLENBQ0g7TUFBQSxTQXhDYXdvQyxjQUFjQSxDQUFBO1FBQUEsT0FBQUUsZUFBQSxDQUFBNW9DLEtBQUEsT0FBQTNLLFNBQUE7TUFBQTtNQUFBLE9BQWRxekMsY0FBYztJQUFBO0VBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdEU5QjtBQUNBO0FBQ0E7QUFGQSxJQUlxQmg5QyxTQUFTO0VBRzVCLFNBQUFBLFVBQUEsRUFBMEI7SUFBQSxJQUFkdXVDLFFBQVEsR0FBQTVrQyxTQUFBLENBQUF2SCxNQUFBLFFBQUF1SCxTQUFBLFFBQUFsTixTQUFBLEdBQUFrTixTQUFBLE1BQUcsQ0FBQztJQUFBM1MsNElBQUEsT0FBQWdKLFNBQUE7SUFBQS9JLDRJQUFBO0lBQ3RCLElBQUksQ0FBQ3VtRCxTQUFTLEdBQUdqUCxRQUFRO0VBQzNCO0VBQUMsT0FBQWgzQyx5SUFBQSxDQUFBeUksU0FBQTtJQUFBeEksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQStKLFdBQVdBLENBQUEsRUFBVztNQUNwQixJQUFJLElBQUksQ0FBQys3QyxTQUFTLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sS0FBSztNQUNkO01BRUEsSUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQ0QsU0FBUyxHQUFHLENBQUM7TUFDckMsSUFBTWpQLFFBQVEsR0FBR2tQLFVBQVUsR0FBRzUxQyxJQUFJLENBQUM2MUMsR0FBRyxDQUFDLElBQUksQ0FBQ0YsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDQSxTQUFTO01BQ3ZFLElBQUlqMEMsTUFBTSxHQUFHMUIsSUFBSSxDQUFDQyxLQUFLLENBQUN5bUMsUUFBUSxDQUFDO01BQ2pDLElBQU1vUCxZQUFZLEdBQUdwMEMsTUFBTSxHQUFHLElBQUk7TUFFbENBLE1BQU0sR0FBRzFCLElBQUksQ0FBQ0MsS0FBSyxDQUFDeUIsTUFBTSxHQUFHLElBQUksQ0FBQztNQUVsQyxJQUFNK3hCLE9BQU8sR0FBRy94QixNQUFNLEdBQUcsRUFBRTtNQUUzQkEsTUFBTSxHQUFHMUIsSUFBSSxDQUFDQyxLQUFLLENBQUN5QixNQUFNLEdBQUcsRUFBRSxDQUFDO01BRWhDLElBQU1neUIsT0FBTyxHQUFHaHlCLE1BQU0sR0FBRyxFQUFFO01BRTNCQSxNQUFNLEdBQUcxQixJQUFJLENBQUNDLEtBQUssQ0FBQ3lCLE1BQU0sR0FBRyxFQUFFLENBQUM7TUFFaEMsSUFBTWl5QixLQUFLLEdBQUdqeUIsTUFBTSxHQUFHLEVBQUU7TUFDekIsSUFBTXEwQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUM7TUFFcEIsSUFBSUgsVUFBVSxFQUFFO1FBQ2RHLEtBQUssQ0FBQy8zQixPQUFPLENBQUMsR0FBRyxDQUFDO01BQ3BCO01BRUEsSUFBSTJWLEtBQUssRUFBRTtRQUNUb2lCLEtBQUssQ0FBQ3g4QyxJQUFJLENBQUNvNkIsS0FBSyxHQUFHLEdBQUcsQ0FBQztNQUN6QjtNQUVBLElBQUlELE9BQU8sRUFBRTtRQUNYcWlCLEtBQUssQ0FBQ3g4QyxJQUFJLENBQUNtNkIsT0FBTyxHQUFHLEdBQUcsQ0FBQztNQUMzQjtNQUVBLElBQUlELE9BQU8sSUFBSXFpQixZQUFZLEVBQUU7UUFDM0JDLEtBQUssQ0FBQ3g4QyxJQUFJLENBQUN5OEMsTUFBTSxDQUFDdmlCLE9BQU8sQ0FBQyxDQUFDO1FBRTNCLElBQUlxaUIsWUFBWSxFQUFFO1VBQ2hCQyxLQUFLLENBQUN4OEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM4SSxRQUFRLENBQUN5ekMsWUFBWSxDQUFDcjJDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xFO1FBRUFzMkMsS0FBSyxDQUFDeDhDLElBQUksQ0FBQyxHQUFHLENBQUM7TUFDakI7TUFFQSxPQUFPdzhDLEtBQUssQ0FBQ3p6QyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3ZCO0VBQUM7SUFBQTNTLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF3UyxRQUFRQSxDQUFDUyxJQUFZLEVBQUVtekMsWUFBb0IsRUFBRUMsU0FBaUIsRUFBVTtNQUN0RUQsWUFBWSxHQUFHQSxZQUFZLElBQUksQ0FBQztNQUNoQ0MsU0FBUyxHQUFHRixNQUFNLENBQUUsT0FBT0UsU0FBUyxLQUFLLFdBQVcsR0FBR0EsU0FBUyxHQUFHLEdBQUksQ0FBQztNQUV4RSxJQUFJcHpDLElBQUksQ0FBQ3ZJLE1BQU0sR0FBRzA3QyxZQUFZLEVBQUU7UUFDOUIsT0FBT256QyxJQUFJO01BQ2I7TUFFQW16QyxZQUFZLEdBQUdBLFlBQVksR0FBR256QyxJQUFJLENBQUN2SSxNQUFNO01BRXpDLElBQUkwN0MsWUFBWSxHQUFHQyxTQUFTLENBQUMzN0MsTUFBTSxFQUFFO1FBQ25DMjdDLFNBQVMsSUFBSUEsU0FBUyxDQUFDQyxNQUFNLENBQUNGLFlBQVksR0FBR0MsU0FBUyxDQUFDMzdDLE1BQU0sQ0FBQztNQUNoRTtNQUVBLE9BQU8yN0MsU0FBUyxDQUFDbnBDLEtBQUssQ0FBQyxDQUFDLEVBQUVrcEMsWUFBWSxDQUFDLEdBQUduekMsSUFBSTtJQUNoRDtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFFSDtBQUNBO0FBQ0E7O0FBRUEsSUFBTXN6QyxtQ0FBbUMsR0FBRyxJQUFJO0FBQ2hELElBQU1DLHNDQUFzQyxHQUFHLENBQUM7QUFDaEQsSUFBTUMsc0NBQXNDLEdBQUcsTUFBTTtBQUFDLElBRWpDbHNDLGtCQUFrQjtFQUtyQyxTQUFBQSxtQkFBQSxFQUlFO0lBQUEsSUFIQW1zQyw0QkFBb0MsR0FBQXowQyxTQUFBLENBQUF2SCxNQUFBLFFBQUF1SCxTQUFBLFFBQUFsTixTQUFBLEdBQUFrTixTQUFBLE1BQUdzMEMsbUNBQW1DO0lBQUEsSUFDMUVJLCtCQUF1QyxHQUFBMTBDLFNBQUEsQ0FBQXZILE1BQUEsUUFBQXVILFNBQUEsUUFBQWxOLFNBQUEsR0FBQWtOLFNBQUEsTUFBR3UwQyxzQ0FBc0M7SUFBQSxJQUNoRkksK0JBQXVDLEdBQUEzMEMsU0FBQSxDQUFBdkgsTUFBQSxRQUFBdUgsU0FBQSxRQUFBbE4sU0FBQSxHQUFBa04sU0FBQSxNQUFHdzBDLHNDQUFzQztJQUFBbm5ELDRJQUFBLE9BQUFpYixrQkFBQTtJQUFBaGIsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFFaEYsSUFBSSxDQUFDc25ELDZCQUE2QixHQUFHSCw0QkFBNEI7SUFDakUsSUFBSSxDQUFDSSxnQ0FBZ0MsR0FBR0gsK0JBQStCO0lBQ3ZFLElBQUksQ0FBQ0ksZ0NBQWdDLEdBQUdILCtCQUErQjtFQUN6RTtFQUFDLE9BQUEvbUQseUlBQUEsQ0FBQTBhLGtCQUFBO0lBQUF6YSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBd2QsMkNBQTJDQSxDQUFDOFUsWUFBb0IsRUFBVTtNQUN4RSxJQUFNMDBCLHdCQUF3QixHQUFHLElBQUksQ0FBQ0gsNkJBQTZCLEdBQUcsSUFBSTtNQUMxRSxJQUFNSSxhQUFhLEdBQUcsR0FBRyxHQUFJLEdBQUcsR0FBRzkyQyxJQUFJLENBQUNhLE1BQU0sQ0FBQyxDQUFFLENBQUMsQ0FBQztNQUNuRCxJQUFNazJDLGtCQUFrQixHQUFHLzJDLElBQUksQ0FBQ00sR0FBRyxDQUFDdTJDLHdCQUF3QixFQUFFMTBCLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2pGLElBQU02MEIsbUNBQW1DLEdBQUdoM0MsSUFBSSxDQUFDQyxLQUFLLENBQUM4MkMsa0JBQWtCLENBQUMsR0FBR0QsYUFBYTtNQUMxRixJQUFNRyxnREFBZ0QsR0FBR2ozQyxJQUFJLENBQUNnQixJQUFJLENBQUNoQixJQUFJLENBQUM4cEMsR0FBRyxDQUFDa04sbUNBQW1DLEdBQUcsSUFBSSxFQUFFLElBQUksQ0FBQ0wsZ0NBQWdDLENBQUMsQ0FBQztNQUUvSixPQUFPMzJDLElBQUksQ0FBQzBzQixHQUFHLENBQUN1cUIsZ0RBQWdELEVBQUUsSUFBSSxDQUFDTCxnQ0FBZ0MsQ0FBQztJQUMxRztFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9CSDtBQUNBO0FBQ0E7QUFGQSxJQUtxQng0QixTQUFTO0VBUTVCLFNBQUFBLFVBQVl3RyxLQUFhLEVBQUVFLE1BQWMsRUFBRTtJQUFBMzFCLDRJQUFBLE9BQUFpdkIsU0FBQTtJQUFBaHZCLDRJQUFBO0lBQUFBLDRJQUFBO0lBQ3pDLElBQUksQ0FBQ3cxQixLQUFLLEdBQUdBLEtBQUs7SUFDbEIsSUFBSSxDQUFDRSxNQUFNLEdBQUdBLE1BQU07RUFDdEI7RUFBQyxPQUFBcDFCLHlJQUFBLENBQUEwdUIsU0FBQTtJQUFBenVCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEycUIsTUFBTUEsQ0FBQzA4QixLQUFnQixFQUFXO01BQ2hDLE9BQU9BLEtBQUssSUFBSSxJQUFJLENBQUN0eUIsS0FBSyxLQUFLc3lCLEtBQUssQ0FBQ3R5QixLQUFLLElBQUksSUFBSSxDQUFDRSxNQUFNLEtBQUtveUIsS0FBSyxDQUFDcHlCLE1BQU07SUFDNUU7RUFBQztJQUFBbjFCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE0UCxRQUFRQSxDQUFBLEVBQVc7TUFDakIsVUFBQWhOLE1BQUEsQ0FBVSxJQUFJLENBQUNteUIsS0FBSyxPQUFBbnlCLE1BQUEsQ0FBSSxJQUFJLENBQUNxeUIsTUFBTTtJQUNyQztFQUFDO0lBQUFuMUIsR0FBQTtJQUFBQyxHQUFBLEVBZkQsU0FBQUEsSUFBQSxFQUE4QjtNQUM1QixPQUFPLElBQUl3dUIsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUI7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWEg7QUFDQTtBQUNBO0FBQytEO0FBRVg7QUFDRDtBQUN0QjtBQUNvQjtBQUNSO0FBRVc7QUFBQSxJQVMvQkcsZ0JBQWdCO0VBU25DLFNBQUFBLGlCQUFZaG1CLFlBQW9CLEVBQUVFLGNBQThCLEVBQUU7SUFBQSxJQUFBdkksS0FBQTtJQUFBZiw0SUFBQSxPQUFBb3ZCLGdCQUFBO0lBQUFudkIsNElBQUEsa0JBUjlCaUosNkRBQWEsQ0FBQ0csU0FBUyxDQUFDLGtCQUFrQixDQUFDO0lBQUFwSiw0SUFBQTtJQUFBQSw0SUFBQSxzQ0FFaENnSixnREFBRyxDQUFDKytDLDBCQUEwQjtJQUFBL25ELDRJQUFBLDBCQUMxQixJQUFJNkcsMkRBQWMsQ0FBQyxDQUFDO0lBQUE3Ryw0SUFBQTtJQUFBQSw0SUFBQSx1QkFFdkIsSUFBSU4sNERBQWMsQ0FBQyxDQUFDO0lBQUFNLDRJQUFBLGlDQUNmLENBQUMsQ0FBQztJQUdyRCxJQUFJLENBQUN1SixhQUFhLEdBQUdKLFlBQVk7SUFDakMsSUFBSSxDQUFDdEksWUFBWSxDQUFDTSxHQUFHLENBQUMsSUFBSSxDQUFDNm1ELGVBQWUsQ0FBQztJQUMzQyxJQUFJLENBQUMxN0IsZUFBZSxHQUFHampCLGNBQWM7SUFFckMsSUFBSSxDQUFDLElBQUksQ0FBQzIrQyxlQUFlLENBQUNqaEQsV0FBVyxFQUFFO01BQ3JDO0lBQ0Y7SUFFQSxJQUFJLENBQUNsRyxZQUFZLENBQUNNLEdBQUcsQ0FBQyxJQUFJLENBQUNvckIsMkJBQTJCLENBQUMwN0IsWUFBWSxDQUFDdDlCLFNBQVMsQ0FBQyxVQUFBczlCLFlBQVksRUFBSTtNQUM1Rm5uRCxLQUFJLENBQUNvbkQsc0JBQXNCLENBQUNELFlBQVksQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQ3BuRCxZQUFZLENBQUNNLEdBQUcsQ0FBQyxJQUFJLENBQUM2bUQsZUFBZSxDQUFDei9DLEdBQUcsQ0FBQ29pQixTQUFTLENBQUMsVUFBQWxxQixLQUFLLEVBQUk7TUFDaEVLLEtBQUksQ0FBQ3FuRCxzQkFBc0IsQ0FBQzFuRCxLQUFLLENBQUM7SUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLENBQUNJLFlBQVksQ0FBQ00sR0FBRyxDQUFDLElBQUksQ0FBQzZtRCxlQUFlLENBQUM5L0MsYUFBYSxDQUFDeWlCLFNBQVMsQ0FBQyxVQUFBbHFCLEtBQUssRUFBSTtNQUMxRUssS0FBSSxDQUFDc25ELDZCQUE2QixDQUFDM25ELEtBQUssQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQ0ksWUFBWSxDQUFDTSxHQUFHLENBQUMsSUFBSSxDQUFDNm1ELGVBQWUsQ0FBQ0ssMEJBQTBCLENBQUMxOUIsU0FBUyxDQUFDLFVBQUFscUIsS0FBSyxFQUFJO01BQ3ZGSyxLQUFJLENBQUN3bkQsNkNBQTZDLENBQUM3bkQsS0FBSyxDQUFDO0lBQzNELENBQUMsQ0FBQyxDQUFDO0VBQ0w7RUFBQyxPQUFBSCx5SUFBQSxDQUFBNnVCLGdCQUFBO0lBQUE1dUIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTQyQixtQkFBbUJBLENBQUEsRUFBd0I7TUFDekMsT0FBTyxJQUFJbnVCLHlFQUFtQixDQUFDLElBQUksQ0FBQ0ssYUFBYSxDQUFDO0lBQ3BEO0VBQUM7SUFBQWhKLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFHLE9BQU9BLENBQUEsRUFBUztNQUNkLElBQUksQ0FBQ0MsWUFBWSxDQUFDRCxPQUFPLENBQUMsQ0FBQztJQUM3QjtFQUFDO0lBQUFMLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVF5bkQsc0JBQXNCQSxDQUFDRCxZQUFxQixFQUFRO01BQzFELElBQU0vbkQsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO01BQ3RCLElBQU1xb0QsbUJBQW1CLEdBQUcsSUFBSSxDQUFDaDhCLDJCQUEyQixDQUFDN3JCLHNCQUFzQixDQUFDLENBQUM7TUFFckYsSUFBSSxDQUFDNHJCLGVBQWUsQ0FBQ25pQixJQUFJLENBQUM7UUFDeEJMLFVBQVUsRUFBRW0rQyxZQUFZLEdBQUdwL0MsNERBQVcsQ0FBQ3FRLHFCQUFxQixHQUFHclEsNERBQVcsQ0FBQ3NRLHFCQUFxQjtRQUNoRy9PLE9BQU8sRUFBRSxDQUFDbEssR0FBRyxHQUFHLElBQUksQ0FBQ3FKLGFBQWEsSUFBSSxJQUFJO1FBQzFDOUksS0FBSyxFQUFFO1VBQUM0SixNQUFNLEVBQUVrK0M7UUFBbUI7TUFDckMsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDaitDLE9BQU8sQ0FBQ0MsSUFBSSxDQUNmLGtEQUFrRCxFQUNsRDA5QyxZQUFZLEdBQUcsWUFBWSxHQUFHLFlBQVksRUFDMUMsSUFBSWwvQyxzREFBUyxDQUFDdy9DLG1CQUFtQixDQUFDLENBQUMvOUMsV0FBVyxDQUFDLENBQ2pELENBQUM7SUFDSDtFQUFDO0lBQUFqSyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRMG5ELHNCQUFzQkEsQ0FBQ0ssTUFBYyxFQUFRO01BQ25ELElBQU10b0QsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO01BQ3RCLElBQU11b0QsTUFBTSxHQUFHLElBQUksQ0FBQ0Msc0JBQXNCLENBQUNuZ0QsR0FBRztNQUU5QyxJQUFJLENBQUNtZ0Qsc0JBQXNCLENBQUNuZ0QsR0FBRyxHQUFHaWdELE1BQU07TUFFeEMsSUFBSSxDQUFDbDhCLGVBQWUsQ0FBQ25pQixJQUFJLENBQUM7UUFDeEJMLFVBQVUsRUFBRWpCLDREQUFXLENBQUNpUSxhQUFhO1FBQ3JDMU8sT0FBTyxFQUFFLENBQUNsSyxHQUFHLEdBQUcsSUFBSSxDQUFDcUosYUFBYSxJQUFJLElBQUk7UUFDMUM5SSxLQUFLLEVBQUU7VUFBQzRKLE1BQU0sRUFBRW0rQztRQUFNLENBQUM7UUFDdkJodEMsYUFBYSxFQUFFaXRDLE1BQU0sR0FBRztVQUFDcCtDLE1BQU0sRUFBRW8rQztRQUFNLENBQUMsR0FBR2pqRCxTQUFTO1FBQ3BEaVcsUUFBUSxFQUFFO01BQ1osQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDblIsT0FBTyxDQUFDQyxJQUFJLENBQ2YsNENBQTRDLEVBQzVDLElBQUl4QixzREFBUyxDQUFDN0ksR0FBRyxHQUFHLElBQUksQ0FBQ3FKLGFBQWEsQ0FBQyxDQUFDaUIsV0FBVyxDQUFDLENBQUMsRUFDckRnK0MsTUFBTSxFQUNOQyxNQUNGLENBQUM7SUFDSDtFQUFDO0lBQUFsb0QsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUTJuRCw2QkFBNkJBLENBQUNPLGNBQXNCLEVBQVE7TUFDbEUsSUFBTXpvRCxHQUFHLEdBQUdELElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7TUFDdEIsSUFBTTBvRCxjQUFjLEdBQUcsSUFBSSxDQUFDRixzQkFBc0IsQ0FBQ3hnRCxhQUFhO01BRWhFLElBQUksQ0FBQ3dnRCxzQkFBc0IsQ0FBQ3hnRCxhQUFhLEdBQUd5Z0QsY0FBYztNQUUxRCxJQUFJLENBQUNyOEIsZUFBZSxDQUFDbmlCLElBQUksQ0FBQztRQUN4QkwsVUFBVSxFQUFFakIsNERBQVcsQ0FBQ21RLFdBQVc7UUFDbkM1TyxPQUFPLEVBQUUsQ0FBQ2xLLEdBQUcsR0FBRyxJQUFJLENBQUNxSixhQUFhLElBQUksSUFBSTtRQUMxQzlJLEtBQUssRUFBRTtVQUFDdVIsTUFBTSxFQUFFMjJDO1FBQWMsQ0FBQztRQUMvQm50QyxhQUFhLEVBQUVvdEMsY0FBYyxHQUFHO1VBQUM1MkMsTUFBTSxFQUFFNDJDO1FBQWMsQ0FBQyxHQUFHcGpEO01BQzdELENBQUMsQ0FBQztNQUVGLElBQUksQ0FBQzhFLE9BQU8sQ0FBQ0MsSUFBSSxDQUNmLDJEQUEyRCxFQUMzRCxJQUFJeEIsc0RBQVMsQ0FBQzdJLEdBQUcsR0FBRyxJQUFJLENBQUNxSixhQUFhLENBQUMsQ0FBQ2lCLFdBQVcsQ0FBQyxDQUFDLEVBQ3JEbStDLGNBQWMsRUFDZEMsY0FDRixDQUFDO0lBQ0g7RUFBQztJQUFBcm9ELEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVE2bkQsNkNBQTZDQSxDQUFDTyxXQUFtQixFQUFRO01BQy9FLElBQU0zb0QsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO01BQ3RCLElBQU00b0QsV0FBVyxHQUFHLElBQUksQ0FBQ0osc0JBQXNCLENBQUNMLDBCQUEwQjtNQUUxRSxJQUFJLENBQUNLLHNCQUFzQixDQUFDTCwwQkFBMEIsR0FBR1EsV0FBVztNQUVwRSxJQUFJLENBQUN2OEIsZUFBZSxDQUFDbmlCLElBQUksQ0FBQztRQUN4QkwsVUFBVSxFQUFFakIsNERBQVcsQ0FBQ2tRLDBCQUEwQjtRQUNsRDNPLE9BQU8sRUFBRSxDQUFDbEssR0FBRyxHQUFHLElBQUksQ0FBQ3FKLGFBQWEsSUFBSSxJQUFJO1FBQzFDOUksS0FBSyxFQUFFO1VBQUNzb0QsS0FBSyxFQUFFRjtRQUFXLENBQUM7UUFDM0JydEMsYUFBYSxFQUFFc3RDLFdBQVcsR0FBRztVQUFDQyxLQUFLLEVBQUVEO1FBQVcsQ0FBQyxHQUFHdGpEO01BQ3RELENBQUMsQ0FBQztNQUVGLElBQUksQ0FBQzhFLE9BQU8sQ0FBQ0MsSUFBSSxDQUNmLHFFQUFxRSxFQUNyRSxJQUFJeEIsc0RBQVMsQ0FBQzdJLEdBQUcsR0FBRyxJQUFJLENBQUNxSixhQUFhLENBQUMsQ0FBQ2lCLFdBQVcsQ0FBQyxDQUFDLEVBQ3JEcStDLFdBQVcsRUFDWEMsV0FDRixDQUFDO0lBQ0g7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNJSDtBQUNBO0FBQ0E7QUFDb0Q7QUFFWDtBQUNHO0FBRUs7QUFDRztBQUFBLElBRy9CNTVCLGNBQWM7RUFtQmpDLFNBQUFBLGVBQVl6bEIsUUFBZ0IsRUFBRU4sWUFBb0IsRUFBRTYvQyxnQkFBd0IsRUFBRTMvQyxjQUE4QixFQUFFO0lBQUF0Siw0SUFBQSxPQUFBbXZCLGNBQUE7SUFBQWx2Qiw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQSxrQkFoQjFFaUosNkRBQWEsQ0FBQ0csU0FBUyxDQUFDLGlCQUFpQixDQUFDO0lBQUFwSiw0SUFBQSx1QkFDOUIsSUFBSU4sNERBQWMsQ0FBQyxDQUFDO0lBQUFNLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBZ0JsRSxJQUFJLENBQUMrNEMsU0FBUyxHQUFHdHZDLFFBQVE7SUFDekIsSUFBSSxDQUFDRixhQUFhLEdBQUdKLFlBQVk7SUFDakMsSUFBSSxDQUFDOG5CLGlCQUFpQixHQUFHKzNCLGdCQUFnQjtJQUV6QyxJQUFJLENBQUMxOEIsZUFBZSxHQUFHampCLGNBQWM7RUFDdkM7RUFBQyxPQUFBL0kseUlBQUEsQ0FBQTR1QixjQUFBO0lBQUEzdUIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTR6QiwrQkFBK0JBLENBQUM5TixLQUF1QixFQUFRO01BQUEsSUFBQXpsQixLQUFBO01BQzdELElBQUksQ0FBQ21vRCx5QkFBeUIsR0FBR2hwRCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO01BRTNDLElBQUksQ0FBQ2dwRCxrQkFBa0IsR0FBRztRQUFBLE9BQVlwb0QsS0FBSSxDQUFDcW9ELG9CQUFvQixDQUFDLENBQUM7TUFBQTtNQUVqRTVpQyxLQUFLLENBQUM3ZCxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDd2dELGtCQUFrQixDQUFDO01BQzdEM2lDLEtBQUssQ0FBQzdkLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQ3dnRCxrQkFBa0IsQ0FBQztNQUVqRSxJQUFJLENBQUNFLDhCQUE4QixHQUFHLElBQUkzcEQsd0RBQVUsQ0FBQyxZQUFNO1FBQ3pEOG1CLEtBQUssQ0FBQzNkLG1CQUFtQixDQUFDLFlBQVksRUFBRTlILEtBQUksQ0FBQ29vRCxrQkFBa0IsQ0FBQztRQUNoRTNpQyxLQUFLLENBQUMzZCxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRTlILEtBQUksQ0FBQ29vRCxrQkFBa0IsQ0FBQztNQUN0RSxDQUFDLENBQUM7TUFDRixJQUFJLENBQUNyb0QsWUFBWSxDQUFDTSxHQUFHLENBQUMsSUFBSSxDQUFDaW9ELDhCQUE4QixDQUFDO0lBQzVEO0VBQUM7SUFBQTdvRCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNnpCLDJCQUEyQkEsQ0FBQy9OLEtBQXVCLEVBQVE7TUFBQSxJQUFBclEsTUFBQTtNQUN6RCxJQUFJLENBQUNtekMsZUFBZSxHQUFHO1FBQUEsT0FBWW56QyxNQUFJLENBQUNvekMsT0FBTyxDQUFDLENBQUM7TUFBQTtNQUVqRCxJQUFJLENBQUNDLHNCQUFzQixHQUFHLFVBQUNyZ0IsS0FBSztRQUFBLE9BQVdoekIsTUFBSSxDQUFDc3pDLGNBQWMsQ0FBQ3RnQixLQUFLLEVBQUUzaUIsS0FBSyxDQUFDO01BQUE7TUFFaEZBLEtBQUssQ0FBQzdkLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMyZ0QsZUFBZSxDQUFDO01BQ3ZEOWlDLEtBQUssQ0FBQzdkLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMyZ0QsZUFBZSxDQUFDO01BQ3JEOWlDLEtBQUssQ0FBQzdkLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMyZ0QsZUFBZSxDQUFDO01BQ3ZEOWlDLEtBQUssQ0FBQzdkLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM2Z0Qsc0JBQXNCLENBQUM7TUFDM0RoakMsS0FBSyxDQUFDN2QsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQzZnRCxzQkFBc0IsQ0FBQztNQUM5RGhqQyxLQUFLLENBQUM3ZCxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDNmdELHNCQUFzQixDQUFDO01BQy9EaGpDLEtBQUssQ0FBQzdkLGdCQUFnQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM2Z0Qsc0JBQXNCLENBQUM7TUFFakUsSUFBSSxDQUFDRSx5QkFBeUIsR0FBRyxJQUFJaHFELHdEQUFVLENBQUMsWUFBTTtRQUNwRDhtQixLQUFLLENBQUMzZCxtQkFBbUIsQ0FBQyxTQUFTLEVBQUVzTixNQUFJLENBQUNtekMsZUFBZSxDQUFDO1FBQzFEOWlDLEtBQUssQ0FBQzNkLG1CQUFtQixDQUFDLE9BQU8sRUFBRXNOLE1BQUksQ0FBQ216QyxlQUFlLENBQUM7UUFDeEQ5aUMsS0FBSyxDQUFDM2QsbUJBQW1CLENBQUMsU0FBUyxFQUFFc04sTUFBSSxDQUFDbXpDLGVBQWUsQ0FBQztRQUMxRDlpQyxLQUFLLENBQUMzZCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUVzTixNQUFJLENBQUNxekMsc0JBQXNCLENBQUM7UUFDOURoakMsS0FBSyxDQUFDM2QsbUJBQW1CLENBQUMsU0FBUyxFQUFFc04sTUFBSSxDQUFDcXpDLHNCQUFzQixDQUFDO1FBQ2pFaGpDLEtBQUssQ0FBQzNkLG1CQUFtQixDQUFDLFVBQVUsRUFBRXNOLE1BQUksQ0FBQ3F6QyxzQkFBc0IsQ0FBQztRQUNsRWhqQyxLQUFLLENBQUMzZCxtQkFBbUIsQ0FBQyxZQUFZLEVBQUVzTixNQUFJLENBQUNxekMsc0JBQXNCLENBQUM7TUFDdEUsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDMW9ELFlBQVksQ0FBQ00sR0FBRyxDQUFDLElBQUksQ0FBQ3NvRCx5QkFBeUIsQ0FBQztJQUN2RDtFQUFDO0lBQUFscEQsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsT0FBT0EsQ0FBQSxFQUFTO01BQ2QsSUFBSSxDQUFDQyxZQUFZLENBQUNELE9BQU8sQ0FBQyxDQUFDO0lBQzdCO0VBQUM7SUFBQUwsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE0QztNQUMxQyxJQUFNTixHQUFHLEdBQUdELElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7TUFFdEIsT0FBTyxJQUFJNkksc0RBQVMsQ0FBQzdJLEdBQUcsR0FBRyxJQUFJLENBQUNxSixhQUFhLENBQUMsQ0FBQ2lCLFdBQVcsQ0FBQyxDQUFDO0lBQzlEO0VBQUM7SUFBQWpLLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVEwb0Qsb0JBQW9CQSxDQUFBLEVBQVM7TUFDbkMsSUFBTWpwRCxHQUFHLEdBQUdELElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7TUFFdEIsSUFBSSxDQUFDd3BELG9CQUFvQixDQUFDeHBELEdBQUcsQ0FBQztNQUM5QixJQUFJLENBQUN5cEQsbUNBQW1DLENBQUN6cEQsR0FBRyxDQUFDO01BRTdDLElBQUksQ0FBQ2twRCw4QkFBOEIsQ0FBQ3hvRCxPQUFPLENBQUMsQ0FBQztJQUMvQztFQUFDO0lBQUFMLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVFpcEQsb0JBQW9CQSxDQUFDeHBELEdBQUcsRUFBUTtNQUN0QyxJQUFJLENBQUMwcEQsaUJBQWlCLEdBQUcxcEQsR0FBRyxHQUFHLElBQUksQ0FBQytvRCx5QkFBeUI7TUFFN0QsSUFBSSxDQUFDMzhCLGVBQWUsQ0FBQ25pQixJQUFJLENBQUM7UUFDeEJMLFVBQVUsRUFBRWpCLDREQUFXLENBQUM0UCxnQkFBZ0I7UUFDeENyTyxPQUFPLEVBQUUsQ0FBQ2xLLEdBQUcsR0FBRyxJQUFJLENBQUNxSixhQUFhLElBQUksSUFBSTtRQUMxQzlJLEtBQUssRUFBRTtVQUFDNEosTUFBTSxFQUFFLElBQUksQ0FBQ3UvQztRQUFpQixDQUFDO1FBQ3ZDbmdELFFBQVEsRUFBRSxJQUFJLENBQUNzdkM7TUFDakIsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDenVDLE9BQU8sQ0FBQ0MsSUFBSSxDQUNmLDRCQUE0QixFQUM1QixJQUFJLENBQUNzL0MscUJBQXFCLEVBQzFCLElBQUksQ0FBQzlRLFNBQVMsRUFDZCxJQUFJaHdDLHNEQUFTLENBQUMsSUFBSSxDQUFDNmdELGlCQUFpQixDQUFDLENBQUNwL0MsV0FBVyxDQUFDLENBQ3BELENBQUM7SUFDSDtFQUFDO0lBQUFqSyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRa3BELG1DQUFtQ0EsQ0FBQ3pwRCxHQUFHLEVBQVE7TUFDckQsSUFBSSxDQUFDNHBELGdDQUFnQyxHQUFHNXBELEdBQUcsR0FBRyxJQUFJLENBQUMrd0IsaUJBQWlCO01BRXBFLElBQUksQ0FBQzNFLGVBQWUsQ0FBQ25pQixJQUFJLENBQUM7UUFDeEJMLFVBQVUsRUFBRWpCLDREQUFXLENBQUM4UCwrQkFBK0I7UUFDdkR2TyxPQUFPLEVBQUUsQ0FBQ2xLLEdBQUcsR0FBRyxJQUFJLENBQUNxSixhQUFhLElBQUksSUFBSTtRQUMxQzlJLEtBQUssRUFBRTtVQUFDNEosTUFBTSxFQUFFLElBQUksQ0FBQ3kvQztRQUFnQyxDQUFDO1FBQ3REcmdELFFBQVEsRUFBRSxJQUFJLENBQUNzdkM7TUFDakIsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDenVDLE9BQU8sQ0FBQ0MsSUFBSSxDQUNmLGdEQUFnRCxFQUNoRCxJQUFJLENBQUNzL0MscUJBQXFCLEVBQzFCLElBQUksQ0FBQzlRLFNBQVMsRUFDZCxJQUFJaHdDLHNEQUFTLENBQUMsSUFBSSxDQUFDK2dELGdDQUFnQyxDQUFDLENBQUN0L0MsV0FBVyxDQUFDLENBQ25FLENBQUM7SUFDSDtFQUFDO0lBQUFqSyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRNm9ELE9BQU9BLENBQUEsRUFBUztNQUN0QixJQUFJLElBQUksQ0FBQ1MsYUFBYSxFQUFFO1FBQ3RCO01BQ0Y7TUFFQSxJQUFJLENBQUN6OUIsZUFBZSxDQUFDbmlCLElBQUksQ0FBQztRQUN4QkwsVUFBVSxFQUFFakIsNERBQVcsQ0FBQytQLE9BQU87UUFDL0J4TyxPQUFPLEVBQUUsQ0FBQ25LLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNxSixhQUFhLElBQUksSUFBSTtRQUNqREUsUUFBUSxFQUFFLElBQUksQ0FBQ3N2QztNQUNqQixDQUFDLENBQUM7TUFFRixJQUFJLENBQUNnUixhQUFhLEdBQUc5cEQsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztNQUUvQixJQUFJLENBQUNvSyxPQUFPLENBQUNDLElBQUksQ0FDZiwwQ0FBMEMsRUFDMUMsSUFBSSxDQUFDcy9DLHFCQUFxQixFQUMxQixJQUFJLENBQUM5USxTQUNQLENBQUM7SUFDSDtFQUFDO0lBQUF4NEMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUStvRCxjQUFjQSxDQUFDdGdCLEtBQUssRUFBRTNpQixLQUFLLEVBQVE7TUFDekMsSUFBSSxDQUFDQSxLQUFLLENBQUM2ekIsUUFBUSxFQUFFO1FBQ25CO01BQ0Y7TUFFQSxJQUFNNFAsWUFBWSxHQUFHempDLEtBQUssQ0FBQzZ6QixRQUFRLENBQUNqdkMsTUFBTTtNQUMxQyxJQUFNOCtDLHNDQUFzQyxHQUFHL2dCLEtBQUssQ0FBQy9nQyxJQUFJLEtBQUssU0FBUyxJQUNwRTZoRCxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUM5Z0IsS0FBSyxDQUFDL2dDLElBQUksS0FBSyxVQUFVLElBQzNDK2dDLEtBQUssQ0FBQy9nQyxJQUFJLEtBQUssWUFBWSxLQUMzQm9lLEtBQUssQ0FBQzZ6QixRQUFRLENBQUNDLEdBQUcsQ0FBQzJQLFlBQVksR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUNFLGFBQWEsR0FBRyxJQUFJO01BRXZFLElBQUksQ0FBQyxJQUFJLENBQUNILGFBQWEsSUFBSUUsc0NBQXNDLEVBQUU7UUFDakU7TUFDRjtNQUVBLElBQUkvZ0IsS0FBSyxDQUFDL2dDLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDN0IsSUFBSSxDQUFDK2hELGFBQWEsR0FBRzNqQyxLQUFLLENBQUM2ekIsUUFBUSxDQUFDQyxHQUFHLENBQUMyUCxZQUFZLEdBQUcsQ0FBQyxDQUFDO01BQzNEO01BRUEsSUFBTUcsYUFBYSxHQUFHbHFELElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM2cEQsYUFBYTtNQUVyRCxJQUFJLENBQUN6OUIsZUFBZSxDQUFDbmlCLElBQUksQ0FBQztRQUN4QkwsVUFBVSxFQUFFakIsNERBQVcsQ0FBQ2dRLFNBQVM7UUFDakN6TyxPQUFPLEVBQUUsQ0FBQ25LLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNxSixhQUFhLElBQUksSUFBSTtRQUNqRDlJLEtBQUssRUFBRTtVQUFDNEosTUFBTSxFQUFFOC9DO1FBQWEsQ0FBQztRQUM5QjFnRCxRQUFRLEVBQUUsSUFBSSxDQUFDc3ZDO01BQ2pCLENBQUMsQ0FBQztNQUVGLElBQUksQ0FBQ3p1QyxPQUFPLENBQUNDLElBQUksQ0FDZixrRUFBa0UsRUFDbEUsSUFBSSxDQUFDcy9DLHFCQUFxQixFQUMxQixJQUFJLENBQUM5USxTQUFTLEVBQ2QsSUFBSWh3QyxzREFBUyxDQUFDb2hELGFBQWEsQ0FBQyxDQUFDMy9DLFdBQVcsQ0FBQyxDQUMzQyxDQUFDO01BQ0QsSUFBSSxDQUFDdS9DLGFBQWEsR0FBRyxJQUFJO0lBQzNCO0VBQUM7SUFBQXhwRCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBazBCLHdCQUF3QkEsQ0FBQ3kxQixhQUFxQixFQUFRO01BQ3BELElBQUksQ0FBQzk5QixlQUFlLENBQUNuaUIsSUFBSSxDQUFDO1FBQ3hCTCxVQUFVLEVBQUVqQiw0REFBVyxDQUFDb1EsaUJBQWlCO1FBQ3pDN08sT0FBTyxFQUFFLENBQUNuSyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDcUosYUFBYSxJQUFJLElBQUk7UUFDakQ5SSxLQUFLLEVBQUU7VUFBQ3VSLE1BQU0sRUFBRW80QztRQUFhLENBQUM7UUFDOUI1dUMsYUFBYSxFQUFFLElBQUksQ0FBQzZ1QyxnQkFBZ0IsR0FBRztVQUFDcjRDLE1BQU0sRUFBRSxJQUFJLENBQUNxNEM7UUFBZ0IsQ0FBQyxHQUFHN2tELFNBQVM7UUFDbEZpRSxRQUFRLEVBQUUsSUFBSSxDQUFDc3ZDO01BQ2pCLENBQUMsQ0FBQztNQUVGLElBQUksQ0FBQ3NSLGdCQUFnQixHQUFHRCxhQUFhO0lBQ3ZDO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDek0rRTs7QUFFbkU7QUFDZixTQUFTLHlGQUFNLG9CQUFvQiw0REFBNEQsOFBBQThQLG1CQUFtQixtRUFBbUUsbUdBQW1HLEVBQUUsZ1RBQWdULCtVQUErVSx1U0FBdVMseVVBQXlVLGdUQUFnVCwrVUFBK1Usc0RBQXNELG1LQUFtSyxnQ0FBZ0MsMEtBQTBLLEtBQUssOEtBQThLLGdFQUFnRSxzREFBc0QsT0FBTyxLQUFLLEdBQUcsc0RBQXNELGlDQUFpQyxPQUFPLEtBQUssR0FBRyw4REFBOEQseUNBQXlDLE9BQU8sS0FBSyxHQUFHLG9EQUFvRCwwQ0FBMEMsT0FBTyxLQUFLLEdBQUcscURBQXFELDJDQUEyQyxPQUFPLEtBQUssR0FBRyxxREFBcUQsMkNBQTJDLE9BQU8sS0FBSyxHQUFHLHFEQUFxRCwyQ0FBMkMsT0FBTyxLQUFLLEdBQUcscURBQXFELDJDQUEyQyxPQUFPLEtBQUssR0FBRyxxREFBcUQsMkNBQTJDLE9BQU8sS0FBSyxHQUFHLHFEQUFxRCwyQ0FBMkMsT0FBTyxLQUFLLEdBQUcscURBQXFELDJDQUEyQyxPQUFPLEtBQUssR0FBRyxxREFBcUQsMkNBQTJDLE9BQU8sS0FBSyxHQUFHLDBEQUEwRCx5Q0FBeUMsT0FBTyxLQUFLLEdBQUcsOEZBQThGLGlEQUFpRCxvQkFBb0IsU0FBUywyR0FBMkcsZ0VBQWdFLDBDQUEwQyxTQUFTLGlFQUFpRSxPQUFPLEtBQUssR0FBRywwRUFBMEUsc0RBQXNELG9CQUFvQixTQUFTLGdGQUFnRixzREFBc0Qsb0JBQW9CLFNBQVMsa0NBQWtDLE9BQU8sS0FBSyxHQUFHLDBGQUEwRixzREFBc0QsbUJBQW1CLFNBQVMsbUZBQW1GLDREQUE0RCxtQkFBbUIsU0FBUyxnREFBZ0QsMkJBQTJCLG1CQUFtQixTQUFTLHNEQUFzRCxPQUFPLEtBQUssR0FBRyx3R0FBd0csaURBQWlELG9CQUFvQixTQUFTLDRDQUE0Qyw4Q0FBOEMsdUJBQXVCLCtKQUErSixTQUFTLG9EQUFvRCwwQkFBMEIsNEZBQTRGLGlIQUFpSCxTQUFTLGtCQUFrQixPQUFPLEtBQUssR0FBRyxHQUFHLEdBQUcscUNBQXFDLGlXQUFpVywyT0FBMk8sdU5BQXVOLHVPQUF1TyxtVUFBbVUsZ1NBQWdTLGlQQUFpUCxpUEFBaVAsaVBBQWlQLGlQQUFpUCxpUEFBaVAsaVBBQWlQLGlQQUFpUCxpUEFBaVAsYUFBYSxvV0FBb1csbUJBQW1CLG1FQUFtRSxpTEFBaUwsRUFBRSx5VEFBeVQscVZBQXFWLGdUQUFnVCwrVUFBK1UsdVNBQXVTLHlVQUF5VSxnVEFBZ1QsK1VBQStVLHNLQUFzSyx5Q0FBeUMsZ0pBQWdKLDREQUE0RCwwQ0FBMEMsb0xBQW9MLGtHQUFrRyxLQUFLLHdMQUF3TCw2R0FBNkcsc0NBQXNDLG1DQUFtQyxxRkFBcUYsYUFBYSwrQkFBK0IsK0JBQStCLGFBQWEsU0FBUyxPQUFPLEtBQUssR0FBRyxrR0FBa0csZ0VBQWdFLE9BQU8sS0FBSyxHQUFHLDZHQUE2RyxzQ0FBc0MsbUNBQW1DLHdGQUF3Riw2SUFBNkksK0VBQStFLGVBQWUsd0ZBQXdGLGFBQWEsa0NBQWtDLHVGQUF1RixhQUFhLGtDQUFrQyx1RkFBdUYsYUFBYSwrQkFBK0IsK0JBQStCLGFBQWEsU0FBUyxPQUFPLEtBQUssR0FBRywyR0FBMkcsb0hBQW9ILHVJQUF1SSwyREFBMkQsNkJBQTZCLFdBQVcsU0FBUyxnRUFBZ0UsT0FBTyxLQUFLLEdBQUcsNkdBQTZHLHNDQUFzQyxtQ0FBbUMsd0ZBQXdGLHFHQUFxRyw4QkFBOEIsZUFBZSx3RkFBd0YsYUFBYSxrQ0FBa0MsdUZBQXVGLGFBQWEsa0NBQWtDLHVGQUF1RixhQUFhLCtCQUErQiwrQkFBK0IsYUFBYSxTQUFTLE9BQU8sS0FBSyxHQUFHLDJHQUEyRyxvSEFBb0gscUdBQXFHLCtGQUErRiw0R0FBNEcsNkRBQTZELCtCQUErQixhQUFhLG9FQUFvRSxXQUFXLHVFQUF1RSx3QkFBd0IsU0FBUyxnRUFBZ0UsT0FBTyxLQUFLLEdBQUcsZ0lBQWdJLDRCQUE0Qiw0QkFBNEIsaUNBQWlDLGdDQUFnQyxnSEFBZ0gsK0dBQStHLDBGQUEwRiwrQ0FBK0MsMEZBQTBGLHFDQUFxQyx5Q0FBeUMscUVBQXFFLHNCQUFzQixPQUFPLEtBQUssR0FBRyxHQUFHLEdBQUcseURBQXlELGtSQUFrUixxV0FBcVcscVdBQXFXLHVOQUF1TiwwTUFBME0sMlBBQTJQLEVBQUUsNk1BQTZNLDJrQ0FBMmtDLEVBQUUsNk1BQTZNLHNuQkFBc25CLEVBQUUsZ01BQWdNLDR1REFBNHVELEVBQUUsNE5BQTROLHdOQUF3Tiw2U0FBNlMsa1JBQWtSLGFBQWEseVRBQXlULHNDQUFzQyxrREFBa0Qsa0NBQWtDLE9BQU8saUJBQWlCLGFBQWEsR0FBRyxxSEFBcUgsV0FBVyw0V0FBNFcsMklBQTJJLGtDQUFrQyxxREFBcUQsR0FBRyxzSEFBc0gsV0FBVyxpVEFBaVQsb0NBQW9DLHNGQUFzRixHQUFHLG1IQUFtSCxXQUFXLG9WQUFvVixrSUFBa0ksb0NBQW9DLG9CQUFvQixjQUFjLE1BQU0sbUJBQW1CLHFKQUFxSixLQUFLLEdBQUcsa0NBQWtDLDBIQUEwSCx1QkFBdUIsS0FBSyxHQUFHLGdIQUFnSCxXQUFXLGdXQUFnVyxrSUFBa0kscUNBQXFDLHNFQUFzRSxrRkFBa0YsZ0JBQWdCLEdBQUcsbUhBQW1ILFdBQVcscVRBQXFULGtDQUFrQyx3SEFBd0gsR0FBRyxvSEFBb0gsV0FBVyw2VEFBNlQsbUNBQW1DLG1LQUFtSyxHQUFHLHNIQUFzSCxXQUFXLDRXQUE0Vyw4SUFBOEksc0lBQXNJLHVLQUF1Syw0SUFBNEksa0NBQWtDLDhHQUE4RyxHQUFHLHNIQUFzSCxXQUFXLG9WQUFvViw2SEFBNkgsOEJBQThCLGlEQUFpRCxrQ0FBa0MsdUJBQXVCLDBDQUEwQyw2Q0FBNkMsNEVBQTRFLEtBQUssbURBQW1ELEdBQUcsK0dBQStHLFdBQVcsNFZBQTRWLDZIQUE2SCwwSEFBMEgsNkJBQTZCLHVDQUF1QyxtREFBbUQsR0FBRyxpSEFBaUgsV0FBVyxpUkFBaVIseUJBQXlCLGdDQUFnQyw4SEFBOEgsc0JBQXNCLE1BQU0sZ0JBQWdCLDhIQUE4SCxLQUFLLDZGQUE2RixHQUFHLDJHQUEyRyxXQUFXLGdaQUFnWiwySUFBMkksOENBQThDLFlBQVksZ0VBQWdFLGdCQUFnQiwrQkFBK0IseU9BQXlPLEtBQUssR0FBRywrSEFBK0gsV0FBVyxpQkFBaUIsRUFBRSwySkFBMkosc0dBQXNHLGtIQUFrSCxnREFBZ0QsNkNBQTZDLGdCQUFnQixtSUFBbUksOEdBQThHLGlCQUFpQixvSkFBb0osb0dBQW9HLGNBQWMsMEtBQTBLLDBJQUEwSSwySUFBMkksaURBQWlELFdBQVcsRUFBRSwrQkFBK0IsaUJBQWlCLGNBQWMsSUFBSSw0RkFBNEYsOEhBQThILDZDQUE2Qyx1R0FBdUcsMkRBQTJELHdDQUF3QyxFQUFFLG9CQUFvQixrQkFBa0IsaUJBQWlCLGNBQWMsSUFBSSw2RkFBNkYscUhBQXFILElBQUksd0hBQXdILDZGQUE2RixpQkFBaUIsMHJCQUEwckIsK1VBQStVLHVTQUF1Uyx5VUFBeVUsZ1RBQWdULCtVQUErVSx1TUFBdU0sNklBQTZJLHVDQUF1QywyRUFBMkUsSUFBSSwrQkFBK0IsNENBQTRDLDBDQUEwQyw4REFBOEQsbUxBQW1MLG9FQUFvRSxzREFBc0QsaURBQWlELGlFQUFpRSxFQUFFLHdDQUF3QyxzQ0FBc0MsdURBQXVELE1BQU0sR0FBRyx3REFBd0Qsc0NBQXNDLGdMQUFnTCw4RkFBOEYsS0FBSyxvTEFBb0wsdUdBQXVHLHFCQUFxQixrQkFBa0IsMkdBQTJHLFNBQVMsRUFBRSw2Q0FBNkMsd0RBQXdELDBCQUEwQiw0REFBNEQsdUNBQXVDLDJKQUEySixjQUFjLE1BQU0sMkpBQTJKLGFBQWEsa0dBQWtHLHFCQUFxQixhQUFhLGlEQUFpRCxZQUFZLE1BQU0sdUNBQXVDLDJLQUEySyxjQUFjLE1BQU0sMktBQTJLLGFBQWEsV0FBVyxTQUFTLGtDQUFrQyxPQUFPLEtBQUssR0FBRyx1R0FBdUcscUJBQXFCLGtCQUFrQiw4RUFBOEUsU0FBUyxFQUFFLDZDQUE2Qyx3REFBd0QsNERBQTRELDZIQUE2SCxZQUFZLE1BQU0seUtBQXlLLFdBQVcsU0FBUyxrQ0FBa0MsT0FBTyxLQUFLLEdBQUcsR0FBRyxHQUFHLHlMQUF5TCxxTUFBcU0sNExBQTRMLHFNQUFxTSw4RUFBOEUsR0FBRyxJQUFJLGNBQWMsTUFBTTtBQUNwbDVDOzs7Ozs7Ozs7Ozs7QUNMYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUN0Q0E7QUFDQTtBQUNBLGdDQUFnQyxPQUFPO0FBQ3ZDO0FBQ0E7QUFDQSxvQ0FBb0MseUJBQXlCLFNBQVMseUJBQXlCOzs7Ozs7Ozs7O0FDTC9GO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyx5QkFBeUIsU0FBUyx5QkFBeUI7Ozs7Ozs7Ozs7QUNIN0YsdUJBQXVCLG1CQUFPLENBQUMsd0ZBQXVCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx5QkFBeUIsU0FBUyx5QkFBeUI7Ozs7Ozs7Ozs7QUNKaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMseUJBQXlCLFNBQVMseUJBQXlCOzs7Ozs7Ozs7OztBQ0pwRztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxvQ0FBb0MseUJBQXlCLFNBQVMseUJBQXlCOzs7Ozs7Ozs7O0FDekIvRjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MseUJBQXlCLFNBQVMseUJBQXlCOzs7Ozs7Ozs7O0FDSDdGLG9CQUFvQixtQkFBTyxDQUFDLGtGQUFvQjtBQUNoRDtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsK0JBQStCLHlCQUF5QixTQUFTLHlCQUF5Qjs7Ozs7Ozs7OztBQ1oxRixvQkFBb0IsbUJBQU8sQ0FBQyxrRkFBb0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esa0NBQWtDLHlCQUF5QixTQUFTLHlCQUF5Qjs7Ozs7Ozs7OztBQ1Q3RjtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUUseUJBQXlCLFNBQVMseUJBQXlCO0FBQ2hFO0FBQ0Esa0NBQWtDLHlCQUF5QixTQUFTLHlCQUF5Qjs7Ozs7Ozs7OztBQ0w3RixxQkFBcUIsbUJBQU8sQ0FBQyxvRkFBcUI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLDRCQUE0Qix5QkFBeUIsU0FBUyx5QkFBeUI7Ozs7Ozs7Ozs7QUNidkY7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHlCQUF5QixTQUFTLHlCQUF5Qjs7Ozs7Ozs7OztBQ0g5RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxZQUFZLGtFQUFrRTtBQUN0RixNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MseUJBQXlCLFNBQVMseUJBQXlCOzs7Ozs7Ozs7O0FDM0JuRztBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMseUJBQXlCLFNBQVMseUJBQXlCOzs7Ozs7Ozs7O0FDSDlGO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx5QkFBeUIsU0FBUyx5QkFBeUI7Ozs7Ozs7Ozs7QUNIaEcsY0FBYyxzR0FBaUM7QUFDL0MsNEJBQTRCLG1CQUFPLENBQUMsa0dBQTRCO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMseUJBQXlCLFNBQVMseUJBQXlCOzs7Ozs7Ozs7OztBQ1B4RyxjQUFjLHNHQUFpQztBQUMvQztBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsR0FBRyxFQUFFLHlCQUF5QixTQUFTLHlCQUF5QjtBQUNoRTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJB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R0FBK0I7QUFDckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOzs7Ozs7O1VDZEE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0N0QkE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGlDQUFpQyxXQUFXO1dBQzVDO1dBQ0E7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx5Q0FBeUMsd0NBQXdDO1dBQ2pGO1dBQ0E7V0FDQTs7Ozs7V0NQQTs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSx1REFBdUQsaUJBQWlCO1dBQ3hFO1dBQ0EsZ0RBQWdELGFBQWE7V0FDN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDTkE7QUFDQTtBQUNBOztBQUV5QjtBQUNTO0FBQ1E7QUFLNUI7QUFHZCwrREFBZTtFQUNicGhELEdBQUcsRUFBSEEsNENBQUc7RUFDSG16QixRQUFRLEVBQVJBLGlEQUFRO0VBQ1JsTixZQUFZLEVBQVpBLHFEQUFZQTtBQUNkLENBQUMsRSIsInNvdXJjZXMiOlsid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2VkZ2VBdXRoL0VkZ2VUb2tlbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L1BhcmFtZXRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZUxpc3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvTnVtYmVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9TdHJpbmdzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1VpbnQ4QXJyYXlzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL2Fzc2VydFVucmVhY2hhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQXBwZW5kZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQ29uc29sZUFwcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdUaHJlc2hvbGQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9TZHBQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9SZWFkT25seVN1YmplY3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1N1YmplY3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9FbnZpcm9ubWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL1NESy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL1RlbGVtZXRyeVVybC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsU3RhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVscy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9CaXRzdHJlYW1SZWFkZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvSDI2NEJpdHN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9uYWxVbml0L05hbFVuaXRUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9jb2RlYy9oMjY0L25hbFVuaXQvU2VpUGF5bG9hZFR5cGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9wYXJzZS9FbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvUGljdHVyZVRpbWluZ1BhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9wYXJzZS92Y2wvUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2NvZGVjL2gyNjQvcGFyc2UvdmNsL1ZhbmlsbGFWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVjb2RlL2JpdHN0cmVhbS9kZWNvZGVycy9CaXRzdHJlYW1EZWNvZGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vZGVjb2RlcnMvSDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9iaXRzdHJlYW0vZGVjb2RlcnMvUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvYml0c3RyZWFtL2VuY29kaW5nLzIwMjMvUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlY29kZS9ldmVudC9FdmVudEVtaXR0ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvZXZlbnQvRXZlbnRQdWJsaXNoZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWNvZGUvZXZlbnQvZXZlbnRzL0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZnJhbWVUaW1pbmcvSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9DaHVua2VkU3RyZWFtaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0hsc1BsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9OZXR3b3JrU3RhdGVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1JlYWxUaW1lU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1NoYWthUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvV2ViUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9JbnNlcnRhYmxlU3RyZWFtcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9EaW1lbnNpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vVHJhbnNmb3JtU3RyZWFtLndvcmtlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvd29ya2VyLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5saW5lLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgKCkgPT4ge1xucmV0dXJuICIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcblxuY29uc3QgdmlzaWJpbGl0eUNoYW5nZUV2ZW50ID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pc0ZvcmVncm91bmQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZCA9IG5ldyBSZWFkT25seVN1YmplY3QodGhpcy5faXNGb3JlZ3JvdW5kKTtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBpc0ZvcmVncm91bmQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5fdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UgPSAoKSA9PiB0aGlzLl9pc0ZvcmVncm91bmQudmFsdWUgPSAhR2xvYmFsU2NvcGUuZG9jdW1lbnRJc0hpZGRlbjtcbiAgICBjb25zdCB1c2VFdmVudENhcHR1cmVQaGFzZSA9IGZhbHNlO1xuXG4gICAgR2xvYmFsU2NvcGUuYWRkRG9jdW1lbnRFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2VFdmVudCwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgdXNlRXZlbnRDYXB0dXJlUGhhc2UpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IEdsb2JhbFNjb3BlLnJlbW92ZURvY3VtZW50RXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlRXZlbnQsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIHVzZUV2ZW50Q2FwdHVyZVBoYXNlKSkpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCcm93c2VyRGV0ZWN0b3Ige1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXggPSAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFwvKShbXFxkLmFwcmVdKykvZztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWUgPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck1ham9yVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNNb2JpbGUgPSAoL0FuZHJvaWR8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fE9wZXJhIE1pbmkvaSkudGVzdChuYXZpZ2F0b3I/LnVzZXJBZ2VudCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0FuZHJvaWQgPSAoL0FuZHJvaWQvaSkudGVzdChuYXZpZ2F0b3I/LnVzZXJBZ2VudCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQW5kcm9pZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0FuZHJvaWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzTW9iaWxlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIge1xuICBwdWJsaWMgc3RhdGljIGdldFN0cmluZ1ZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKSB8fFxuICAgICAgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApIHx8XG4gICAgICBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmRlZmF1bHRTdHJpbmdWYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Qm9vbGVhblZhbHVlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJzEnIHx8IHZhbHVlID09PSAnT24nO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlRnJvbVVyaSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKTtcblxuICAgIGlmICh2YWx1ZUZyb21VcmkpIHtcbiAgICAgIHJldHVybiB2YWx1ZUZyb21VcmkgPT09ICd0cnVlJyB8fCB2YWx1ZUZyb21VcmkgPT09ICcxJyB8fCB2YWx1ZUZyb21VcmkgPT09ICdPbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZGVmYXVsdEJvb2xlYW5WYWx1ZVtuYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldCBkZWZhdWx0Qm9vbGVhblZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcyc6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1ldGFWYWx1ZSA9IEdsb2JhbFNjb3BlLmRvY3VtZW50UXVlcnlTZWxlY3RvcihgbWV0YVtuYW1lPScke25hbWV9J11gKTtcblxuICAgIGlmICghbWV0YVZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBtZXRhVmFsdWUuZ2V0QXR0cmlidXRlKCd2YWx1ZScpO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB2YWx1ZVVSSVBhcmFtZXRlck5hbWUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAoIXZhbHVlVVJJUGFyYW1ldGVyTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IEdsb2JhbFNjb3BlLlVSTFNlYXJjaFBhcmFtcyhHbG9iYWxTY29wZS5sb2NhdGlvblNlYXJjaCkuZ2V0KHZhbHVlVVJJUGFyYW1ldGVyTmFtZSkgfHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIHtcbiAgc3RhdGljIGZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5mb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCkge1xuICAgICAgR2xvYmFsU2NvcGUucXVldWVNaWNyb3Rhc2sodGhpcy5vdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24uYmluZCh0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIEdsb2JhbFNjb3BlLnNldFRpbWVvdXQodGhpcy5vdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24uYmluZCh0aGlzKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgb3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGxldCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQgfCBudWxsID0gR2xvYmFsU2NvcGUuZG9jdW1lbnRDcmVhdGVFbGVtZW50PEhUTUxJbWFnZUVsZW1lbnQ+KCdpbWcnKTtcblxuICAgIGltZy5zcmMgPSBHbG9iYWxTY29wZS5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIoMTBlKzcpXSkpOyAvLyAxMDBNYiBvciBsZXNzIG9yIG1vcmUgZGVwZW5kaW5nIG9uIGFzIHlvdSB3aXNoIHRvIGZvcmNlL2ludm9rZSBHQyBjeWNsZSBydW5cbiAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgR2xvYmFsU2NvcGUuVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLnNyYyk7XG5cbiAgICAgIGltZyA9IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQ6IGJvb2xlYW4gPSBHbG9iYWxTY29wZS5uYXZpZ2F0b3JDb25uZWN0aW9uICE9PSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWZmZWN0aXZlVHlwZTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZG93bmxpbmsgPz8gR2xvYmFsU2NvcGUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZG93bmxpbmtNYXggPz8gLTE7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZWZmZWN0aXZlVHlwZSA/PyBHbG9iYWxTY29wZS5uYXZpZ2F0b3JDb25uZWN0aW9uPy50eXBlID8/ICdVbmtub3duJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBHbG9iYWxTY29wZS5uYXZpZ2F0b3JDb25uZWN0aW9uPy5ydHQgPz8gLTE7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuXG4gICAgR2xvYmFsU2NvcGUubmF2aWdhdG9yQ29ubmVjdGlvbj8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IEdsb2JhbFNjb3BlLm5hdmlnYXRvckNvbm5lY3Rpb24/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0aXN0aWNzKCk6IHZvaWQge1xuICAgIHRoaXMuX3J0dC52YWx1ZSA9IHRoaXMuZ2V0Um91bmRUcmlwVGltZSgpO1xuICAgIHRoaXMuX2VmZmVjdGl2ZVR5cGUudmFsdWUgPSB0aGlzLmdldEVmZmVjdGl2ZVR5cGUoKTtcbiAgICB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS52YWx1ZSA9IHRoaXMuZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGNsYXNzIFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtU2V0dXBMaXN0ZW5lcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3NTZXJ2aWNlID0gU0RLLm1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdWNjZXNzKHN0cmVhbUlkKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQsIHN0cmVhbUlkKTtcbiAgfVxuXG4gIGZhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRTdHJlYW1NZXRyaWMobWV0cmljVHlwZTogTWV0cmljc1R5cGUsIHN0cmVhbUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21ldHJpY1N1Ym1pdHRlZCkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNTdWJtaXR0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXR1cFRpbWUgPSBub3cgLSB0aGlzLl9zdGFydFRpbWU7XG4gICAgY29uc3QgbWV0cmljTmFtZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpY1R5cGUpLmdldE5hbWUoKTtcblxuICAgIHRoaXMubWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHNldHVwVGltZX0sXG4gICAgICBzdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFN0cmVhbSBtZXRyaWMgWyVzXSBpbiBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmV3IER1cmF0aW9ucyhzZXR1cFRpbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuL0VkZ2VUb2tlbic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4vRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aFBhcnNlcicpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogRWRnZVRva2VuIHtcbiAgICBpZiAoIXRoaXMuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBKU09OLnBhcnNlKGRlY29kZWRUb2tlbik7XG5cbiAgICAgIGVkZ2VUb2tlbi50b2tlbiA9IEpTT04ucGFyc2UoZWRnZVRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4oZWRnZVRva2VuKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4uc3RhcnRzV2l0aChlZGdlQXV0aFRva2VuUHJlZml4KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcblxuaW50ZXJmYWNlIElUb2tlbiB7XG4gIHVyaTogVVJMIHwgbnVsbDtcbiAgY2FwYWJpbGl0aWVzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElFZGdlVG9rZW4ge1xuICBhcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHRva2VuOiBJVG9rZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VUb2tlbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW46IElUb2tlbjtcblxuICBjb25zdHJ1Y3RvcihlZGdlVG9rZW46IElFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbklkID0gZWRnZVRva2VuPy5hcHBsaWNhdGlvbklkIHx8ICcnO1xuICAgIHRoaXMuX3Rva2VuID0ge1xuICAgICAgdXJpOiBlZGdlVG9rZW4/LnRva2VuPy51cmkgPyBuZXcgR2xvYmFsU2NvcGUuVVJMKGVkZ2VUb2tlbi50b2tlbi51cmkpIDogbnVsbCxcbiAgICAgIGNhcGFiaWxpdGllczogZWRnZVRva2VuPy50b2tlbj8uY2FwYWJpbGl0aWVzIHx8IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldCB1cmkoKTogVVJMIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLnVyaTtcbiAgfVxuXG4gIGdldCBjYXBhYmlsaXRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi5jYXBhYmlsaXRpZXM7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbklkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5kZWNsYXJlIGNvbnN0IF9fRkVBVFVSRVNfXzoge1xuICBzZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBzZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRGZWF0dXJlcyB7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvZ3MoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2dzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTWV0cmljcygpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTWV0cmljcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nVG9Db25zb2xlKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9sb2dUb0NvbnNvbGU7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGZWF0dXJlcygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBfX0ZFQVRVUkVTX187XG5cbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSAnc2VuZExvY2FsQ2FuZGlkYXRlcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzIDogdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ3NlbmRMb2dzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2dzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdzZW5kTWV0cmljcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTWV0cmljcyA6ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ2xvZ1RvQ29uc29sZScgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5sb2dUb0NvbnNvbGUgOiAnQWxsJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ0FsbCc7XG4gICAgfVxuICB9XG59XG5cbkJ1aWxkRmVhdHVyZXMuYXBwbHlGZWF0dXJlcygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVFbmFibGVtZW50IHtcbiAgc3RhdGljIGdldCBjbGllbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENsaWVudCBvZmZlciB3b3JrZmxvdyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBpbiB0aGUgZm9sbG93aW5nIGJyb3dzZXJzXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc0IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzYgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGdldCBnZXRUcmFuc2NlaXZlcnNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRmVhdHVyZUVuYWJsZW1lbnQuYWRkVHJhbmNlaXZlckRpc2FibGVkO1xuICB9XG5cbiAgc3RhdGljIGdldCBhZGRUcmFuY2VpdmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hyb21lIDY5LCA3MCwgNzEsIDcyIGV4cG9zZXMgYGFkZFRyYW5jZWl2ZXJgIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseVxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzAgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU2O1xuICB9XG5cbiAgc3RhdGljIGdldCBvblRyYWNrRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjMgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hvdWxkVXNlTmF0aXZlSGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYW1zdW5nQnJvd3Nlcic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUHJlY2FjaGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0lFJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIHR5cGVvZiBHbG9iYWxTY29wZS5kb2N1bWVudENyZWF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uID49IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzTW9iaWxlKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICB0eXBlb2YgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciA9PT0gJ3VuZGVmaW5lZCcpO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIFJUQ1J0cFJlY2VpdmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgUlRDUnRwUmVjZWl2ZXIucHJvdG90eXBlLmNyZWF0ZUVuY29kZWRTdHJlYW1zICE9PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBSVENSdHBTY3JpcHRUcmFuc2Zvcm0gIT09ICd1bmRlZmluZWQnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1JlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2tTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrICE9PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaGFubmVsRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRmVhdHVyZUVuYWJsZW1lbnQuaXNSZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrU3VwcG9ydGVkXG4gICAgICAmJiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQgfHwgRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpO1xuICB9XG5cbiAgc3RhdGljIGdldCBlcnJvclN0YWNrQWxzb0hhc0Vycm9yTWVzc2FnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lICE9PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lICE9PSAnU2FmYXJpJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZGVjbGFyZSBjb25zdCBfX1BBUkFNRVRFUlNfXzoge1xuICBkaXNjb3Zlcnk6IElEaXNjb3ZlcnlQYXJhbWV0ZXI7XG59O1xuXG5pbnRlcmZhY2UgSURpc2NvdmVyeVBhcmFtZXRlcntcbiAgaW50ZW50aW9uczogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJhbWV0ZXJzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2Rpc2NvdmVyeVBhcmFtZXRlcnM6IElEaXNjb3ZlcnlQYXJhbWV0ZXIgO1xuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5UGFyYW1ldGVycygpOiBJRGlzY292ZXJ5UGFyYW1ldGVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycztcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVBhcmFtZXRlcnMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBfX1BBUkFNRVRFUlNfXztcblxuICAgICAgdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycyA9ICdkaXNjb3ZlcnknIGluIHBhcmFtZXRlcnMgPyBwYXJhbWV0ZXJzLmRpc2NvdmVyeSA6IHtpbnRlbnRpb25zOiAnJ307XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fZGlzY292ZXJ5UGFyYW1ldGVycyA9IHtpbnRlbnRpb25zOiAnJ307XG4gICAgfVxuICB9XG59XG5cblBhcmFtZXRlcnMuYXBwbHlQYXJhbWV0ZXJzKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSUdsb2JhbFNjb3BlIGZyb20gJy4vSUdsb2JhbFNjb3BlJztcbmltcG9ydCBJRG9jdW1lbnQgZnJvbSAnLi9JRG9jdW1lbnQnO1xuaW1wb3J0IElMb2NhdGlvbiBmcm9tICcuL0lMb2NhdGlvbic7XG5pbXBvcnQgSU5ldHdvcmtJbmZvcm1hdGlvbiBmcm9tICcuL0lOZXR3b3JrSW5mb3JtYXRpb24nO1xuaW1wb3J0IElOYXZpZ2F0b3IgZnJvbSAnLi9JTmF2aWdhdG9yJztcbmltcG9ydCBJV2luZG93IGZyb20gJy4vSVdpbmRvdyc7XG5cbmV4cG9ydCBjbGFzcyBHbG9iYWxTY29wZSBpbXBsZW1lbnRzIElHbG9iYWxTY29wZSB7XG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogSUdsb2JhbFNjb3BlID0gbmV3IEdsb2JhbFNjb3BlKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50OiBJRG9jdW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvY2F0aW9uOiBJTG9jYXRpb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX25hdmlnYXRvcjogSU5hdmlnYXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfd2luZG93OiBJV2luZG93O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2RvY3VtZW50ID0gZG9jdW1lbnQ7XG4gICAgdGhpcy5fbG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgICB0aGlzLl9uYXZpZ2F0b3IgPSBuYXZpZ2F0b3I7XG4gICAgdGhpcy5fd2luZG93ID0gd2luZG93O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBJR2xvYmFsU2NvcGUge1xuICAgIHJldHVybiBHbG9iYWxTY29wZS5faW5zdGFuY2U7XG4gIH1cblxuICBnZXQgRm9ybURhdGEoKTogdHlwZW9mIEZvcm1EYXRhIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LkZvcm1EYXRhO1xuICB9XG5cbiAgZ2V0IFVSTCgpOiB0eXBlb2YgVVJMIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LlVSTDtcbiAgfVxuXG4gIGdldCBVUkxTZWFyY2hQYXJhbXMoKTogdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5VUkxTZWFyY2hQYXJhbXM7XG4gIH1cblxuICBnZXQgYWRkRG9jdW1lbnRFdmVudExpc3RlbmVyKCk6ICh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMuX2RvY3VtZW50KTtcbiAgfVxuXG4gIGdldCBhZGRXaW5kb3dFdmVudExpc3RlbmVyKCk6ICh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LmFkZEV2ZW50TGlzdGVuZXIuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IGNsZWFySW50ZXJ2YWwoKTogKGlkPzogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LmNsZWFySW50ZXJ2YWwuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IGNsZWFyVGltZW91dCgpOiAoaWQ/OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuY2xlYXJUaW1lb3V0LmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBkb2N1bWVudENyZWF0ZUVsZW1lbnQoKTogPEVsZW1lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudD4odGFnOiBzdHJpbmcpID0+IEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50LmJpbmQodGhpcy5fZG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50SGFzRm9jdXMoKTogKCkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50Lmhhc0ZvY3VzLmJpbmQodGhpcy5fZG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50SXNIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fZG9jdW1lbnQuaGlkZGVuO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50UXVlcnlTZWxlY3RvcigpOiA8RWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50Pih0YWc6IHN0cmluZykgPT4gRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yLmJpbmQodGhpcy5fZG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IGZldGNoKCk6IChpbnB1dDogc3RyaW5nIHwgVVJMIHwgUmVxdWVzdCwgaW5pdD86IFJlcXVlc3RJbml0KSA9PiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5mZXRjaC5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgbG9jYXRpb25Ib3N0bmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbi5ob3N0bmFtZTtcbiAgfVxuXG4gIGdldCBsb2NhdGlvblNlYXJjaCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2g7XG4gIH1cblxuICBnZXQgbmF2aWdhdG9yQ29ubmVjdGlvbigpOiBJTmV0d29ya0luZm9ybWF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgbmF2aWdhdG9ySXNPbkxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRvci5vbkxpbmU7XG4gIH1cblxuICBnZXQgcXVldWVNaWNyb3Rhc2soKTogKG1pY3JvdGFzazogKCkgPT4gdm9pZCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5xdWV1ZU1pY3JvdGFzay5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgcmVtb3ZlRG9jdW1lbnRFdmVudExpc3RlbmVyKCk6ICh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMuX2RvY3VtZW50KTtcbiAgfVxuXG4gIGdldCByZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyKCk6ICh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IHNldEludGVydmFsKCk6IChoYW5kbGVyOiBzdHJpbmcgfCBGdW5jdGlvbiwgdGltZW91dD86IG51bWJlciB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LnNldEludGVydmFsLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBzZXRUaW1lb3V0KCk6IChoYW5kbGVyOiBzdHJpbmcgfCBGdW5jdGlvbiwgdGltZW91dD86IG51bWJlciB8IHVuZGVmaW5lZCkgPT4gbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LnNldFRpbWVvdXQuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdsb2JhbFNjb3BlLmdldEluc3RhbmNlKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGUgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXNwb3NhYmxlOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGRpc3Bvc2FibGU6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9kaXNwb3NlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGUgPSBkaXNwb3NhYmxlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kaXNwb3NlZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5fZGlzcG9zYWJsZS5jYWxsKHRoaXMpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc3Bvc2FibGVMaXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogSURpc3Bvc2FibGVbXSA9IFtdO1xuXG4gIGFkZChkaXNwb3NhYmxlOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX2xpc3QucHVzaChkaXNwb3NhYmxlKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5mb3JFYWNoKGRpc3Bvc2FibGUgPT4gZGlzcG9zYWJsZS5kaXNwb3NlKCkpO1xuICAgIHRoaXMuX2xpc3QubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEaXNwb3NhYmxlTGlzdFtkaXNwb3NhYmxlcz0ke3RoaXMuX2xpc3QubGVuZ3RofV1gO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG4vLyBBcyBmbG9hdCBpbiBFQ01BU2NyaXB0IHVzZSA2NC1iaXQgZm9ybWF0IGl0IGNhbm5vdCBoYXZlL2hhbmRsZSBtb3JlIHRoYW4gMTUgc3ltYm9scyBhZnRlciBkb3QuXG5jb25zdCBtYXhEaWdpdHNJbkZsb2F0QWZ0ZXJEb3QgPSAxNTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTnVtYmVycyB7XG4gIHN0YXRpYyBjb3VudE51bWJlckxlbmd0aCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSA9IDA7XG4gICAgbGV0IG51bWJlciA9IHZhbHVlO1xuXG4gICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgIG51bWJlciAqPSAtMTtcbiAgICAgIGluY3JlbWVudEZvck5lZ2F0aXZlVmFsdWUrKztcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVycy5jb3VudERpZ2l0c0JlZm9yZURlY2ltYWwobnVtYmVyKSArIGluY3JlbWVudEZvck5lZ2F0aXZlVmFsdWUgKyAobnVtYmVyICE9PSBNYXRoLmZsb29yKG51bWJlcikgPyBOdW1iZXJzLmNvdW50RGlnaXRzQWZ0ZXJEZWNpbWFsKG51bWJlcikgKyAxIDogMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBmaXhSb3VuZGluZyh2YWx1ZTogbnVtYmVyLCBwcmVjaXNpb246IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgcG93ZXIgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcblxuICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogcG93ZXIpIC8gcG93ZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb3VudERpZ2l0c0JlZm9yZURlY2ltYWwodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGRpZ2l0c0JlZm9yZURlY2ltYWwgPSAxO1xuICAgIGxldCBudW1iZXIgPSB2YWx1ZTtcblxuICAgIHdoaWxlIChudW1iZXIgPj0gMTApIHtcbiAgICAgIG51bWJlciA9IG51bWJlciAvIDEwO1xuICAgICAgZGlnaXRzQmVmb3JlRGVjaW1hbCsrO1xuICAgIH1cblxuICAgIHJldHVybiBkaWdpdHNCZWZvcmVEZWNpbWFsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY291bnREaWdpdHNBZnRlckRlY2ltYWwodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHZhbHVlO1xuICAgIGxldCBtb2RpZmllZFZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSk7XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIHdoaWxlIChtb2RpZmllZFZhbHVlICE9PSBvcmlnaW5hbFZhbHVlICYmIGNvdW50IDwgbWF4RGlnaXRzSW5GbG9hdEFmdGVyRG90KSB7XG4gICAgICBjb3VudCsrO1xuICAgICAgbW9kaWZpZWRWYWx1ZSA9IE51bWJlcnMuZml4Um91bmRpbmcob3JpZ2luYWxWYWx1ZSwgY291bnQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOdW1iZXJzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5ncyB7XG4gIHN0YXRpYyByYW5kb20obGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhbmRvbTEzQ2hhcmFjdGVycyA9ICgpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygyLCAxNSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxvb3BzOiBudW1iZXIgPSBNYXRoLmNlaWwobGVuZ3RoIC8gMTMpO1xuXG4gICAgcmV0dXJuIG5ldyBBcnJheShsb29wcykuZmlsbChyYW5kb20xM0NoYXJhY3RlcnMpLnJlZHVjZSgoc3RyaW5nLCBmdW5jKSA9PiB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgZnVuYygpO1xuICAgIH0sICcnKS5zdWJzdHJpbmcoMCwgbGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmdzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVWludDhBcnJheXMge1xuICBwdWJsaWMgc3RhdGljIGlzRGF0YUF0T2Zmc2V0VGFyZ2V0Qnl0ZVNlcXVlbmNlKHRhcmdldEJ5dGVTZXF1ZW5jZTogVWludDhBcnJheSwgZGF0YTogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCB0YXJnZXRCeXRlU2VxdWVuY2UubGVuZ3RoOyBpZHgrKykge1xuICAgICAgaWYgKHRhcmdldEJ5dGVTZXF1ZW5jZVtpZHhdICE9PSBkYXRhW29mZnNldCArIGlkeF0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmaW5kVGFyZ2V0Qnl0ZVNlcXVlbmNlSW5kZXhGcm9tT2Zmc2V0KHRhcmdldEJ5dGVTZXF1ZW5jZTogVWludDhBcnJheSwgZGF0YTogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIsIHJldHVyblZhbHVlV2hlbk5vdEZvdW5kID0gLTEpOiBudW1iZXIge1xuICAgIGZvciAobGV0IGN1cnJlbnRJbmRleCA9IG9mZnNldDsgY3VycmVudEluZGV4IDw9IGRhdGEuYnl0ZUxlbmd0aDsgY3VycmVudEluZGV4KyspIHtcbiAgICAgIGlmIChVaW50OEFycmF5cy5pc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZSh0YXJnZXRCeXRlU2VxdWVuY2UsIGRhdGEsIGN1cnJlbnRJbmRleCkpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsdWVXaGVuTm90Rm91bmQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldFV1aWRTdHJpbmdGcm9tVWludDhBcnJheShkYXRhOiBVaW50OEFycmF5LCB1dWlkQnl0ZUxlbmd0aCA9IDE2KTogc3RyaW5nIHtcbiAgICBjb25zdCB1dWlkOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgdXVpZEJ5dGVMZW5ndGg7IGlkeCsrKSB7XG4gICAgICBjb25zdCBieXRlSGV4ID0gZGF0YVtpZHhdLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpO1xuXG4gICAgICB1dWlkLnB1c2goYnl0ZUhleCk7XG5cbiAgICAgIGlmIChpZHggPT09IDMgfHwgaWR4ID09PSA1IHx8IGlkeCA9PT0gNyB8fCBpZHggPT09IDkpIHtcbiAgICAgICAgdXVpZC5wdXNoKCctJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHV1aWQuam9pbignJyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVWludDhBcnJheXMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgZW51bSBMb2dnaW5nTGV2ZWwge1xuICBBbGwgPSAtMSxcbiAgVHJhY2UgPSAxMCxcbiAgRGVidWcgPSAyMCxcbiAgSW5mbyA9IDMwLFxuICBXYXJuID0gNDAsXG4gIEVycm9yID0gNTAsXG4gIEZhdGFsID0gNjAsXG4gIE9mZiA9IDEwMCxcbn1cblxuZXhwb3J0IHR5cGUgTG9nZ2luZ0xldmVsVHlwZSA9ICdPZmYnIHwgJ1RyYWNlJyB8ICdEZWJ1ZycgfCAnSW5mbycgfCAnV2FybicgfCAnRXJyb3InIHwgJ0ZhdGFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYXRlZ29yeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBlbmRlcnM6IEFwcGVuZGVycztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkO1xuXG4gIGdldCBjYXRlZ29yeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jYXRlZ29yeTtcbiAgfVxuXG4gIGdldCBhcHBlbmRlcnMoKTogQXBwZW5kZXJzIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nVGhyZXNob2xkIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgdHJhY2UoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLlRyYWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLlRyYWNlLCBhcmdzKTtcbiAgfVxuXG4gIGRlYnVnKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5EZWJ1Zykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5EZWJ1ZywgYXJncyk7XG4gIH1cblxuICBpbmZvKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5JbmZvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkluZm8sIGFyZ3MpO1xuICB9XG5cbiAgd2FybiguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5XYXJuLCBhcmdzKTtcbiAgfVxuXG4gIGVycm9yKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5FcnJvciwgYXJncyk7XG4gIH1cblxuICBmYXRhbCguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRmF0YWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRmF0YWwsIGFyZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2cobGV2ZWw6IG51bWJlciwgYXJnczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzKTtcblxuICAgIHRoaXMuX2FwcGVuZGVycy52YWx1ZS5mb3JFYWNoKChhcHBlbmRlcjogSUFwcGVuZGVyKSA9PiB7XG4gICAgICBhcHBlbmRlci5sb2cobGV2ZWwsIG1lc3NhZ2UsIHRoaXMuY2F0ZWdvcnksIGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3M6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSBhcmdzWzBdO1xuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAocmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mICYmIGFyZ3MubGVuZ3RoID4gMSAmJiBpbmRleCA+PSAwKSB7XG4gICAgICBpbmRleCA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZignJScsIGluZGV4KTtcblxuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRleCArIDIpO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgLy8gRXNjYXBlZCAnJSUnIHR1cm5zIGludG8gJyUnXG4gICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAnJWQnIG9yICclcycgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2onOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAlaicgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMuc3RyaW5naWZ5KGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgYXJncyA9IGFyZ3MucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gYXJyYXkubGVuZ3RoICYmIGN1cnJlbnRWYWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmVycm9yU3RhY2tBbHNvSGFzRXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLm1lc3NhZ2UpICsgJ1xcbicgKyB0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZS5zdGFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyBgWyR7dGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUpfV1gO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaW5naWZ5KGFyZzogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWNoZSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYXJnIGluc3RhbmNlb2YgRXJyb3IgPyB0aGlzLnRvU3RyaW5nKGFyZykgOiBhcmcsXG4gICAgICAgIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICc8cmVjdXJzaXZlPic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhY2hlLnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgMlxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJ1tvYmplY3QgaW52YWxpZCBKU09OLnN0cmluZ2lmeV0nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUFyZ3VtZW50KGFyZ3VtZW50OiBhbnksIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmc6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHRoaXMudG9TdHJpbmcoYXJndW1lbnQpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAyKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9TdHJpbmcoZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRhdGEgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IHRvU3RyaW5nU3RyID0gJyc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9ICdbb2JqZWN0IGludmFsaWQgdG9TdHJpbmcoKV0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvU3RyaW5nU3RyO1xuICB9XG5cbiAgY29uc3RydWN0b3IoY2F0ZWdvcnk6IHN0cmluZywgYXBwZW5kZXJzOiBBcHBlbmRlcnMsIHRocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCkge1xuICAgIHRoaXMuX2NhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gYXBwZW5kZXJzO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckRlZmF1bHRzIHtcbiAgc3RhdGljIGdldCBkZWZhdWx0TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRMb2dzXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMubG9nVG9Db25zb2xlXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyLCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4vQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2Vyczoge1tjYXRlZ29yeTogc3RyaW5nXTogSUxvZ2dlcn0gPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2FwcGVuZGVyczogQXBwZW5kZXJzID0gbmV3IEFwcGVuZGVycygpO1xuICBwcml2YXRlIHN0YXRpYyBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkID0gbmV3IExvZ2dpbmdUaHJlc2hvbGQoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gPSBuZXcgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2dnZXIoY2F0ZWdvcnk6IHN0cmluZyk6IElMb2dnZXIge1xuICAgIGlmICh0eXBlb2YgY2F0ZWdvcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjYXRlZ29yeSA9ICdTREsnO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldO1xuXG4gICAgaWYgKGxvZ2dlcikge1xuICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV0gPSBuZXcgTG9nZ2VyKGNhdGVnb3J5LCB0aGlzLl9hcHBlbmRlcnMsIHRoaXMuX3RocmVzaG9sZCk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2luZ0xldmVsKCk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCdjb25zb2xlJywgTG9nZ2VyRmFjdG9yeS5hcHBseUNvbnNvbGVMb2dnZXIuYmluZCh0aGlzKSk7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKCd0ZWxlbWV0cnknLCBMb2dnZXJGYWN0b3J5LmFwcGx5VGVsZW1ldHJ5TG9nZ2VyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlMb2dnaW5nTGV2ZWwoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbG9nZ2luZy1sZXZlbCcpO1xuXG4gICAgaWYgKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pIHtcbiAgICAgIHRoaXMuX3RocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbChuYW1lOiBzdHJpbmcsIGFwcGx5QXBwZW5kZXI6IChsZXZlbDogTG9nZ2luZ0xldmVsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKGBwaGVuaXgtJHtuYW1lfS1sb2dnaW5nLWxldmVsYCk7XG5cbiAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09ICdPZmYnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXBwbHlBcHBlbmRlcihMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5Q29uc29sZUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseVRlbGVtZXRyeUxvZ2dlcihsZXZlbDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQgPSBsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gICAgdGhpcy5fYXBwZW5kZXJzLmFkZChuZXcgVGVsZW1ldHJ5QXBwZW5kZXIodGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkxvZ2dlckZhY3RvcnkuYXBwbHlMb2dnZXJDb25maWdGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ0xldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKGxvZ2dpbmdMZXZlbDogTG9nZ2luZ0xldmVsKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLk9mZjpcbiAgICAgICAgcmV0dXJuICdPZmYnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuVHJhY2U6XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRGVidWc6XG4gICAgICAgIHJldHVybiAnRGVidWcnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuSW5mbzpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5XYXJuOlxuICAgICAgICByZXR1cm4gJ1dhcm4nO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRXJyb3I6XG4gICAgICAgIHJldHVybiAnRXJyb3InO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuRmF0YWw6XG4gICAgICAgIHJldHVybiAnRmF0YWwnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuQWxsOlxuICAgICAgICByZXR1cm4gJ0FsbCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKGxvZ2dpbmdMZXZlbFR5cGU6IExvZ2dpbmdMZXZlbFR5cGUpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsVHlwZSkge1xuICAgICAgY2FzZSAnT2ZmJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5PZmY7XG4gICAgICBjYXNlICdUcmFjZSc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuVHJhY2U7XG4gICAgICBjYXNlICdEZWJ1Zyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRGVidWc7XG4gICAgICBjYXNlICdJbmZvJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5JbmZvO1xuICAgICAgY2FzZSAnV2Fybic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuV2FybjtcbiAgICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5FcnJvcjtcbiAgICAgIGNhc2UgJ0ZhdGFsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5GYXRhbDtcbiAgICAgIGNhc2UgJ0FsbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi9Mb2dnZXJEZWZhdWx0cyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nVGhyZXNob2xkIHtcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB2YWx1ZSgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiB0aGlzLl90aHJlc2hvbGQ7XG4gIH1cblxuICBzZXRUaHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4vTWV0cmljc1R5cGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNUeXBlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljczogTWV0cmljc1R5cGU7XG5cbiAgY29uc3RydWN0b3IobWV0cmljczogTWV0cmljc1R5cGUpIHtcbiAgICB0aGlzLl9tZXRyaWNzID0gbWV0cmljcztcbiAgfVxuXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTWV0cmljc1R5cGVbdGhpcy5fbWV0cmljc107XG4gIH1cblxuICBnZXRUZWxlbWV0cnlMZXZlbCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0aGlzLl9tZXRyaWNzKSB7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5Fc3NlbnRpYWw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlN0YWxsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkJ1ZmZlcmluZzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuTmV0d29ya1R5cGU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJlc29sdXRpb25DaGFuZ2VkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRoaXMuX21ldHJpY3MpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4vVGVsZW1ldHJ5RGVmYXVsdCc7XG5cbmV4cG9ydCBlbnVtIFRlbGVtZXRyeUxldmVsIHtcbiAgT2ZmID0gMTAwLFxuICBFc3NlbnRpYWwgPSAxMCxcbiAgQWxsID0gLTFcbn1cblxuZXhwb3J0IHR5cGUgVGVsZW1ldHJ5TGV2ZWxUeXBlID0gJ09mZicgfCAnRXNzZW50aWFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9tZXRyaWNzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCA9IFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IG1ldHJpY3NVcmwgPSBuZXcgR2xvYmFsU2NvcGUuVVJMKHVybCk7XG5cbiAgICBtZXRyaWNzVXJsLnBhdGhuYW1lID0gbWV0cmljc1VybC5wYXRobmFtZSArICcvbWV0cmljcyc7XG5cbiAgICB0aGlzLl91cmwgPSBtZXRyaWNzVXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IFRlbGVtZXRyeUxldmVsKSB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4uL3Nkay9UZWxlbWV0cnlVcmwnO1xuaW1wb3J0IEVudmlyb25tZW50IGZyb20gJy4uL3Nkay9FbnZpcm9ubWVudCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4vVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX21ldHJpY3NTZXJ2aWNlczoge1tjYXRlZ29yeTogc3RyaW5nXTogTWV0cmljc1NlcnZpY2V9ID0ge307XG5cbiAgc3RhdGljIGdldE1ldHJpY3NTZXJ2aWNlKHVybDogc3RyaW5nKTogTWV0cmljc1NlcnZpY2Uge1xuICAgIGlmICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1cmwgbXVzdCBiZSBhIHN0cmluZyBpbnN0ZWFkIHJlY2VpdmVkIFske3R5cGVvZiB1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NTZXJ2aWNlcyA9IE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMpIHtcbiAgICAgIHJldHVybiBtZXRyaWNzU2VydmljZXM7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBuZXcgTWV0cmljc0NvbmZpZ3VyYXRpb24oKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IEVudmlyb25tZW50LmdldEVudmlyb25tZW50RnJvbVVybCh1cmwpO1xuXG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKFNESy50ZWxlbWV0cnlMZXZlbCk7XG5cbiAgICByZXR1cm4gTWV0cmljc0ZhY3RvcnkuX21ldHJpY3NTZXJ2aWNlc1t1cmxdID0gbmV3IE1ldHJpY3NTZXJ2aWNlKG1ldHJpY3NDb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIHN0YXRpYyBzZXRUZWxlbWV0cnlMZXZlbCh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBPYmplY3QudmFsdWVzKE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXMpO1xuXG4gICAgaWYgKG1ldHJpY3NTZXJ2aWNlcyAmJiBtZXRyaWNzU2VydmljZXMubGVuZ3RoKSB7XG4gICAgICBtZXRyaWNzU2VydmljZXMuZm9yRWFjaChtZXRyaWNzU2VydmljZSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICAgICAgbWV0cmljc0NvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gdGVsZW1ldHJ5TGV2ZWw7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0cmljc0ZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFeHBvbmVudGlhbEJhY2tvZmYgZnJvbSAnLi4vdGltZS9FeHBvbmVudGlhbEJhY2tvZmYnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuY29uc3QgbWF4QnVmZmVyZWRSZWNvcmRzID0gMjA0ODtcblxuaW50ZXJmYWNlIElWYWx1ZSB7XG4gIHN0cmluZz86IHN0cmluZztcbiAgdWludDY0PzogbnVtYmVyO1xuICBmbG9hdD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElNZXRyaWNSZWNvcmQge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgbWV0cmljOiBzdHJpbmc7XG4gIHZhbHVlOiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU6IElWYWx1ZTtcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpYyB7XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZTtcbiAgdmFsdWU/OiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU/OiBJVmFsdWU7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ01ldHJpY3NTZXJ2aWNlJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZmFpbHVyZUNvdW50ID0gMDtcbiAgcHJpdmF0ZSBfZG9tYWluID0gR2xvYmFsU2NvcGUubG9jYXRpb25Ib3N0bmFtZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUuRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbWV0cmljc01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IEdsb2JhbFNjb3BlLmZldGNoKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBtZXRyaWNzTWVzc2FnZXMgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKDAsIHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgdGhpcy5fbWV0cmljcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UocmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUocmVzcG9uc2UpKSB7XG4gICAgICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSBtYXhCdWZmZXJlZFJlY29yZHMpIHtcbiAgICAgICAgICB0aGlzLl9mYWlsdXJlQ291bnQrKztcblxuICAgICAgICAgIEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWV0cmljcyA9IFsuLi5tZXRyaWNzTWVzc2FnZXMsIC4uLnRoaXMuX21ldHJpY3NdO1xuXG4gICAgICAgICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICAgICAgICB9LCB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9mYWlsdXJlQ291bnQpKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVG9vIG1hbnkgY2FjaGVkIG1ldHJpYyByZWNvcmRzIFslc10sIGRyb3BwaW5nIFslc10gcmVjb3JkcycsIHRoaXMuX21ldHJpY3MubGVuZ3RoLCBtZXRyaWNzTWVzc2FnZXMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9mYWlsdXJlQ291bnQgPSAwO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlKHtzdGF0dXN9OiBSZXNwb25zZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXjVcXGR7Mn0kLy50ZXN0KHN0YXR1cy50b1N0cmluZygpKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBNZXRyaWNzVHlwZSB7XG4gIFRpbWVUb0ZpcnN0RnJhbWUsXG4gIENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gIFN0YWxsZWQsXG4gIEJ1ZmZlcmluZyxcbiAgU2V0dXBDb21wbGV0ZWQsXG4gIFNldHVwRmFpbGVkLFxuICBSb3VuZFRyaXBUaW1lLFxuICBEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgTmV0d29ya1R5cGUsXG4gIFJlc29sdXRpb25DaGFuZ2VkLFxuICBBcHBsaWNhdGlvbkZvcmVncm91bmQsXG4gIEFwcGxpY2F0aW9uQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXRyaWNzVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlEZWZhdWx0IHtcbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRNZXRyaWNzXTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLy8gTm90ZTogVGhpcyBQcm9taXNlIHBvbHlmaWxsIGlzIGluY2x1ZGVkIGZvciBicm93c2VyIGJ1aWxkcyBvbmx5IHRvIGFkZHJlc3MgY29tcGF0aWJpbGl0eSBpc3N1ZXNcbi8vIHdpdGggb2xkZXIgYnJvd3NlcnMgd2hvc2UgbmF0aXZlIFByb21pc2UgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgc3VwcG9ydCAuZmluYWxseS5cblxuaW1wb3J0IFByb21pc2VIYW5kbGVyIGZyb20gJy4vUHJvbWlzZUhhbmRsZXInO1xuXG5jbGFzcyBQcm9taXNlIHtcbiAgX3N0YXRlOiBudW1iZXI7XG4gIF9oYW5kbGVkOiBib29sZWFuO1xuICBfdmFsdWU6IFByb21pc2U7XG4gIF9kZWZlcnJlZHM6IEFycmF5PFByb21pc2VIYW5kbGVyPjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIHRoZW4ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXcnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gMDtcbiAgICB0aGlzLl9oYW5kbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGVmZXJyZWRzID0gW107XG5cbiAgICB0aGlzLmRvUmVzb2x2ZShjYWxsYmFjayk7XG4gIH1cblxuICBkb1Jlc29sdmUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayhcbiAgICAgICAgdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZWplY3QocmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJvbWlzZVJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlc29sdmUobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFByb21pc2UgUmVzb2x1dGlvbiBQcm9jZWR1cmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qcm9taXNlcy1hcGx1cy9Qcm9taXNlcy1zcGVjI3RoZS1Qcm9taXNlLXJlc29sdXRpb24tcHJvY2VkdXJlXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHByb21pc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBQcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0IHNlbGYuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSAmJiAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3VmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIGNvbnN0IHRoZW4gPSBuZXdWYWx1ZS50aGVuO1xuXG4gICAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICBwcm9taXNlLl9zdGF0ZSA9IDM7XG4gICAgICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICBwcm9taXNlLmZpbmFsZSgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcHJvbWlzZS5kb1Jlc29sdmUoZnVuY3Rpb24oKTogdm9pZCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICB0aGVuLmFwcGx5KG5ld1ZhbHVlLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N0YXRlID0gMTtcbiAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBwcm9taXNlLmZpbmFsZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByb21pc2UucHJvbWlzZVJlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVqZWN0KG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSAyO1xuICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5maW5hbGUoKTtcbiAgfVxuXG4gIGZpbmFsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IDIgJiYgdGhpcy5fZGVmZXJyZWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9oYW5kbGVkKSB7XG4gICAgICAgICAgUHJvbWlzZS5fdW5oYW5kbGVkUmVqZWN0aW9uKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2RlZmVycmVkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5oYW5kbGUodGhpcy5fZGVmZXJyZWRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBudWxsO1xuICB9XG5cbiAgaGFuZGxlKGRlZmVycmVkOiBQcm9taXNlSGFuZGxlcik6IHZvaWQge1xuICAgIGxldCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgd2hpbGUgKHByb21pc2UuX3N0YXRlID09PSAzKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5fdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAwKSB7XG4gICAgICBwcm9taXNlLl9kZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9taXNlLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9taXNlLl9zdGF0ZSA9PT0gMSA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJyZWQub25SZWplY3RlZDtcblxuICAgICAgaWYgKGNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMSkge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShyZXN1bHQpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFsbChhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZW1haW5pbmcgPSBhcmdzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1hbmFnZVJlc3BvbnNlID0gKGksIHZhbHVlKTogdm9pZCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRoZW4gPSB2YWx1ZS50aGVuO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlID0+IG1hbmFnZVJlc3BvbnNlKGksIHZhbHVlKSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJnc1tpXSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKC0tcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFuYWdlUmVzcG9uc2UoaSwgYXJnc1tpXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZSh2YWx1ZSk6IFByb21pc2Uge1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcmVzb2x2ZSh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJlamVjdCh2YWx1ZSk6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiByZWplY3QodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByYWNlKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLnJhY2UgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoYXJyW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2ltbWVkaWF0ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBpZ25vcmVkID0gd2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICB9XG5cbiAgc3RhdGljIF91bmhhbmRsZWRSZWplY3Rpb24oZXJyb3IpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOicsIGVycm9yKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59XG5cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24ob25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsndGhlbiddID0gZnVuY3Rpb24ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCgpID0+IG51bGwpO1xuXG4gIHRoaXMuaGFuZGxlKG5ldyBQcm9taXNlSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkpO1xuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSA9IGZ1bmN0aW9uKGNhbGxiYWNrOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgdmFsdWUgPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IHZhbHVlLCAoKSA9PiBudWxsKSxcbiAgICByZWFzb24gPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IGNvbnN0cnVjdG9yLnJlamVjdChyZWFzb24pLCAoKSA9PiBudWxsKVxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlIGZyb20gJy4vUHJvbWlzZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb21pc2VIYW5kbGVyIHtcbiAgb25GdWxmaWxsZWQ6IEZ1bmN0aW9uO1xuICBvblJlamVjdGVkOiBGdW5jdGlvbjtcbiAgcHJvbWlzZTogUHJvbWlzZTtcblxuICBjb25zdHJ1Y3RvcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IG51bGw7XG4gICAgdGhpcy5vblJlamVjdGVkID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicgPyBvblJlamVjdGVkIDogbnVsbDtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcblxuZXhwb3J0IGludGVyZmFjZSBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQge1xuICBhdWRpb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHZpZGVvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgbG9jYWxPZmZlcjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiB7XG4gICAgZGlyZWN0aW9uPzogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb247XG4gICAgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcbiAgfTtcblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPHsgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHwgdm9pZD47IGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gfT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ3JlY3Zvbmx5JyxcbiAgICAgIHBlZXJDb25uZWN0aW9uOiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9KVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcihkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uID0gJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gZmFsc2UpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIGlmIChQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCAmJiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbiAmJiAhZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLnBlZXJDb25uZWN0aW9uO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0gRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQgPyB7ZW5jb2RlZEluc2VydGFibGVTdHJlYW1zfSA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKVxuICAgICAgLnRoZW4oYXN5bmMgcGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNBZGRUcmFuc2NlaXZlcjtcbiAgICAgICAgbGV0IHZpZGVvVHJhbnNjZWl2ZXIsIGF1ZGlvVHJhbnNjZWl2ZXI7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIpIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ2F1ZGlvJywge2RpcmVjdGlvbn0pO1xuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcigndmlkZW8nLCB7ZGlyZWN0aW9ufSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih1bmRlZmluZWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkaXJlY3Rpb24gPT09ICdyZWN2b25seScgPyB7XG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgIH0gOiB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIge1xuICBzdGF0aWMgdHJ1bmNhdGVJY2VTZXJ2ZXJzKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XTtcblxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgdXJscy5wdXNoKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgdXJsczogdXJscyxcbiAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG5cbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSdGNDb25maWd1cmF0aW9uTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1N0YXRpc3RpYyB7XG4gIHNzcmM/OiBzdHJpbmc7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGJ5dGVzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGZyYW1lc0RlY29kZWQ/OiBudW1iZXI7XG4gIHBhY2tldHNMb3N0PzogbnVtYmVyO1xuICBwYWNrZXRzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGNvZGVjPzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU/OiBudW1iZXI7XG4gIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcD86IG51bWJlcjtcbn1cblxuY29uc3QgdXBkYXRlU3RhdGlzdGljVGltZW91dCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkQXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydGNTdGF0aXN0aWM6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+ID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHt9KTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgcHJpdmF0ZSBfaXNNb25pdG9yUnVubmluZyA9IHRydWU7XG4gIHByaXZhdGUgX3VwZGF0ZVRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdHJhY2tzVG9Nb25pdG9yOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgdGhpcy5fdHJhY2tzVG9Nb25pdG9yID0gbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkubWFwKHRyYWNrID0+IHRyYWNrLmtpbmQpIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmdldEN1cnJlbnRPZmZlckRpc2FibGVkKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFNEUCA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYyA9IHBhcnNlZFNEUC5hdWRpb0NvZGVjO1xuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjID0gcGFyc2VkU0RQLnZpZGVvQ29kZWM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpYygpOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lb3V0KSB7XG4gICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZW91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMudXBkYXRlU3RhdGlzdGljTGVnYWN5KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYWZhcmkgMTEgZG9lc250IGhhdmUga2luZCBvciBtZWRpYVR5cGUgc28gd2UgbmVlZCB0byB0YWtlIGl0IGZyb20gdGhlIGluYm91bmQtcnRwIG9iamVjdCBpZFxuICAgIGNvbnN0IGdldEtpbmRGb3JTYWZhcmkxMSA9IChpdGVtKTogc3RyaW5nID0+IGl0ZW0uaWQuaW5jbHVkZXMoJ0F1ZGlvJykgPyAnYXVkaW8nIDogaXRlbS5pZC5pbmNsdWRlcygnVmlkZW8nKSA/ICd2aWRlbycgOiAnJztcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMobnVsbClcbiAgICAgIC50aGVuKHN0YXRzID0+IHtcbiAgICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcblxuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgbGV0IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgIHN0YXRzLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUpIHtcbiAgICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSAqIDEwMDA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnaW5ib3VuZC1ydHAnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSByZXBvcnQua2luZCB8fCByZXBvcnQubWVkaWFUeXBlIHx8IGdldEtpbmRGb3JTYWZhcmkxMShyZXBvcnQpO1xuICAgICAgICAgICAgICBsZXQgY29kZWMgPSAnJztcblxuICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSByZXBvcnQuY29kZWNJZCkge1xuICAgICAgICAgICAgICAgICAgY29kZWMgPSBpdGVtLm1pbWVUeXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKGtpbmQgJiYgdGhpcy5fdHJhY2tzVG9Nb25pdG9yLmluY2x1ZGVzKGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSByZXBvcnQuYnl0ZXNSZWNlaXZlZCB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQnl0ZXNSZWNlaXZlZCA9IHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy5ieXRlc1JlY2VpdmVkID8/IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNEZWx0YSA9IGJ5dGVzIC0gcHJldmlvdXNCeXRlc1JlY2VpdmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlcG9ydC50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8udGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpdHJhdGUgPSBieXRlc0RlbHRhICYmIHRpbWVEZWx0YSA/IE1hdGguZmxvb3IoOCAqIGJ5dGVzRGVsdGEgL1xuICAgICAgICAgICAgICAgICAgdGltZURlbHRhICogMTAwMCkgOiAwO1xuXG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXSA9IHtcbiAgICAgICAgICAgICAgICAgIHNzcmM6IHJlcG9ydC5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiByZXBvcnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IHJlcG9ydC5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgcGFja2V0c0xvc3Q6IHJlcG9ydC5wYWNrZXRzTG9zdCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNSZWNlaXZlZDogcmVwb3J0LnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LmZyYW1lc0RlY29kZWQ7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZwcyA9IChyZXBvcnQuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMDtcblxuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnBzJ10gPSBmcHMgPyBNYXRoLnJvdW5kKGZwcyAqIDEwMCkgLyAxMDAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcbiAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgc3RhdHMucmVzdWx0KCkuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICByZXBvcnQubmFtZXMoKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZ29vZ1JUVCcpIHtcbiAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuc3RhdChuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ3NzcmMnKSB7XG4gICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gcmVwb3J0LnN0YXQoJ21lZGlhVHlwZScpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ21lZGlhVHlwZSddID0gbWVkaWFUeXBlO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5zdGF0KCdmcmFtZXNEZWNvZGVkJyk7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0F1ZGlvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1ZpZGVvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuXG4gICAgY29uc3Qgc2RwU3BsaXRCeUxpbmVzID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3Qgc2RwU3BsaXRCeVRyYWNrcyA9IHRoaXMuX3NkcC5zcGxpdCgvKD86XnxbXFxyXFxuXSltPS8pO1xuXG4gICAgdGhpcy5fYXVkaW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygnYXVkaW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX3ZpZGVvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ3ZpZGVvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgnYXVkaW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgICB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgndmlkZW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgfVxuXG4gIGdldCBhdWRpb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29kZWM7XG4gIH1cblxuICBnZXQgdmlkZW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92aWRlb0NvZGVjO1xuICB9XG5cbiAgZ2V0IGlzQXVkaW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBnZXQgaXNWaWRlb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNUcmFja0J5VHlwZUVuYWJsZWQodHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5VHJhY2tzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNkcFNlY3Rpb25Gb3JUeXBlID0gc2RwU3BsaXRCeVRyYWNrcy5maW5kKHNkcFRyYWNrID0+IHNkcFRyYWNrLnN0YXJ0c1dpdGgodHlwZSkpO1xuXG4gICAgaWYgKCFzZHBTZWN0aW9uRm9yVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhc2RwU2VjdGlvbkZvclR5cGUuaW5jbHVkZXMoYGE9aW5hY3RpdmVgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb2RlYyh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlMaW5lczogc3RyaW5nIFtdKTogc3RyaW5nIHtcbiAgICBjb25zdCB1c2VkQ29kZWNMaW5lID0gc2RwU3BsaXRCeUxpbmVzLmZpbmQoc2RwTGluZSA9PiBzZHBMaW5lLmluY2x1ZGVzKGBhPXJ0cG1hcDoke3NkcFNwbGl0QnlMaW5lcy5maW5kKGkgPT4gaS5pbmNsdWRlcyhgbT0ke3R5cGV9YCkpLnNwbGl0KCcgJylbM119YCkpO1xuICAgIGNvbnN0IHVzZWRDb2RlYyA9IHVzZWRDb2RlY0xpbmUuc3BsaXQoJyAnKVsxXTtcbiAgICBjb25zdCBjb2RlY05hbWUgPSB1c2VkQ29kZWMuc3BsaXQoJy8nKVswXTtcblxuICAgIHJldHVybiBjb2RlY05hbWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24sIHtQZWVyQ29ubmVjdGlvbkV2ZW50c30gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge0lMZWdhY3lSVENTdGF0c1JlcG9ydH0gZnJvbSAnLi9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdWYW5pbGxhUGVlckNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IFJUQ1BlZXJDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24gY2xhc3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgZ2V0IG5hdGl2ZSgpOiBSVENQZWVyQ29ubmVjdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblN0YXRlKCk6IFJUQ1BlZXJDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgaWNlQ29ubmVjdGlvblN0YXRlKCk6IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNHZXRUcmFuc2NlaXZlcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5nZXRUcmFuc2NlaXZlcnNEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFGZWF0dXJlRW5hYmxlbWVudC5hZGRUcmFuY2VpdmVyRGlzYWJsZWQgJiYgdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYW5zY2VpdmVyID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT2ZmZXIob3B0aW9ucz86IFJUQ09mZmVyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlT2ZmZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQW5zd2VyKG9wdGlvbnM/OiBSVENBbnN3ZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVBbnN3ZXIgbWV0aG9kIHdpdGggY2FsbGJhY2tzIGlzIGRlcHJlY2F0ZWRcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBzZXRMb2NhbERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGhhc0NyeXB0byA9IGRlc2NyaXB0aW9uLnNkcD8ubWF0Y2goL2E9Y3J5cHRvOi9pKTtcblxuICAgIGlmIChoYXNDcnlwdG8pIHtcbiAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdTRFAgYT1jcnlwdG8gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGdldFNlbmRlcnMoKTogUlRDUnRwU2VuZGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTZW5kZXJzKCk7XG4gIH1cblxuICBnZXRSZWNlaXZlcnMoKTogUlRDUnRwUmVjZWl2ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFJlY2VpdmVycygpO1xuICB9XG5cbiAgZ2V0U3RhdHMoc2VsZWN0b3I/OiBNZWRpYVN0cmVhbVRyYWNrIHwgbnVsbCk6IFByb21pc2U8UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMoc2VsZWN0b3IpO1xuICB9XG5cbiAgZ2V0U3RhdHNMZWdhY3koKTogUHJvbWlzZTxJTGVnYWN5UlRDU3RhdHNSZXBvcnQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAvLyBJZ25vcmVkIGR1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgbGVnYWN5ICdnZXRTdGF0cycgbWV0aG9kIHR5cGUgZGVmaW5pdGlvblxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlICdnZXRTdGF0cycgbWV0aG9kIGZvclxuICAgICAgLy8gQ2hyb21lQDw9IDY2IGRldGFpbGVkIGhlcmU6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTYyNzgxNlxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhyZXNvbHZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0VHJhbnNjZWl2ZXJzKCk6IFJUQ1J0cFRyYW5zY2VpdmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRUcmFuc2NlaXZlcnMoKTtcbiAgfVxuXG4gIGFkZFRyYW5zY2VpdmVyKG5hbWU6IHN0cmluZywgb3B0aW9uczogUlRDUnRwVHJhbnNjZWl2ZXJJbml0KTogUlRDUnRwVHJhbnNjZWl2ZXIge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiB2b2lkIHtcbiAgICBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYWNrKHRyYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb24oKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIHNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzZXQgb250cmFjayhoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjayA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb250cmFjaygpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjaztcbiAgfVxuXG4gIHNldCBvbmljZWNhbmRpZGF0ZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY2FuZGlkYXRlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZTtcbiAgfVxuXG4gIHNldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIHNldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IEFycmF5PFQ+LCBsaXN0ZW5lcjogVCkge1xuICAgIHN1cGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBBcnJheTwoVCkgPT4gdm9pZD47XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwoVCkgPT4gdm9pZD4odGhpcy5fbGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudmlyb25tZW50IHtcbiAgc3RhdGljIGdldEVudmlyb25tZW50RnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgR2xvYmFsU2NvcGUuVVJMKHVybCk7XG5cbiAgICAgIHJldHVybiBiYXNlVVJMLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IFN0cmluZ3MgZnJvbSAnLi4vbGFuZy9TdHJpbmdzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4uL2xvZ2dlci9Db25zb2xlQXBwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUFwcGVuZGVyIGZyb20gJy4uL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyJztcbmltcG9ydCBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIGZyb20gJy4uL2RvbS9Db25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyJztcbmltcG9ydCBNZXRyaWNzQ29uZmlndXJhdGlvbiwge1RlbGVtZXRyeUxldmVsLCBUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuaW1wb3J0IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIGZyb20gJy4uL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuLi9ydGMvSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuL1RlbGVtZXRyeVVybCc7XG5pbXBvcnQgRW52aXJvbm1lbnQgZnJvbSAnLi9FbnZpcm9ubWVudCc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9zdHJlYW1pbmcvU3RyZWFtVHlwZXMnO1xuaW1wb3J0IERpc2NvdmVyeVVyaSBmcm9tICcuL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcblxuY29uc3QgcGFnZUxvYWRUaW1lID0gd2luZG93WydfX3BoZW5peFBhZ2VMb2FkVGltZSddIHx8IHdpbmRvd1snX19wYWdlTG9hZFRpbWUnXSB8fCBEYXRlLm5vdygpO1xuXG5pbnRlcmZhY2UgSUluaXRPcHRpb25zIHtcbiAgZGlzY292ZXJ5VXJpPzogc3RyaW5nO1xuICBwZWVyQ29ubmVjdGlvbkZhY3Rvcnk/OiBJUGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICB0ZWxlbWV0cnlMZXZlbD86IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgY29uc29sZUxvZ2dpbmdMZXZlbD86IExvZ2dpbmdMZXZlbFR5cGU7XG4gIGF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0/OiBib29sZWFuO1xuICBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZT86IGJvb2xlYW47XG4gIHdlYlBsYXllckxvYWRlcj86IChwbGF5ZXI6IFdlYlBsYXllclR5cGUpID0+IHZvaWQ7XG4gIHNoYWthUGxheWVyTG9hZGVyPzogKHBsYXllcjogU2hha2FUeXBlKSA9PiB2b2lkO1xuICBobHNKc0xvYWRlcj86IChwbGF5ZXI6IEhsc1BsYXllclR5cGUpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyB7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZScpO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3dlYlBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9zaGFrYVBsYXllckxvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9obHNKc0xvYWRlciA9IG51bGw7XG4gIHByaXZhdGUgc3RhdGljIF9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgc3RhdGljIF9lbnZpcm9ubWVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlVcmw6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJ2h0dHBzOi8vdGVsZW1ldHJ5LnBoZW5peHJ0cy5jb20vdGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgc3RhdGljIF9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gODtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbGVtZXRyeUxldmVsOiBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPiA9IG5ldyBTdWJqZWN0PFRlbGVtZXRyeUxldmVsPihUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCk7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoQnVpbGRGZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RlbmFuY3k6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfY2xpZW50U2Vzc2lvbklkOiBzdHJpbmcgPSBTdHJpbmdzLnJhbmRvbSgzMik7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9sb2FkZWRUaW1lc3RhbXA6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NESycpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaW5pdGlhbGl6ZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9yZWFkT25seUluaXRpYWxpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KFNESy5faW5pdGlhbGl6ZWQpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlEaXNjb3ZlcnlVcmk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+KERpc2NvdmVyeVVyaS51cmkpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4oUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeSk7XG5cbiAgc3RhdGljIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTG9jYWxDYW5kaWRhdGVzKCk6IFN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzO1xuICB9XG5cbiAgc3RhdGljIGdldCB0ZW5hbmN5KCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGNsaWVudFNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTREsuX2NsaWVudFNlc3Npb25JZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9hZGVkVGltZXN0YW1wKCk6IERhdGUge1xuICAgIHJldHVybiBTREsuX2xvYWRlZFRpbWVzdGFtcDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaW5pdGlhbGl6ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seUluaXRpYWxpemVkO1xuICB9XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlVcmkoKTogUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiBTREsuX3JlYWRPbmx5RGlzY292ZXJ5VXJpO1xuICB9XG5cbiAgc3RhdGljIGdldCBwZWVyQ29ubmVjdGlvbkZhY3RvcnkoKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljUmV0cnlPbkZhaWx1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNESy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICB9XG5cbiAgc3RhdGljIGdldCBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0O1xuICB9XG5cbiAgc3RhdGljIGdldCBza2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2ViUGxheWVyTG9hZGVyKCk6IChXZWJQbGF5ZXJUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2ViUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBzaGFrYVBsYXllckxvYWRlcigpOiAoU2hha2FUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGhsc0pzTG9hZGVyKCk6IChIbHNQbGF5ZXJUeXBlKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5faGxzSnNMb2FkZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1ldHJpY3NTZXJ2aWNlKCk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICByZXR1cm4gU0RLLl9tZXRyaWNzU2VydmljZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTogQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3Ige1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5VXJsKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbGVtZXRyeVVybDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzO1xuICB9XG5cbiAgc3RhdGljIHNldCBtYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKHJldHJpZXNBbW91bnQ6IG51bWJlcikge1xuICAgIHRoaXMuX21heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSByZXRyaWVzQW1vdW50O1xuICB9XG5cbiAgc3RhdGljIGdldCBsb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZSh0aGlzLl9sb2dnZXIudGhyZXNob2xkLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyRGV0ZWN0b3IoKTogQnJvd3NlckRldGVjdG9yIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gTG9nZ2VyRmFjdG9yeS50ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuXG4gICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ucGFnZUxvYWRUaW1lID0gU0RLLnBhZ2VMb2FkVGltZTtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCcpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnU2tpcCBnYXJiYWdlIGNvbGxlY3Rpb24gb24gbW9iaWxlIGRldmljZXMgb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5kaXNjb3ZlcnlVcmkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy50ZWxlbWV0cnlVcmwudmFsdWUgPSBTREsuZ2V0VGVsZW1ldHJ5VXJsKHZhbHVlKTtcbiAgICAgIFNESy5fZW52aXJvbm1lbnQudmFsdWUgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2hhbm5lbFRva2VuID0gQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWNoYW5uZWwtdG9rZW4nKTtcblxuICAgIGlmIChjaGFubmVsVG9rZW4pIHtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4oY2hhbm5lbFRva2VuKTtcblxuICAgICAgU0RLLl90ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3k7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJpVmFsdWUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtdXJpJyk7XG5cbiAgICBpZiAodXJpVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmlWYWx1ZTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVVJJVmFsdWUgPSBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtYmFzZS11cmknKTtcblxuICAgIGlmIChiYXNlVVJJVmFsdWUpIHtcbiAgICAgIGNvbnN0IHVyaSA9IG5ldyBHbG9iYWxTY29wZS5VUkwoYmFzZVVSSVZhbHVlKTtcblxuICAgICAgdXJpLnBhdGhuYW1lID0gJy9wY2FzdC9lbmRQb2ludHMnO1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IHVyaS50b1N0cmluZygpO1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gXCJwaGVuaXgtYmFzZS11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGluaXQob3B0aW9ucz86IElJbml0T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJldHJ5IG9uIGZhaWx1cmUgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlKTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdTa2lwIGdhcmJhZ2UgY29sbGVjdGlvbiBvbiBtb2JpbGUgZGV2aWNlcyBvbiByZXN0YXJ0IGlzIHNldCB0bzogWyVzXScsIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyk7XG5cbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbmV3IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRpc2NvdmVyeVVyaSkge1xuICAgICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gb3B0aW9ucy5kaXNjb3ZlcnlVcmk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeSkge1xuICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlID0gb3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnRlbGVtZXRyeUxldmVsICYmIFRlbGVtZXRyeUxldmVsW29wdGlvbnMudGVsZW1ldHJ5TGV2ZWxdKSB7XG4gICAgICAgIFNESy5fdGVsZW1ldHJ5TGV2ZWwudmFsdWUgPSBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5sb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci50aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmxvZ2dpbmdMZXZlbCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICYmIExvZ2dpbmdMZXZlbFtvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWxdKSB7XG4gICAgICAgIGNvbnN0IGNvbnNvbGVBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIENvbnNvbGVBcHBlbmRlcik7XG5cbiAgICAgICAgaWYgKGNvbnNvbGVBcHBlbmRlcikge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKGNvbnNvbGVBcHBlbmRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsICE9PSAnT2ZmJykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3dlYlBsYXllckxvYWRlciA9IG9wdGlvbnMud2ViUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9zaGFrYVBsYXllckxvYWRlciA9IG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX2hsc0pzTG9hZGVyID0gb3B0aW9ucy5obHNKc0xvYWRlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5kaXNwb3NlKCk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeVVybC5nZXRUZWxlbWV0cnlVcmwodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTREsgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbkdsb2JhbFNjb3BlLmFkZFdpbmRvd0V2ZW50TGlzdGVuZXIoJ3VubG9hZCcsICgpID0+IHtcbiAgU0RLLmRpc3Bvc2UoKTtcbn0pO1xuXG5TREsuYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5VXJsIHtcbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgR2xvYmFsU2NvcGUuVVJMKHVybCk7XG4gICAgICBjb25zdCBzZWdtZW50cyA9IGJhc2VVUkwuaG9zdG5hbWUuc3BsaXQoJy4nKTtcblxuICAgICAgc3dpdGNoIChiYXNlVVJMLnByb3RvY29sKSB7XG4gICAgICAgIGNhc2UgJ3dzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwOic7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd3NzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwczonO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMiB8fFxuICAgICAgICAgIChzZWdtZW50cy5sZW5ndGggPT09IDMgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMl0ubGVuZ3RoIDw9IDIgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0ubGVuZ3RoIDw9IDMpXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudHMudW5zaGlmdCgndGVsZW1ldHJ5Jyk7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ3N0Zy0nKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLXN0ZycpIHx8IHNlZ21lbnRzWzBdLmluY2x1ZGVzKCctc3RnLScpIHx8IHNlZ21lbnRzWzBdID09PSAnc3RnJykge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnktc3RnJztcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnbG9jYWwnKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLWxvY2FsJykpIHtcbiAgICAgICAgLy8gTGVhdmUgVVJMIHVuY2hhbmdlZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5JztcbiAgICAgIH1cblxuICAgICAgYmFzZVVSTC5ob3N0bmFtZSA9IHNlZ21lbnRzLmpvaW4oJy4nKTtcblxuICAgICAgcmV0dXJuIGAke2Jhc2VVUkwub3JpZ2lufS90ZWxlbWV0cnlgO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCB0eXBlIEJpdHJhdGVTdGF0ZVR5cGUgPSAnS2VlcCcgfCAnUmVzZXQnO1xuZXhwb3J0IHR5cGUgQml0cmF0ZU1vZGVUeXBlID0gJ05vcm1hbCcgfCAnRm9yY2UnIHwgJ1Jlc2V0JztcblxuZXhwb3J0IGVudW0gQml0cmF0ZVN0YXRlIHtcbiAgS2VlcCxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGVudW0gQml0cmF0ZU1vZGUge1xuICBOb3JtYWwsXG4gIEZvcmNlLFxuICBSZXNldFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSB7XG4gIGFwaVZlcnNpb246IG51bWJlcjtcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBudW1iZXI7XG4gIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlVHlwZTtcbiAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlVHlwZTtcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uLy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IFRva2VuQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1Rva2VuQ29udGV4dCc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQsIHtDaGFubmVsQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IEVuY29kZWRTdHJlYW1TaW5rLCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQgU3RyZWFtVHJhY2tUcmFuc2Zvcm0sIHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCB7U3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQnO1xuaW1wb3J0IHtEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiwgUmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9ufSBmcm9tICcuLi9mcmFtZVRpbWluZy9GcmFtZVRpbWluZ0luZm9ybWF0aW9uJztcbmltcG9ydCBTdHJlYW1GYWN0b3J5IGZyb20gJy4uL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmknO1xuaW1wb3J0IE1ldHJpY3NGYWN0b3J5IGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc0ZhY3RvcnknO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uLy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcblxuY29uc3QgZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uID0gJ2NsaWVudDp0ZXJtaW5hdGlvbic7XG5jb25zdCBmYWlsdXJlQ291bnRDbGVhblVwSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDMwMDA7XG5jb25zdCBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMgPSAxNTAwMDtcblxuZXhwb3J0IHR5cGUgQ2hhbm5lbE9wdGlvbnMgPSB7XG4gIHRhcmdldExhZz86IE1pbGxpc2Vjb25kO1xuICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+O1xuICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrPzogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT47XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+O1xuICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWwgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdDaGFubmVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuQ29udGV4dDogVG9rZW5Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNvbnRleHQ6IFN0YXRlQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ6IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBlZXJDb25uZWN0aW9uOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGF0ZTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b011dGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5QXV0b1BhdXNlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuRXhwaXJpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRob3JpemVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5T25saW5lOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TG9hZGluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVBsYXlpbmc6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdGFuZGJ5OiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5U3RvcHBlZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRhcmdldExhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMYWc6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5Qml0cmF0ZUxpbWl0OiBSZWFkT25seVN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UmVzb2x1dGlvbjogUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5RmFpbHVyZUNvdW50OiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlFbmRQb2ludDogUmVhZE9ubHlTdWJqZWN0PEVuZFBvaW50PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSdGNTdGF0aXN0aWNzOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seU1lZGlhU3RyZWFtOiBSZWFkT25seVN1YmplY3Q8TWVkaWFTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkVuYWJsZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjogUmVhZE9ubHlTdWJqZWN0PERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uOiBSZWFkT25seVN1YmplY3Q8UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgb3B0aW9ucz86IENoYW5uZWxPcHRpb25zKSB7XG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbENvbnRleHRPcHRpb25zOiBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7dGFyZ2V0TGFnOiBvcHRpb25zPy50YXJnZXRMYWd9O1xuICAgIGNvbnN0IHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zOiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyA9IHtcbiAgICAgIGhhc0luc2VydGFibGVTdHJlYW1zOiBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogb3B0aW9ucz8uZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQoY2hhbm5lbENvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCA9IG5ldyBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0KHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQgPSBuZXcgU3RhdGVDb250ZXh0KCk7XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YXRlID0gbmV3IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dG9NdXRlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dG9QYXVzZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuRXhwaXJpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlPbmxpbmUgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlMb2FkaW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVBsYXlpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RhbmRieSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieSk7XG4gICAgdGhpcy5fcmVhZE9ubHlTdG9wcGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdG9wcGVkKTtcbiAgICB0aGlzLl9yZWFkT25seVRhcmdldExhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC50YXJnZXRMYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5TGFnID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0KTtcbiAgICB0aGlzLl9yZWFkT25seVJlc29sdXRpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PERpbWVuc2lvbj4odGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlGYWlsdXJlQ291bnQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50KTtcbiAgICB0aGlzLl9yZWFkT25seUVuZFBvaW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4odGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJU3RyZWFtPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0pO1xuICAgIHRoaXMuX3JlYWRPbmx5UnRjU3RhdGlzdGljcyA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MpO1xuICAgIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW0gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0pO1xuXG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKGRpc2NvdmVyeVVyaSk7XG4gICAgdGhpcy5fc2Vzc2lvblRlbGVtZXRyeSA9IG5ldyBTZXNzaW9uVGVsZW1ldHJ5KFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkpO1xuICAgIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlciA9IHRoaXMuaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQuYmluZCh0aGlzKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcblxuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0ID0gbmV3IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0KCk7XG4gICAgdGhpcy5jb25maWd1cmVGcmFtZVRpbWluZ0luZm9ybWF0aW9uKGVkZ2VUb2tlbik7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25FbmFibGVkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5pc0VuYWJsZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD4odGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPih0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5yZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0uc3Vic2NyaWJlKHN0cmVhbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudmlkZW9FbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgICAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5ID0gbmV3IFZpZGVvVGVsZW1ldHJ5KHRoaXMuc3RyZWFtSWQsIFNESy5wYWdlTG9hZFRpbWUsIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUsIHRoaXMuX21ldHJpY3NTZXJ2aWNlKTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHRoaXMudmlkZW9FbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeS5zZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodGhpcy52aWRlb0VsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuU3RvcHBlZCkge1xuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMucmVzdGFydEFmdGVyU3RvcCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQodGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcyk7XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpIHtcbiAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlICE9PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIH0sIGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi5zdWJzY3JpYmUocmVzb2x1dGlvbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5Lm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhyZXNvbHV0aW9uLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC5zdWJzY3JpYmUoYml0cmF0ZUxpbWl0ID0+IHtcbiAgICAgICAgaWYgKGJpdHJhdGVMaW1pdCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgYml0cmF0ZUxpbWl0LFxuICAgICAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgICAgICBCaXRyYXRlTW9kZS5Ob3JtYWxcbiAgICAgICAgICApXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZGVzdHJveVN0cmVhbU9uVW5tb3VudCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW1PblVubW91bnQodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCAnY2xpZW50OnRlcm1pbmF0aW9uLW9uLXdpbmRvdy11bmxvYWQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgR2xvYmFsU2NvcGUuYWRkV2luZG93RXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIEdsb2JhbFNjb3BlLnJlbW92ZVdpbmRvd0V2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuICAgIH0pKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCB2aWRlb0VsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcbiAgfVxuXG4gIHNldCB2aWRlb0VsZW1lbnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gJyc7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gJyc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlICE9PSBDaGFubmVsU3RhdGUuSW5pdGlhbGl6aW5nKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSA9IHZpZGVvRWxlbWVudDtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnJlc29sdXRpb24udmFsdWUud2lkdGggIT09IHZpZGVvRWxlbWVudC52aWRlb1dpZHRoIHx8IHRoaXMucmVzb2x1dGlvbi52YWx1ZS5oZWlnaHQgIT09IHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gbmV3IERpbWVuc2lvbih2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCwgdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IERpbWVuc2lvbi5lbXB0eTtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRW5jb2RlZEVkZ2VUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSA9IHRva2VuO1xuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcblxuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKTtcbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2VuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zJyk7XG5cbiAgICB0aGlzLmNvbmZpZ3VyZUZyYW1lVGltaW5nSW5mb3JtYXRpb24oZWRnZVRva2VuKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IGF1dG9NdXRlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9NdXRlZDtcbiAgfVxuXG4gIGdldCBhdXRvUGF1c2VkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZDtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcGxheWluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBsYXlpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgdGFyZ2V0TGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRhcmdldExhZztcbiAgfVxuXG4gIGdldCBsYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TGFnO1xuICB9XG5cbiAgZ2V0IGJpdHJhdGVMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdC52YWx1ZTtcbiAgfVxuXG4gIGdldCByZXNvbHV0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0IGZhaWx1cmVDb3VudCgpOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50O1xuICB9XG5cbiAgZ2V0IGVuZFBvaW50KCk6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWNzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBnZXQgaXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uRW5hYmxlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkVuYWJsZWQ7XG4gIH1cblxuICBnZXQgZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24oKTogUmVhZE9ubHlTdWJqZWN0PERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seURlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uO1xuICB9XG5cbiAgZ2V0IHJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbigpOiBSZWFkT25seVN1YmplY3Q8UmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjtcbiAgfVxuXG4gIHNldEJpdHJhdGVMaW1pdChiaXRyYXRlTGltaXQ6IEJpdHNQZXJTZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSBiaXRyYXRlTGltaXQ7XG4gIH1cblxuICBjbGVhckJpdHJhdGVMaW1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZEluTWlsbGlzZWNvbmRzID0gRGF0ZS5ub3coKSAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxJbml0aWFsaXphdGlvbi5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kID0gMDtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSxcbiAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kLFxuICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgQml0cmF0ZU1vZGUuUmVzZXRcbiAgICAgIClcbiAgICAgICAgLnRoZW4oKHtzdGF0dXN9KSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Vycm9yIHdoaWxlIHNldHRpbmcgbGltaXQgYml0cmF0ZScsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVUYXJnZXRMYWcobGFnOiBNaWxsaXNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnRhcmdldExhZy52YWx1ZSA9IGxhZztcbiAgfVxuXG4gIGFzeW5jIHN0b3AocmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmFkZCh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy5zdWJzY3JpYmUoaXNTdGFydGluZyA9PiB7XG4gICAgICAgIGlmICghaXNTdGFydGluZykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0b3AocmVhc29uKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0b3AocmVhc29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKHJlYXNvbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICB9XG5cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBtdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdW5tdXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9wKCdjbGllbnQ6Y2hhbm5lbC1kaXNwb3NlJykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJpKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogVVJMIHtcbiAgICBjb25zdCB1cmwgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS51cmk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZGlzY292ZXIgVVJJIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgIHJldHVybiBuZXcgR2xvYmFsU2NvcGUuVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWwgd2FzIGFscmVhZHkgZGlzcG9zZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgc3RhcnRpbmcsIHNraXBwaW5nIHN0YXJ0Jyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzU3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OnN0YXJ0Jyk7XG5cbiAgICBjb25zdCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiA9IHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgICBjb25zdCBsaXN0ZW5PblN0cmVhbVNldHVwID0gdGhpcy5fc2Vzc2lvblRlbGVtZXRyeS5saXN0ZW5PblN0cmVhbVNldHVwKCk7XG5cbiAgICBpZiAoIUVkZ2VBdXRoUGFyc2VyLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gU3RyZWFtVHJhY2tUcmFuc2Zvcm0udmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKCd2aWRlbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IFN0cmVhbVRyYWNrVHJhbnNmb3JtLnZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSgnYXVkaW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmspIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBFbmNvZGVkU3RyZWFtU2luay52YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKCd2aWRlbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IEVuY29kZWRTdHJlYW1TaW5rLnZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsoJ2F1ZGlvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSAmJiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCb3RoIGluc2VydGFibGUtc3RyZWFtcyBhbmQgZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMgYXJlIGVuYWJsZWQsIG9ubHkgdXNlIG9uZSBvciB0aGUgb3RoZXInKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayA9IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJztcbiAgICBjb25zdCBoYXNFbmNvZGVkU3RyZWFtU2luayA9IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmsgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGlmIChoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayAmJiBoYXNFbmNvZGVkU3RyZWFtU2luaykge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCb3RoIE1lZGlhIFN0cmVhbSBUcmFjayB0cmFuc2Zvcm0gY2FsbGJhY2sgYW5kIGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyBzaW5rIGZ1bmN0aW9uIGZvdW5kLCBvbmx5IHVzZSBvbmUgdHlwZSBvciB0aGUgb3RoZXInKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5pc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIFN0cmVhbSBUcmFjayBBUEknKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIG1pc3Npbmc7IGhvd2V2ZXIsIGluc2VydGFibGUtc3RyZWFtcyBpcyBlbmFibGVkJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIGNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kOyBob3dldmVyLCBpbnNlcnRhYmxlLXN0cmVhbXMgaXMgbm90IGVuYWJsZWRgKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgaWYgKCEoRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQgfHwgRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyBBUEknKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5zdXBwb3J0ZWRGZWF0dXJlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIHNpbmsgZnVuY3Rpb24gaXMgbWlzc2luZzsgaG93ZXZlciwgZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMgaXMgZW5hYmxlZCcpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNFbmNvZGVkU3RyZWFtU2luaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoYENyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBzaW5rIGZ1bmN0aW9uIGZvdW5kOyBob3dldmVyLCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBpcyBub3QgZW5hYmxlZGApO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICBjb25zdCB1cmkgPSB0aGlzLmdldFVyaSh0b2tlbik7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgICBpZiAoc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5FcnJvciB8fCBzdGF0ZSA9PT0gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmcpIHtcbiAgICAgICAgICBEaXNjb3ZlcnkuY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQodXJpKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPHZvaWQ+ID0gKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICAgIC8vIE5lZWQgdG8gc2V0IGlzU3RhcnRpbmcgdG8gZmFsc2UgYW5kIGNhbGwgaGFuZGxlU3RyZWFtRmFpbHVyZSBpZiBzdHJlYW0gbW9uaXRvcnMgZm91bmQgYW4gaXNzdWVcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuaGFuZGxlU3RyZWFtRmFpbHVyZSgpKTtcbiAgICB9KTtcbiAgICBjb25zdCBzdHJlYW1QbGF5ZXIgPSBTdHJlYW1GYWN0b3J5LmNyZWF0ZSh0b2tlbiwgdGhpcy5fY2hhbm5lbENvbnRleHQsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCwgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBjaGFubmVsJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgIEdsb2JhbFNjb3BlLmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdGFydEFmdGVyU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGxheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZWRpYVN0cmVhbSA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuSW5pdGlhbGl6aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5DbGllbnRTdGFydEVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSwgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Jbml0aWFsaXppbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgaW5pdGlhbGl6aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBsYXlpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwYXVzZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgaW52b2tlIHBsYXkoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gdW5zdXBwb3J0ZWQgZmVhdHVyZSwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byBjb25maWd1cmF0aW9uIGVycm9yLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcyhyZWFzb246IHN0cmluZyA9IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbik6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgaWYgKFNESy5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ICYmICEoRmVhdHVyZUVuYWJsZW1lbnQuaXNNb2JpbGUgJiYgU0RLLnNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcykpIHtcbiAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW0odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlndXJlRnJhbWVUaW1pbmdJbmZvcm1hdGlvbih0b2tlbjogRWRnZVRva2VuKTogdm9pZCB7XG4gICAgY29uc3QgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNhcGFiaWxpdHkgPSB0b2tlbi5jYXBhYmlsaXRpZXMuZmluZChjYXBhYmlsaXR5ID0+IGNhcGFiaWxpdHkuc3RhcnRzV2l0aCgnZnJhbWUtdGltaW5nLWluZm9ybWF0aW9uPScpKTtcblxuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lY29kZS52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lc3RhbXBzLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuaXNFbmFibGVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICBpZiAoIWZyYW1lVGltaW5nSW5mb3JtYXRpb25DYXBhYmlsaXR5KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzYWJsaW5nIGZyYW1lIHRpbWluZyBpbmZvcm1hdGlvbiBhcyBubyBjYXBhYmlsaXR5IHdhcyBmb3VuZCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5pc0NoYW5uZWxGcmFtZVRpbWluZ0luZm9ybWF0aW9uU3VwcG9ydGVkKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzYWJsaW5nIGZyYW1lIHRpbWluZyBpbmZvcm1hdGlvbiBhcyB0aGUgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBpdCBbJXNdJywgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNhcGFiaWxpdHkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNhcGFiaWxpdHkuc3BsaXQoJz0nKVsxXVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAob3B0aW9uID0+IG9wdGlvbi50cmltKCkpXG4gICAgICAuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICBzd2l0Y2ggKG9wdGlvbikge1xuICAgICAgICAgIGNhc2UgJ3RpbWVjb2RlJzpcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lY29kZS52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3RpbWVzdGFtcHMnOlxuICAgICAgICAgICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0lnbm9yaW5nIHVua25vd24gZnJhbWUgdGltaW5nIGluZm9ybWF0aW9uIG9wdGlvbiBbJXNdJywgb3B0aW9uKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZyYW1lIHRpbWluZyBpbmZvcm1hdGlvbiBjb25maWd1cmF0aW9uIFsodGltZWNvZGUgWyVzXSwgdGltZXN0YW1wcyBbJXNdKV0nLCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZWNvZGUudmFsdWUsIHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lc3RhbXBzLnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcbiAgICB9XG5cbiAgICBjb25zdCBwbGF5UHJvbWlzZSA9IHZpZGVvRWxlbWVudC5wbGF5KCk7XG5cbiAgICBpZiAocGxheVByb21pc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxheVByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIGNvbnN0IGhhc0F1ZGlvVHJhY2sgPSAhIW1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcih0cmFjayA9PiB7XG4gICAgICAgIHJldHVybiB0cmFjay5raW5kID09PSAnYXVkaW8nO1xuICAgICAgfSkubGVuZ3RoO1xuICAgICAgY29uc3QgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgPSAhU0RLLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuXG4gICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgfHwgdmlkZW9FbGVtZW50Lm11dGVkIHx8ICFoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGF1c2VkIHZpZGVvIGFmdGVyIHBsYXkgZmFpbGVkLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQXVkaW9UcmFjaykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSBtdXRlZCB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZpZGVvRWxlbWVudC5wbGF5KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBsYXllZCB2aWRlbyBhZnRlciBhdXRvIG11dGluZy4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkIHRvIHVubXV0ZS4nLCB0aGlzLnN0cmVhbUlkKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgSW5pdGlhbGl6aW5nID0gMCxcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nID0gMixcbiAgUGF1c2VkID0gMyxcbiAgUGxheWluZyA9IDQsXG4gIFJlY292ZXJpbmcgPSA1LFxuICBSZWNvbm5lY3RpbmcgPSA2LFxuICBTdGFuZEJ5ID0gNyxcbiAgU3RvcHBlZCA9IDgsXG4gIFVuYXV0aG9yaXplZCA9IDksXG4gIEdlb1Jlc3RyaWN0ZWQgPSAxMCxcbiAgR2VvQmxvY2tlZCA9IDExLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUgPSAxMixcbiAgQ29uZmlndXJhdGlvbkVycm9yID0gMTMsXG4gIFRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvciA9IDE0LFxuICBDb25uZWN0aW9uRXJyb3IgPSAxNSxcbiAgQ2xpZW50U3RhcnRFcnJvciA9IDE2LFxuICBFcnJvciA9IDE3XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxTdGF0ZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQgQ2hhbm5lbCwge0NoYW5uZWxPcHRpb25zfSBmcm9tICcuL0NoYW5uZWwnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+O1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVscyB7XG4gIHN0YXRpYyBjcmVhdGVDaGFubmVsKG9wdGlvbnM6IENyZWF0ZUNoYW5uZWxPcHRpb25zKTogQ2hhbm5lbCB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbm5lbE9wdGlvbnM6IENoYW5uZWxPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zLnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZEF1ZGlvU3RyZWFtU2lua1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IENoYW5uZWwob3B0aW9ucy52aWRlb0VsZW1lbnQsIG9wdGlvbnMudG9rZW4sIGNoYW5uZWxPcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGlzRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRmVhdHVyZUVuYWJsZW1lbnQuaXNDaGFubmVsRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZDtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVscyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IERpbWVuc2lvbiBmcm9tICcuLi8uLi92aWRlby9EaW1lbnNpb24nO1xuaW1wb3J0IEVuZFBvaW50LCB7SVN0cmVhbSwgU3Vic2NyaWJlU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCB7SVJ0Y01vbml0b3JTdGF0aXN0aWMsIElSdGNTdGF0aXN0aWN9IGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQge0JpdHNQZXJTZWNvbmQsIE1pbGxpc2Vjb25kfSBmcm9tICcuLi8uLi91bml0cy9Vbml0cyc7XG5cbmNvbnN0IGRlZmF1bHRUYXJnZXRMYWcgPSAwO1xuXG5leHBvcnQgdHlwZSBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7XG4gIHRhcmdldExhZz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYW5uZWxDb250ZXh0IHtcbiAgY2hhbm5lbEluaXRpYWxpemF0aW9uOiBEYXRlO1xuICBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIGNoYW5uZWxEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHJlbmRlcmVyRGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuICB2aWRlb0VsZW1lbnQ6IFN1YmplY3Q8SFRNTFZpZGVvRWxlbWVudD47XG4gIHN0YXRlOiBTdWJqZWN0PENoYW5uZWxTdGF0ZT47XG4gIGF1dG9NdXRlZDogU3ViamVjdDxib29sZWFuPjtcbiAgYXV0b1BhdXNlZDogU3ViamVjdDxib29sZWFuPjtcbiAgYXV0aG9yaXplZDogU3ViamVjdDxib29sZWFuPjtcbiAgb25saW5lOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBsb2FkaW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwbGF5aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdGFuZGJ5OiBTdWJqZWN0PGJvb2xlYW4+O1xuICBzdG9wcGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICB0YXJnZXRMYWc6IFN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBsYWc6IFN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBiaXRyYXRlTGltaXQ6IFN1YmplY3Q8Qml0c1BlclNlY29uZD47XG4gIHJlc29sdXRpb246IFN1YmplY3Q8RGltZW5zaW9uPjtcbiAgZmFpbHVyZUNvdW50OiBTdWJqZWN0PG51bWJlcj47XG4gIGVuZFBvaW50OiBTdWJqZWN0PEVuZFBvaW50PjtcbiAgc3RyZWFtOiBTdWJqZWN0PElTdHJlYW0+O1xuICBydGNTdGF0aXN0aWNzOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPjtcbiAgdmlkZW9UZWxlbWV0cnk6IFZpZGVvVGVsZW1ldHJ5O1xuICBydGNBdWRpb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgcnRjVmlkZW9TdGF0aXN0aWM6IElSdGNTdGF0aXN0aWM7XG4gIGNsZWFyRmFpbHVyZUNvdW50VGltZW91dDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDaGFubmVsQ29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5jaGFubmVsRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLnJlbmRlcmVyRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxJbml0aWFsaXphdGlvbiA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSBuZXcgU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PihudWxsKTtcbiAgICB0aGlzLnN0YXRlID0gbmV3IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPihDaGFubmVsU3RhdGUuSW5pdGlhbGl6aW5nKTtcbiAgICB0aGlzLmF1dG9NdXRlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dG9QYXVzZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRob3JpemVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5vbmxpbmUgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5wbGF5aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RhbmRieSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0b3BwZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy50YXJnZXRMYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4ob3B0aW9ucz8udGFyZ2V0TGFnID8/IGRlZmF1bHRUYXJnZXRMYWcpO1xuICAgIHRoaXMubGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KDApO1xuICAgIHRoaXMuYml0cmF0ZUxpbWl0ID0gbmV3IFN1YmplY3Q8Qml0c1BlclNlY29uZD4oMCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gbmV3IFN1YmplY3Q8RGltZW5zaW9uPihEaW1lbnNpb24uZW1wdHkpO1xuICAgIHRoaXMuZmFpbHVyZUNvdW50ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICB0aGlzLmVuZFBvaW50ID0gbmV3IFN1YmplY3Q8RW5kUG9pbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IFN1YmplY3Q8SVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5ydGNTdGF0aXN0aWNzID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KG51bGwpO1xuICB9XG5cbiAgZ2V0IHN0cmVhbUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW0udmFsdWU7XG5cbiAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyZWFtLnN0cmVhbUlkO1xuICB9XG5cbiAgYXBwbHlTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHRoaXMuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlKys7XG4gICAgICAgIHRoaXMucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YW5kYnkudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdHJlYW0udmFsdWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlkZW9FbGVtZW50LnZhbHVlICYmIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQpIHtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkO1xuICAgIH1cbiAgfVxuXG4gIG1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ25vLXN0cmVhbSc6XG4gICAgICBjYXNlICdub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YW5kQnk7XG4gICAgICBjYXNlICdnZW8tcmVzdHJpY3RlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvUmVzdHJpY3RlZDtcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9CbG9ja2VkO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZvcmJpZGRlbi10YWcnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIGNhc2UgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkVycm9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoc3RhdHVzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiwgUmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9ufSBmcm9tICcuLi9mcmFtZVRpbWluZy9GcmFtZVRpbWluZ0luZm9ybWF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQge1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvdWxkRXh0cmFjdFRpbWVjb2RlOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaWMgcmVhZG9ubHkgc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHM6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHB1YmxpYyByZWFkb25seSBpc0VuYWJsZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHB1YmxpYyByZWFkb25seSBkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjogU3ViamVjdDxEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+O1xuICBwdWJsaWMgcmVhZG9ubHkgcmVuZGVyZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uOiBTdWJqZWN0PFJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiB8IG51bGw+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2hvdWxkRXh0cmFjdFRpbWVjb2RlID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5pc0VuYWJsZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5kZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiA9IG5ldyBTdWJqZWN0PERlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uIHwgbnVsbD4obnVsbCk7XG4gICAgdGhpcy5yZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gPSBuZXcgU3ViamVjdDxSZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24gfCBudWxsPihudWxsKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvbkNvbnRleHQge1xuICBtZWRpYVN0cmVhbTogU3ViamVjdDxNZWRpYVN0cmVhbT47XG4gIHBlZXJDb25uZWN0aW9uOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1lZGlhU3RyZWFtID0gbmV3IFN1YmplY3Q8TWVkaWFTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb24gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0ZUNvbnRleHQge1xuICBpc1N0YXJ0aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBpc0Rpc3Bvc2VkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaXNTdGFydGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcblxuZXhwb3J0IHR5cGUgU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMgPSB7XG4gIGhhc0luc2VydGFibGVTdHJlYW1zOiBib29sZWFuO1xuICBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IGJvb2xlYW47XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4gfCB1bmRlZmluZWQ7XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IHtcbiAgcmVhZG9ubHkgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogU3ViamVjdDxib29sZWFuPjtcbiAgcmVhZG9ubHkgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPihvcHRpb25zLmhhc0luc2VydGFibGVTdHJlYW1zKTtcbiAgICB0aGlzLmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KG9wdGlvbnMuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zKTtcbiAgICB0aGlzLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s7XG4gICAgdGhpcy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gb3B0aW9ucy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9IG9wdGlvbnMuZW5jb2RlZFZpZGVvU3RyZWFtU2luaztcbiAgICB0aGlzLmVuY29kZWRBdWRpb1N0cmVhbVNpbmsgPSBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbms7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5Db250ZXh0IHtcbiAgdG9rZW46IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj4odG9rZW4pO1xuICAgIHRoaXMudG9rZW5FeHBpcmluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRzdHJlYW1SZWFkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhOiBVaW50OEFycmF5O1xuICBwcml2YXRlIF9iaXRPZmZzZXQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBVaW50OEFycmF5KSB7XG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5fYml0T2Zmc2V0ID0gMDtcbiAgfVxuXG4gIHB1YmxpYyByZWFkQml0cyhiaXRzVG9SZWFkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLl9iaXRPZmZzZXQgKyBiaXRzVG9SZWFkID4gdGhpcy5fZGF0YS5sZW5ndGggKiA4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZWFkIFske2JpdHNUb1JlYWR9XSBiaXRzIC0gb25seSBbJHt0aGlzLmdldFJlbWFpbmluZ0JpdHMoKX1dIGJpdHMgcmVtYWluaW5nIGluIHN0cmVhbWApO1xuICAgIH1cblxuICAgIGxldCB2YWx1ZSA9IDA7XG4gICAgbGV0IGJpdHNSZW1haW5pbmcgPSBiaXRzVG9SZWFkO1xuXG4gICAgd2hpbGUgKGJpdHNSZW1haW5pbmcgPiAwKSB7XG4gICAgICBjb25zdCBieXRlT2Zmc2V0ID0gTWF0aC5mbG9vcih0aGlzLl9iaXRPZmZzZXQgLyA4KTtcbiAgICAgIGNvbnN0IGJpdFBvc2l0aW9uSW5CeXRlID0gdGhpcy5fYml0T2Zmc2V0ICUgODtcbiAgICAgIGNvbnN0IGJpdHNBdmFpbGFibGVJbkJ5dGUgPSA4IC0gYml0UG9zaXRpb25JbkJ5dGU7XG4gICAgICBjb25zdCBiaXRzVG9SZWFkID0gTWF0aC5taW4oYml0c1JlbWFpbmluZywgYml0c0F2YWlsYWJsZUluQnl0ZSk7XG4gICAgICAvLyBDcmVhdGUgYSBtYXNrIGZvciB0aGUgYml0cyB3ZSB3YW50IHRvIHJlYWRcbiAgICAgIGNvbnN0IG1hc2sgPSAoMSA8PCBiaXRzVG9SZWFkKSAtIDE7XG4gICAgICAvLyBTaGlmdCByaWdodCB0byBnZXQgcmlkIG9mIGxvd2VyIGJpdHMgd2UgZG9uJ3Qgd2FudFxuICAgICAgY29uc3QgYnl0ZVZhbHVlID0gKHRoaXMuX2RhdGFbYnl0ZU9mZnNldF0gPj4gKGJpdHNBdmFpbGFibGVJbkJ5dGUgLSBiaXRzVG9SZWFkKSk7XG4gICAgICAvLyBNYXNrIHRvIGtlZXAgb25seSB0aGUgYml0cyB3ZSB3YW50XG4gICAgICBjb25zdCBiaXRzID0gYnl0ZVZhbHVlICYgbWFzaztcblxuICAgICAgLy8gQWRkIHRoZXNlIGJpdHMgdG8gb3VyIHJlc3VsdFxuICAgICAgdmFsdWUgPSAodmFsdWUgPDwgYml0c1RvUmVhZCkgfCBiaXRzO1xuXG4gICAgICBiaXRzUmVtYWluaW5nIC09IGJpdHNUb1JlYWQ7XG4gICAgICB0aGlzLl9iaXRPZmZzZXQgKz0gYml0c1RvUmVhZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2tpcEJpdHMoYml0c1RvU2tpcDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2JpdE9mZnNldCArIGJpdHNUb1NraXAgPiB0aGlzLl9kYXRhLmxlbmd0aCAqIDgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNraXAgWyR7Yml0c1RvU2tpcH1dIGJpdHMgLSBvbmx5IFske3RoaXMuZ2V0UmVtYWluaW5nQml0cygpfV0gYml0cyByZW1haW5pbmcgaW4gc3RyZWFtYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fYml0T2Zmc2V0ICs9IGJpdHNUb1NraXA7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVtYWluaW5nQml0cygpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5fZGF0YS5sZW5ndGggKiA4KSAtIHRoaXMuX2JpdE9mZnNldDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IEV2ZW50UHVibGlzaGVyIGZyb20gJy4uLy4uLy4uL2V2ZW50L0V2ZW50UHVibGlzaGVyJztcbmltcG9ydCBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQsIHtFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHR9IGZyb20gJy4uLy4uLy4uL2V2ZW50L0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50fSBmcm9tICcuLi8uLi8uLi9ldmVudC9ldmVudHMvRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IE5hbFVuaXQgZnJvbSAnLi9uYWxVbml0L05hbFVuaXQnO1xuaW1wb3J0IFNlaVBheWxvYWQgZnJvbSAnLi9uYWxVbml0L1NlaVBheWxvYWQnO1xuaW1wb3J0IE5hbFVuaXRUeXBlIGZyb20gJy4vbmFsVW5pdC9OYWxVbml0VHlwZSc7XG5pbXBvcnQgU2VpUGF5bG9hZFR5cGUgZnJvbSAnLi9uYWxVbml0L1NlaVBheWxvYWRUeXBlJztcbmltcG9ydCBFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQgZnJvbSAnLi4vLi4vRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSDI2NEJpdHN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgY29uc3RydWN0b3IoZXZlbnRQdWJsaXNoZXI6IEV2ZW50UHVibGlzaGVyKSB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIgPSBldmVudFB1Ymxpc2hlcjtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmVUb05hbFVuaXQobmFsVW5pdFR5cGU6IE5hbFVuaXRUeXBlLCBoYW5kbGVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxOYWxVbml0PikgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8TmFsVW5pdD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuTmFsVW5pdCwgbmFsVW5pdEV2ZW50ID0+IHtcbiAgICAgIGlmIChuYWxVbml0RXZlbnQuZGF0YS50eXBlID09PSBuYWxVbml0VHlwZSkge1xuICAgICAgICBoYW5kbGVyKG5hbFVuaXRFdmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlVG9TZWlQYXlsb2FkVHlwZShzZWlQYXlsb2FkVHlwZTogU2VpUGF5bG9hZFR5cGUsIGhhbmRsZXI6IChldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFNlaVBheWxvYWQ+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxTZWlQYXlsb2FkPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5TZWlQYXlsb2FkLCBzZWlQYXlsb2FkRXZlbnQgPT4ge1xuICAgICAgaWYgKHNlaVBheWxvYWRFdmVudC5kYXRhLnR5cGUgPT09IHNlaVBheWxvYWRUeXBlKSB7XG4gICAgICAgIGhhbmRsZXIoc2VpUGF5bG9hZEV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJzY3JpYmVUb1BheWxvYWQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBwYXlsb2FkVXVpZDogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxzdHJpbmc+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWRTdWJzY3JpcHRpb24sIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBwYXlsb2FkVXVpZFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWQsIHBheWxvYWRFdmVudCA9PiB7XG4gICAgICBpZiAocGF5bG9hZEV2ZW50LmRhdGEudXVpZCA9PT0gcGF5bG9hZFV1aWQpIHtcbiAgICAgICAgaGFuZGxlcihwYXlsb2FkRXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmVudW0gTmFsVW5pdFR5cGUge1xuICBVbnNwZWNpZmllZCA9IDAsXG4gIFNsaWNlTGF5ZXJOb25JZHJEYXRhID0gMSxcbiAgU2xpY2VEYXRhUGFydGl0aW9uQUxheWVyID0gMixcbiAgU2xpY2VEYXRhUGFydGl0aW9uQkxheWVyID0gMyxcbiAgU2xpY2VEYXRhUGFydGl0aW9uQ0xheWVyID0gNCxcbiAgU2xpY2VMYXllcklkckRhdGEgPSA1LFxuICBTdXBwbGVtZW50YWxFbmhhbmNlbWVudEluZm9ybWF0aW9uID0gNixcbiAgU2VxdWVuY2VQYXJhbWV0ZXJTZXQgPSA3LFxuICBQaWN0dXJlUGFyYW1ldGVyU2V0ID0gOCxcbiAgQWNjZXNzVW5pdERlbGltaXRlciA9IDksXG4gIEVuZE9mU2VxdWVuY2UgPSAxMCxcbiAgRW5kT2ZTdHJlYW0gPSAxMSxcbiAgRmlsbGVyRGF0YSA9IDEyLFxuICBTZXF1ZW5jZVBhcmFtdGVyU2V0RXh0ZW5zaW9uID0gMTMsXG4gIFByZWZpeE5hbFVuaXQgPSAxNCxcbiAgU3Vic2V0U2VxdWVuY2VQYXJhbXRlclNldCA9IDE1LFxuICBEZXB0aFBhcmFtdGVyU2V0ID0gMTYsXG4gIFJlc2VydmVkMTcgPSAxNyxcbiAgUmVzZXJ2ZWQxOCA9IDE4LFxuICBTbGljZUxheWVyQXV4aWxpYXJ5ID0gMTksXG4gIFNsaWNlRXh0ZW5zaW9uID0gMjAsXG4gIFNsaWNlRXh0ZW5zaW9uRGVwdGhWaWV3Q29tcG9uZW50ID0gMjEsXG4gIFJlc2VydmVkMjIgPSAyMixcbiAgUmVzZXJ2ZXJkMjMgPSAyMyxcbiAgVW5zcGVjaWZpZWQyNCA9IDI0LFxuICBVbnNwZWNpZmllZDI1ID0gMjUsXG4gIFVuc3BlY2lmaWVkMjYgPSAyNixcbiAgVW5zcGVjaWZpZWQyNyA9IDI3LFxuICBVbnNwZWNpZmllZDI4ID0gMjgsXG4gIFVuc3BlY2lmaWVkMjkgPSAyOSxcbiAgVW5zcGVjaWZpZWQzMCA9IDMwLFxuICBVbnNwZWNpZmllZDMxID0gMzFcbn1cblxuZXhwb3J0IGRlZmF1bHQgTmFsVW5pdFR5cGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmVudW0gU2VpUGF5bG9hZFR5cGUge1xuICBCdWZmZXJpbmdQZXJpb2QgPSAwLFxuICBQaWN0dXJlVGltaW5nID0gMSxcbiAgUGFuU2NhblJlY3QgPSAyLFxuICBGaWxsZXJQYXlsb2FkID0gMyxcbiAgVXNlckRhdGFSZWdpc3RlcmVkID0gNCxcbiAgVXNlckRhdGFVbnJlZ2lzdGVyZWQgPSA1LFxuICBSZWNvdmVyeVBvaW50ID0gNixcbiAgRGVjUmVmUGljTWFya2luZ1JlcGVpdGlvbiA9IDcsXG4gIFNwYXJlUGljID0gOCxcbiAgU2NlbmVJbmZvID0gOSxcbiAgU3ViU2VxSW5mbyA9IDEwLFxuICBTdWJTZXFMYXllckNoYXJhY3RlcmlzdGljcyA9IDExLFxuICBTdWJTZXFDaGFyYWN0ZXJpc3RpY3MgPSAxMixcbiAgRnVsbEZyYW1lRnJlZXplID0gMTMsXG4gIEZ1bGxGcmFtZUZyZWV6ZVJlbGVhc2UgPSAxNCxcbiAgRnVsbEZyYW1lU25hcHNob3QgPSAxNSxcbiAgUHJvZ3Jlc3NpdmVSZWZpbmVtZW50U2VnbWVudFN0YXJ0ID0gMTYsXG4gIFByb2dyZXNzaXZlUmVmaW5lbWVudFNlZ21lbnRFbmQgPSAxNyxcbiAgTW90aW9uQ29uc3RyYWluZWRTbGljZUdyb3VwU2V0ID0gMTgsXG4gIEZpbG1HcmFpbkNoYXJhY3RlcmlzdGljID0gMTksXG4gIERlYmxvY2tpbmdGaWx0ZXJEaXNwbGF5UmVmZXJlbmNlID0gMjAsXG4gIFN0ZXJlb1ZpZGVvSW5mbyA9IDIxLFxuICBQb3N0RmlsdGVySGludCA9IDIyLFxuICBUb25lTWFwcGluZ0luZm8gPSAyMyxcbiAgU2NhbGFiaWxpdHlJbmZvID0gMjQsXG4gIFN1YlBpY1NjYWxhYmxlTGF5ZXIgPSAyNSxcbiAgTm9uUmVxdWlyZWRMYXllclJlcCA9IDI2LFxuICBQYXJpb3JpdHlMYXllckluZm8gPSAyNyxcbiAgTGF5ZXJzTm90UHJlc2VudCA9IDI4LFxuICBMYXllckRlcGVuZGVuY3lDaGFuZ2UgPSAyOSxcbiAgU2NhbGFibGVOZXN0aW5nID0gMzAsXG4gIEJhc2VMYXllclRlbXBvcmFsSHJkID0gMzEsXG4gIFF1YWxpdHlMYXllckludGVncml0eUNoZWNrID0gMzIsXG4gIFJlZHVuZGFudFBpY1Byb3BlcnR5ID0gMzMsXG4gIFRsMERlcFJlcEluZGV4ID0gMzQsXG4gIFRsU3dpdGNoaW5nUG9pbnQgPSAzNSxcbiAgUGFyYWxsZWxEZWNvZGluZ0luZm8gPSAzNixcbiAgTXZjU2NhbGFibGVOZXN0aW5nID0gMzcsXG4gIFZpZXdTY2FsYWJpbGl0eUluZm8gPSAzOCxcbiAgTXVsdGl2aWV3U2NlbmVJbmZvID0gMzksXG4gIE11bHRpdmlld0FjcXVpc2l0aW9uSW5mbyA9IDQwLFxuICBOb25SZXF1aXJlZFZpZXdDb21wb25lbnQgPSA0MSxcbiAgVmlld0RlcGVuZGVuY3lDaGFuZ2UgPSA0MixcbiAgT3BlcmF0aW9uUG9pbnRzTm90UHJlc2VudCA9IDQzLFxuICBCYXNlVmlld1RlbXBvcmFsSGRyID0gNDQsXG4gIEZyYW1lUGFja2luZ0FycmFuZ2VtZW50ID0gNDUsXG4gIE11bHRpdmlld1ZpZXdQb3NpdGlvbiA9IDQ2LFxuICBEaXNwbGF5T3JpZW50YXRpb24gPSA0NyxcbiAgTXZjZFNjYWxhYmxlTmVzdGluZyA9IDQ4LFxuICBNdmNkVmlld1NjYWxhYmlsaXR5SW5mbyA9IDQ5LFxuICBEZXB0aFJlcHJlc2VudGF0aW9uSW5mbyA9IDUwLFxuICBUaHJlZURpbWVuc2lvbmFsUmVmZXJlbmNlRGlzcGxheXNJbmZvID0gNTEsXG4gIERlcHRoVGltaW5nID0gNTIsXG4gIERlcHRoU2FtcGxpbmdJbmZvID0gNTMsXG4gIENvbnN0cmFpbmVkRGVwdGhQYXJhbWV0ZXJTZXRJZGVudGlmaWVyID0gNTQsXG4gIEdyZWVuTWV0YWRhdGEgPSA1NSxcbiAgTWFzdGVyaW5nRGlzcGxheUNvbG91clZvbHVtZXYgPSA1NixcbiAgQ29sb3VyUmVtYXBwaW5nSW5mbyA9IDU3LFxuICBDb250ZW50TGlnaHRMZXZlbEluZm8gPSA1OCxcbiAgQWx0ZXJuYXRpdmVUcmFuc2ZlckNoYXJhY3RlcmlzdGljcyA9IDU5LFxuICBBbWJpZW50Vmlld2luZ0Vudmlyb25tZW50ID0gNjAsXG4gIENvbnRlbnRDb2xvdXJWb2x1bWUgPSA2MSxcbiAgRXF1aXJlY3Rhbmd1bGFyUHJvamVjdGlvbiA9IDYyLFxuICBDdWJlbWFwUHJvamVjdGlvbiA9IDYzLFxuICBTcGhlcmVSb3RhdGlvbiA9IDY0LFxuICBSZWdpb253aXNlUGFja2luZyA9IDY1LFxuICBPbW5pVmlld3BvcnQgPSA2NixcbiAgQWx0ZXJuYXRpdmVEZXB0aEluZm8gPSA2NyxcbiAgU2VpTWFuaWZlc3QgPSA2OCxcbiAgU2VpUHJlZml4SW5kaWNhdGlvbiA9IDY5LFxuICBBbm5vdGF0ZWRSZWdpb25zID0gNzAsXG4gIFNodXR0ZXJJbnRlcnZhbEluZm8gPSA3MVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWlQYXlsb2FkVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgVWludDhBcnJheXMgZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGFuZy9VaW50OEFycmF5cyc7XG5pbXBvcnQgTmFsVW5pdCBmcm9tICcuLi9uYWxVbml0L05hbFVuaXQnO1xuaW1wb3J0IE5hbFVuaXRUeXBlIGZyb20gJy4uL25hbFVuaXQvTmFsVW5pdFR5cGUnO1xuaW1wb3J0IFNlaVBheWxvYWQgZnJvbSAnLi4vbmFsVW5pdC9TZWlQYXlsb2FkJztcbmltcG9ydCBTZWlQYXlsb2FkVHlwZSBmcm9tICcuLi9uYWxVbml0L1NlaVBheWxvYWRUeXBlJztcbmltcG9ydCBFdmVudFB1Ymxpc2hlciBmcm9tICcuLi8uLi8uLi8uLi9ldmVudC9FdmVudFB1Ymxpc2hlcic7XG5pbXBvcnQgSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0fSBmcm9tICcuLi8uLi8uLi8uLi9ldmVudC9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IHtFbmNvZGVkTWVkaWFTdHJlYW1FdmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vZXZlbnQvZXZlbnRzL0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCBFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQgZnJvbSAnLi4vLi4vLi4vRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkJztcbmltcG9ydCBJVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSBmcm9tICcuL3ZjbC9JVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSc7XG5pbXBvcnQgRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIGZyb20gJy4vRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzJztcblxudHlwZSBFeHRyYWN0ZWREYXRhID0ge1xuICBhbm5leEJTdGFydENvZGVMZW5ndGg6IDMgfCA0O1xuICBuYWxVbml0OiBOYWxVbml0O1xuICBzZWlQYXlsb2Fkcz86IFNlaVBheWxvYWRbXTtcbn07XG5cbnR5cGUgRXh0cmFjdGVkTmFsVW5pdCA9IHtcbiAgbmFsVW5pdERhdGE6IFVpbnQ4QXJyYXk7XG4gIHNlaVBheWxvYWRzPzogU2VpUGF5bG9hZFtdO1xufTtcblxudHlwZSBFeHRyYWN0ZWRTZWlQYXlsb2FkID0ge1xuICBwYXlsb2FkVHlwZTogU2VpUGF5bG9hZFR5cGU7XG4gIHBheWxvYWQ6IFVpbnQ4QXJyYXk7XG4gIGVuZEluZGV4OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBBbm5leEJCeXRlU3RyZWFtUGFyc2VyQ29uZmlndXJhdGlvbiA9IHtcbiAgdHJ1bmNhdGVkVmNsTmFsVW5pdEJ5dGVMZW5ndGg6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGFubmV4QjNCeXRlU3RhcnRDb2RlID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MDAsIDB4MDFdKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBhbm5leEI0Qnl0ZVN0YXJ0Q29kZSA9IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxXSk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9zZWlQYXlsb2FkM0J5dGVFbmRDb2RlID0gbmV3IFVpbnQ4QXJyYXkoWzB4ODAsIDB4MDAsIDB4MDAsIDB4MDFdKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3NlaVBheWxvYWQ0Qnl0ZUVuZENvZGUgPSBuZXcgVWludDhBcnJheShbMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMV0pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZjbEV4dHJhY3Rpb25TdHJhdGVneTogSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3k7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuXG4gIGNvbnN0cnVjdG9yKGV2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlciwgdmNsRXh0cmFjdGlvblN0cmF0ZWd5OiBJVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSkge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyID0gZXZlbnRQdWJsaXNoZXI7XG4gICAgdGhpcy5fdmNsRXh0cmFjdGlvblN0cmF0ZWd5ID0gdmNsRXh0cmFjdGlvblN0cmF0ZWd5O1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLnN1YnNjcmliZVRvRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmtFdmVudHMoKSk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmtFdmVudHMoKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxVaW50OEFycmF5PihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5FbmNvZGVkVmlkZW9TdHJlYW1DaHVuaywgdGhpcy5wYXJzZUVuY29kZWRWaWRlb1N0cmVhbUNodW5rLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUVuY29kZWRWaWRlb1N0cmVhbUNodW5rKHtjb250ZXh0LCBkYXRhOiBjaHVua306IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxVaW50OEFycmF5Pik6IHZvaWQge1xuICAgIGxldCBjdXJyZW50SW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKGN1cnJlbnRJbmRleCA8IGNodW5rLmJ5dGVMZW5ndGgpIHtcbiAgICAgIGN1cnJlbnRJbmRleCArPSB0aGlzLmhhbmRsZUV4dHJhY3RlZERhdGEoY29udGV4dCwgdGhpcy5leHRyYWN0TmFsVW5pdEF0T2Zmc2V0KGNodW5rLCBjdXJyZW50SW5kZXgpKTtcbiAgICB9XG5cbiAgICB0aGlzLm5vdGlmeUVuZE9mQ2h1bmsoY29udGV4dCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUV4dHJhY3RlZERhdGEoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCB7YW5uZXhCU3RhcnRDb2RlTGVuZ3RoLCBuYWxVbml0LCBzZWlQYXlsb2Fkc306IEV4dHJhY3RlZERhdGEpOiBudW1iZXIge1xuICAgIHRoaXMucHVibGlzaE5hbFVuaXQoY29udGV4dCwgbmFsVW5pdCk7XG4gICAgc2VpUGF5bG9hZHM/LmZvckVhY2godGhpcy5oYW5kbGVTZWlQYXlsb2FkLmJpbmQodGhpcywgY29udGV4dCkpO1xuXG4gICAgcmV0dXJuIG5hbFVuaXQuZGF0YS5ieXRlTGVuZ3RoICsgYW5uZXhCU3RhcnRDb2RlTGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTZWlQYXlsb2FkKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwgc2VpUGF5bG9hZDogU2VpUGF5bG9hZCk6IHZvaWQge1xuICAgIHRoaXMucHVibGlzaFNlaVBheWxvYWQoY29udGV4dCwgc2VpUGF5bG9hZCk7XG5cbiAgICBzd2l0Y2ggKHNlaVBheWxvYWQudHlwZSkge1xuICAgICAgY2FzZSBTZWlQYXlsb2FkVHlwZS5Vc2VyRGF0YVVucmVnaXN0ZXJlZDpcbiAgICAgICAgdGhpcy5oYW5kbGVTZWlQYXlsb2FkVXNlckRhdGFVbnJlZ2lzdGVyZWQoY29udGV4dCwgc2VpUGF5bG9hZCk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTZWlQYXlsb2FkVXNlckRhdGFVbnJlZ2lzdGVyZWQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBzZWlQYXlsb2FkOiBTZWlQYXlsb2FkKTogdm9pZCB7XG4gICAgY29uc3QgcGF5bG9hZFV1aWQgPSBVaW50OEFycmF5cy5nZXRVdWlkU3RyaW5nRnJvbVVpbnQ4QXJyYXkoc2VpUGF5bG9hZC5kYXRhLnN1YmFycmF5KDAsIDE2KSk7XG4gICAgY29uc3QgcGF5bG9hZERhdGEgPSBzZWlQYXlsb2FkLmRhdGEuc3ViYXJyYXkoMTYpO1xuXG4gICAgdGhpcy5wdWJsaXNoUGF5bG9hZChjb250ZXh0LCB7XG4gICAgICB1dWlkOiBwYXlsb2FkVXVpZCxcbiAgICAgIGRhdGE6IHBheWxvYWREYXRhXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHB1Ymxpc2hOYWxVbml0KGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwgbmFsVW5pdDogTmFsVW5pdCk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyLnB1Ymxpc2g8TmFsVW5pdD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuTmFsVW5pdCwge1xuICAgICAgY29udGV4dCxcbiAgICAgIGRhdGE6IG5hbFVuaXRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcHVibGlzaFNlaVBheWxvYWQoY29udGV4dDogRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnRDb250ZXh0LCBzZWlQYXlsb2FkOiBTZWlQYXlsb2FkKTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxTZWlQYXlsb2FkPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5TZWlQYXlsb2FkLCB7XG4gICAgICBjb250ZXh0LFxuICAgICAgZGF0YTogc2VpUGF5bG9hZFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwdWJsaXNoUGF5bG9hZChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHBheWxvYWQ6IEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZCk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyLnB1Ymxpc2g8RW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5QYXlsb2FkLCB7XG4gICAgICBjb250ZXh0LFxuICAgICAgZGF0YTogcGF5bG9hZFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBub3RpZnlFbmRPZkNodW5rKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyLnB1Ymxpc2g8bnVsbD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuRW5kT2ZDaHVuaywge1xuICAgICAgY29udGV4dCxcbiAgICAgIGRhdGE6IG51bGxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdE5hbFVuaXRBdE9mZnNldChjaHVuazogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIpOiBFeHRyYWN0ZWREYXRhIHtcbiAgICBjb25zdCBhbm5leEJTdGFydENvZGVMZW5ndGggPSBjaHVua1tvZmZzZXQgKyAyXSA9PT0gMHgwMSA/IDMgOiA0O1xuICAgIGNvbnN0IG5hbFVuaXRIZWFkZXJJbmRleCA9IG9mZnNldCArIGFubmV4QlN0YXJ0Q29kZUxlbmd0aDtcbiAgICBjb25zdCBuYWxVbml0VHlwZSA9IGNodW5rW25hbFVuaXRIZWFkZXJJbmRleF0gJiAweDFmO1xuICAgIGxldCBleHRyYWN0ZWREYXRhO1xuXG4gICAgc3dpdGNoIChuYWxVbml0VHlwZSkge1xuICAgICAgY2FzZSBOYWxVbml0VHlwZS5TbGljZUxheWVyTm9uSWRyRGF0YTpcbiAgICAgIGNhc2UgTmFsVW5pdFR5cGUuU2xpY2VEYXRhUGFydGl0aW9uQUxheWVyOlxuICAgICAgY2FzZSBOYWxVbml0VHlwZS5TbGljZURhdGFQYXJ0aXRpb25CTGF5ZXI6XG4gICAgICBjYXNlIE5hbFVuaXRUeXBlLlNsaWNlRGF0YVBhcnRpdGlvbkNMYXllcjpcbiAgICAgIGNhc2UgTmFsVW5pdFR5cGUuU2xpY2VMYXllcklkckRhdGE6XG4gICAgICAgIGV4dHJhY3RlZERhdGEgPSB0aGlzLl92Y2xFeHRyYWN0aW9uU3RyYXRlZ3kuZXh0cmFjdFZjbE5hbFVuaXQoY2h1bmssIG5hbFVuaXRIZWFkZXJJbmRleCk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgTmFsVW5pdFR5cGUuU3VwcGxlbWVudGFsRW5oYW5jZW1lbnRJbmZvcm1hdGlvbjpcbiAgICAgICAgZXh0cmFjdGVkRGF0YSA9IHRoaXMuZXh0cmFjdFNlaU5hbFVuaXQoY2h1bmssIG5hbFVuaXRIZWFkZXJJbmRleCk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGV4dHJhY3RlZERhdGEgPSB0aGlzLmV4dHJhY3ROb25WY2xOYWxVbml0KGNodW5rLCBuYWxVbml0SGVhZGVySW5kZXgpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhbm5leEJTdGFydENvZGVMZW5ndGgsXG4gICAgICBuYWxVbml0OiB7XG4gICAgICAgIHR5cGU6IG5hbFVuaXRUeXBlLFxuICAgICAgICBkYXRhOiBleHRyYWN0ZWREYXRhLm5hbFVuaXREYXRhXG4gICAgICB9LFxuICAgICAgc2VpUGF5bG9hZHM6IGV4dHJhY3RlZERhdGEuc2VpUGF5bG9hZHNcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0U2VpTmFsVW5pdChjaHVuazogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIpOiBFeHRyYWN0ZWROYWxVbml0IHtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gb2Zmc2V0ICsgMTtcbiAgICBjb25zdCBzZWlQYXlsb2FkczogU2VpUGF5bG9hZFtdID0gW107XG5cbiAgICB3aGlsZSAoXG4gICAgICAhVWludDhBcnJheXMuaXNEYXRhQXRPZmZzZXRUYXJnZXRCeXRlU2VxdWVuY2UoQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5fc2VpUGF5bG9hZDRCeXRlRW5kQ29kZSwgY2h1bmssIGN1cnJlbnRJbmRleClcbiAgICAgICYmICFVaW50OEFycmF5cy5pc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZShBbm5leEJCeXRlU3RyZWFtUGFyc2VyLl9zZWlQYXlsb2FkM0J5dGVFbmRDb2RlLCBjaHVuaywgY3VycmVudEluZGV4KVxuICAgICAgJiYgY3VycmVudEluZGV4IDwgY2h1bmsuYnl0ZUxlbmd0aFxuICAgICkge1xuICAgICAgY29uc3QgZXh0cmFjdGVkU2VpUGF5bG9hZCA9IHRoaXMuZXh0cmFjdFNlaVBheWxvYWQoY2h1bmssIGN1cnJlbnRJbmRleCk7XG5cbiAgICAgIHNlaVBheWxvYWRzLnB1c2goe1xuICAgICAgICBkYXRhOiBleHRyYWN0ZWRTZWlQYXlsb2FkLnBheWxvYWQsXG4gICAgICAgIHR5cGU6IGV4dHJhY3RlZFNlaVBheWxvYWQucGF5bG9hZFR5cGVcbiAgICAgIH0pO1xuICAgICAgY3VycmVudEluZGV4ID0gZXh0cmFjdGVkU2VpUGF5bG9hZC5lbmRJbmRleDtcbiAgICB9XG5cbiAgICBjdXJyZW50SW5kZXgrKztcblxuICAgIHJldHVybiB7XG4gICAgICBuYWxVbml0RGF0YTogY2h1bmsuc3ViYXJyYXkob2Zmc2V0LCBjdXJyZW50SW5kZXgpLFxuICAgICAgc2VpUGF5bG9hZHNcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0Tm9uVmNsTmFsVW5pdChjaHVuazogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIpOiBFeHRyYWN0ZWROYWxVbml0IHtcbiAgICBjb25zdCBuZXh0QW5uZXhCU3RhcnRDb2RlSW5kZXggPSBBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmZpbmRBbm5leEJTdGFydEluZGV4RnJvbU9mZnNldChjaHVuaywgb2Zmc2V0LCBjaHVuay5ieXRlTGVuZ3RoKTtcblxuICAgIHJldHVybiB7bmFsVW5pdERhdGE6IGNodW5rLnN1YmFycmF5KG9mZnNldCwgbmV4dEFubmV4QlN0YXJ0Q29kZUluZGV4KX07XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RTZWlQYXlsb2FkKGNodW5rOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlcik6IEV4dHJhY3RlZFNlaVBheWxvYWQge1xuICAgIGxldCBjdXJyZW50SW5kZXggPSBvZmZzZXQ7XG4gICAgbGV0IGZmQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGNodW5rW2N1cnJlbnRJbmRleF0gPT09IDB4ZmYpIHtcbiAgICAgIGN1cnJlbnRJbmRleCsrO1xuICAgICAgZmZDb3VudCsrO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWRUeXBlID0gZmZDb3VudCAqIDI1NSArIGNodW5rW2N1cnJlbnRJbmRleF07XG5cbiAgICBjdXJyZW50SW5kZXgrKztcbiAgICBmZkNvdW50ID0gMDtcblxuICAgIHdoaWxlIChjaHVua1tjdXJyZW50SW5kZXhdID09PSAweGZmKSB7XG4gICAgICBjdXJyZW50SW5kZXgrKztcbiAgICAgIGZmQ291bnQrKztcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkU2l6ZSA9IGZmQ291bnQgKiAyNTUgKyBjaHVua1tjdXJyZW50SW5kZXhdO1xuXG4gICAgY3VycmVudEluZGV4Kys7XG5cbiAgICBjb25zdCBlbmRJbmRleCA9IGN1cnJlbnRJbmRleCArIEVtdWxhdGlvblByZXZlbnRpb25CeXRlcy5nZXRPZmZzZXRXaXRoRXhwYW5kZWRFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMoY2h1bmssIGN1cnJlbnRJbmRleCwgcGF5bG9hZFNpemUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheWxvYWRUeXBlLFxuICAgICAgcGF5bG9hZDogY2h1bmsuc3ViYXJyYXkoY3VycmVudEluZGV4LCBlbmRJbmRleCksXG4gICAgICBlbmRJbmRleFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZpbmRBbm5leEJTdGFydEluZGV4RnJvbU9mZnNldChkYXRhOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlciwgcmV0dXJuVmFsdWVXaGVuTm90Rm91bmQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgaW5kZXg0ID0gVWludDhBcnJheXMuZmluZFRhcmdldEJ5dGVTZXF1ZW5jZUluZGV4RnJvbU9mZnNldChBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjRCeXRlU3RhcnRDb2RlLCBkYXRhLCBvZmZzZXQsIHJldHVyblZhbHVlV2hlbk5vdEZvdW5kKTtcblxuICAgIGlmIChpbmRleDQgIT09IHJldHVyblZhbHVlV2hlbk5vdEZvdW5kKSB7XG4gICAgICByZXR1cm4gaW5kZXg0O1xuICAgIH1cblxuICAgIHJldHVybiBVaW50OEFycmF5cy5maW5kVGFyZ2V0Qnl0ZVNlcXVlbmNlSW5kZXhGcm9tT2Zmc2V0KEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuYW5uZXhCM0J5dGVTdGFydENvZGUsIGRhdGEsIG9mZnNldCwgcmV0dXJuVmFsdWVXaGVuTm90Rm91bmQpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyB7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0T2Zmc2V0V2l0aEV4cGFuZGVkRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzKGJ1ZmZlcjogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIsIG51bWJlck9mTm9uRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBsZWFkaW5nWmVyb0J5dGVzID0gMDtcbiAgICBsZXQgbnVtYmVyT2ZCeXRlc1Zpc2l0ZWQgPSAwO1xuICAgIGxldCBudW1iZXJPZkJ5dGVzVG9TZWVrID0gbnVtYmVyT2ZOb25FbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXM7XG5cbiAgICBmb3IgKGxldCBpID0gb2Zmc2V0OyBpIDwgYnVmZmVyLmxlbmd0aDsgaSsrLCBudW1iZXJPZkJ5dGVzVmlzaXRlZCsrKSB7XG4gICAgICBpZiAobnVtYmVyT2ZCeXRlc1RvU2VlayA9PT0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGxlYWRpbmdaZXJvQnl0ZXMgPT09IDIgJiYgYnVmZmVyW2ldID09PSAweDAzKSB7XG4gICAgICAgIGxlYWRpbmdaZXJvQnl0ZXMgPSAwO1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnVmZmVyW2ldID09PSAweDAwKSB7XG4gICAgICAgIGxlYWRpbmdaZXJvQnl0ZXMrKztcbiAgICAgIH0gZWxzZSBpZiAobGVhZGluZ1plcm9CeXRlcyA+IDApIHtcbiAgICAgICAgbGVhZGluZ1plcm9CeXRlcyA9IDA7XG4gICAgICB9XG5cbiAgICAgIG51bWJlck9mQnl0ZXNUb1NlZWstLTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVtYmVyT2ZCeXRlc1Zpc2l0ZWQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJlbW92ZUVtdWxhdGlvblByZXZlbnRpb25CeXRlcyhidWZmZXI6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5IHtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheShidWZmZXIuYnl0ZUxlbmd0aCk7XG4gICAgbGV0IG91dE9mZnNldCA9IDA7XG4gICAgbGV0IGVic3BPZmZzZXQgPSAwO1xuXG4gICAgZm9yIChsZXQgcHJldmVudGlvbkJ5dGVJZHggPSAyOyBwcmV2ZW50aW9uQnl0ZUlkeCA8IGJ1ZmZlci5ieXRlTGVuZ3RoOyBwcmV2ZW50aW9uQnl0ZUlkeCsrKSB7XG4gICAgICBpZiAoYnVmZmVyW3ByZXZlbnRpb25CeXRlSWR4XSA9PT0gMHgwMyAmJiBidWZmZXJbcHJldmVudGlvbkJ5dGVJZHggLSAxXSA9PT0gMHgwMCAmJiBidWZmZXJbcHJldmVudGlvbkJ5dGVJZHggLSAyXSA9PT0gMHgwMCkge1xuICAgICAgICBvdXRwdXQuc2V0KGJ1ZmZlci5zdWJhcnJheShlYnNwT2Zmc2V0LCBwcmV2ZW50aW9uQnl0ZUlkeCksIG91dE9mZnNldCk7XG4gICAgICAgIG91dE9mZnNldCArPSBwcmV2ZW50aW9uQnl0ZUlkeCAtIGVic3BPZmZzZXQ7XG4gICAgICAgIGVic3BPZmZzZXQgPSBwcmV2ZW50aW9uQnl0ZUlkeCArIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVic3BPZmZzZXQgPCBidWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgb3V0cHV0LnNldChidWZmZXIuc3ViYXJyYXkoZWJzcE9mZnNldCksIG91dE9mZnNldCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQml0c3RyZWFtUmVhZGVyIGZyb20gJy4uLy4uLy4uL0JpdHN0cmVhbVJlYWRlcic7XG5pbXBvcnQgRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIGZyb20gJy4vRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzJztcblxuZW51bSBQaWNTdHJ1Y3Qge1xuICBQcm9ncmVzc2l2ZUZyYW1lID0gMCxcbiAgVG9wRmllbGQgPSAxLFxuICBCb3R0b21GaWVsZCA9IDIsXG4gIFRvcEZpZWxkQm90dG9tRmllbGQgPSAzLFxuICBCb3R0b21GaWVsZFRvcEZpZWxkID0gNCxcbiAgVG9wRmllbGRCb3R0b21GaWVsZFRvcEZpZWxkUmVwZWF0ZWQgPSA1LFxuICBCb3R0b21GaWVsZFRvcEZpZWxkQm90dG9tRmllbGRSZXBlYXRlZCA9IDYsXG4gIEZyYW1lRG91YmxpbmcgPSA3LFxuICBGcmFtZVRyaXBsaW5nID0gOFxufVxuXG5leHBvcnQgdHlwZSBQaWN0dXJlVGltaW5nUGFyc2luZ0NvbmZpZyA9IHtcbiAgcGljU3RydWN0UHJlc2VudEZsYWc6IGJvb2xlYW47XG59ICYgKFxuICB7XG4gICAgY3BiRHBiRGVsYXlzUHJlc2VudEZsYWc6IHRydWU7XG4gICAgY3BiUmVtb3ZhbERlbGF5TGVuZ3RoTWludXMxOiBudW1iZXI7XG4gICAgZHBiT3V0cHV0RGVsYXlMZW5ndGhNaW51czE6IG51bWJlcjtcbiAgfVxuICB8IHtcbiAgICBjcGJEcGJEZWxheXNQcmVzZW50RmxhZzogZmFsc2U7XG4gIH1cbik7XG5cbmV4cG9ydCB0eXBlIENsb2NrVGltZXN0YW1wID0ge1xuICBjdFR5cGU6IG51bWJlcjtcbiAgbnVpdEZpZWxkQmFzZWRGbGFnOiBib29sZWFuO1xuICBjb3VudGluZ1R5cGU6IG51bWJlcjtcbiAgZnVsbFRpbWVzdGFtcEZsYWc6IGJvb2xlYW47XG4gIGRpc2NvbnRpbnVpdHlGbGFnOiBib29sZWFuO1xuICBjbnREcm9wcGVkRmxhZzogYm9vbGVhbjtcbiAgbkZyYW1lczogbnVtYmVyO1xuICBzZWNvbmRzPzogbnVtYmVyO1xuICBtaW51dGVzPzogbnVtYmVyO1xuICBob3Vycz86IG51bWJlcjtcbiAgdGltZU9mZnNldD86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFBpY3R1cmVUaW1pbmcgPSB7XG4gIHBpY1N0cnVjdDogdW5kZWZpbmVkIHwge1xuICAgIG51bUNsb2NrVFM6IG51bWJlcjtcbiAgICBjbG9ja1RpbWVzdGFtcHM6IEFycmF5PHtcbiAgICAgIGNsb2NrVGltZXN0YW1wRmxhZzogZmFsc2U7XG4gICAgfSB8IHtcbiAgICAgIGNsb2NrVGltZXN0YW1wRmxhZzogdHJ1ZTtcbiAgICAgIGNsb2NrVGltZXN0YW1wOiBDbG9ja1RpbWVzdGFtcDtcbiAgICB9PjtcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBpY3R1cmVUaW1pbmdQYXJzZXIge1xuICBwdWJsaWMgcGFyc2UoZGF0YTogVWludDhBcnJheSwgY29uZmlnOiBQaWN0dXJlVGltaW5nUGFyc2luZ0NvbmZpZyk6IFBpY3R1cmVUaW1pbmcge1xuICAgIGNvbnN0IGJpdHN0cmVhbVJlYWRlciA9IG5ldyBCaXRzdHJlYW1SZWFkZXIoRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzLnJlbW92ZUVtdWxhdGlvblByZXZlbnRpb25CeXRlcyhkYXRhKSk7XG4gICAgY29uc3QgcGljdHVyZVRpbWluZzogUGljdHVyZVRpbWluZyA9IHtwaWNTdHJ1Y3Q6IHVuZGVmaW5lZH07XG5cbiAgICBpZiAoY29uZmlnLmNwYkRwYkRlbGF5c1ByZXNlbnRGbGFnKSB7XG4gICAgICAvLyBXZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhlIENQQiBhbmQgRFBCIGRlbGF5cyBhdCB0aGUgbW9tZW50XG4gICAgICBiaXRzdHJlYW1SZWFkZXIuc2tpcEJpdHMoY29uZmlnLmNwYlJlbW92YWxEZWxheUxlbmd0aE1pbnVzMSArIDEpO1xuICAgICAgYml0c3RyZWFtUmVhZGVyLnNraXBCaXRzKGNvbmZpZy5kcGJPdXRwdXREZWxheUxlbmd0aE1pbnVzMSArIDEpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcucGljU3RydWN0UHJlc2VudEZsYWcpIHtcbiAgICAgIGNvbnN0IG51bUNsb2NrVFMgPSB0aGlzLmNvbnZlcnRQaWNTdHJ1Y3RUb051bUNsb2NrVFMoYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDQpKTtcblxuICAgICAgcGljdHVyZVRpbWluZy5waWNTdHJ1Y3QgPSB7XG4gICAgICAgIG51bUNsb2NrVFMsXG4gICAgICAgIGNsb2NrVGltZXN0YW1wczogW11cbiAgICAgIH07XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGljdHVyZVRpbWluZy5waWNTdHJ1Y3QubnVtQ2xvY2tUUzsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNsb2NrVGltZXN0YW1wRmxhZyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMTtcblxuICAgICAgICBpZiAoY2xvY2tUaW1lc3RhbXBGbGFnKSB7XG4gICAgICAgICAgY29uc3QgY2xvY2tUaW1lc3RhbXA6IENsb2NrVGltZXN0YW1wID0ge1xuICAgICAgICAgICAgY3RUeXBlOiBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMiksXG4gICAgICAgICAgICBudWl0RmllbGRCYXNlZEZsYWc6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMSxcbiAgICAgICAgICAgIGNvdW50aW5nVHlwZTogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDUpLFxuICAgICAgICAgICAgZnVsbFRpbWVzdGFtcEZsYWc6IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cygxKSA9PT0gMSxcbiAgICAgICAgICAgIGRpc2NvbnRpbnVpdHlGbGFnOiBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDEsXG4gICAgICAgICAgICBjbnREcm9wcGVkRmxhZzogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxLFxuICAgICAgICAgICAgbkZyYW1lczogYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDgpXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChjbG9ja1RpbWVzdGFtcC5mdWxsVGltZXN0YW1wRmxhZykge1xuICAgICAgICAgICAgY2xvY2tUaW1lc3RhbXAuc2Vjb25kcyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg2KTtcbiAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wLm1pbnV0ZXMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNik7XG4gICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5ob3VycyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg1KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kc0ZsYWcgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDE7XG5cbiAgICAgICAgICAgIGlmIChzZWNvbmRzRmxhZykge1xuICAgICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5zZWNvbmRzID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDYpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IG1pbnV0ZXNGbGFnID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDEpID09PSAxO1xuXG4gICAgICAgICAgICAgIGlmIChtaW51dGVzRmxhZykge1xuICAgICAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wLm1pbnV0ZXMgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoNik7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBob3Vyc0ZsYWcgPSBiaXRzdHJlYW1SZWFkZXIucmVhZEJpdHMoMSkgPT09IDE7XG5cbiAgICAgICAgICAgICAgICBpZiAoaG91cnNGbGFnKSB7XG4gICAgICAgICAgICAgICAgICBjbG9ja1RpbWVzdGFtcC5ob3VycyA9IGJpdHN0cmVhbVJlYWRlci5yZWFkQml0cyg1KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbG9ja1RpbWVzdGFtcC50aW1lT2Zmc2V0ID0gYml0c3RyZWFtUmVhZGVyLnJlYWRCaXRzKDI0KTtcblxuICAgICAgICAgIHBpY3R1cmVUaW1pbmcucGljU3RydWN0LmNsb2NrVGltZXN0YW1wcy5wdXNoKHtcbiAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wRmxhZyxcbiAgICAgICAgICAgIGNsb2NrVGltZXN0YW1wXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGljdHVyZVRpbWluZy5waWNTdHJ1Y3QuY2xvY2tUaW1lc3RhbXBzLnB1c2goe2Nsb2NrVGltZXN0YW1wRmxhZzogZmFsc2V9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwaWN0dXJlVGltaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UGljU3RydWN0VG9OdW1DbG9ja1RTKHBpY1N0cnVjdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHBpY1N0cnVjdCkge1xuICAgICAgY2FzZSBQaWNTdHJ1Y3QuUHJvZ3Jlc3NpdmVGcmFtZTpcbiAgICAgIGNhc2UgUGljU3RydWN0LlRvcEZpZWxkOlxuICAgICAgY2FzZSBQaWNTdHJ1Y3QuQm90dG9tRmllbGQ6XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgY2FzZSBQaWNTdHJ1Y3QuVG9wRmllbGRCb3R0b21GaWVsZDpcbiAgICAgIGNhc2UgUGljU3RydWN0LkJvdHRvbUZpZWxkVG9wRmllbGQ6XG4gICAgICBjYXNlIFBpY1N0cnVjdC5GcmFtZURvdWJsaW5nOlxuICAgICAgICByZXR1cm4gMjtcbiAgICAgIGNhc2UgUGljU3RydWN0LlRvcEZpZWxkQm90dG9tRmllbGRUb3BGaWVsZFJlcGVhdGVkOlxuICAgICAgY2FzZSBQaWNTdHJ1Y3QuQm90dG9tRmllbGRUb3BGaWVsZEJvdHRvbUZpZWxkUmVwZWF0ZWQ6XG4gICAgICBjYXNlIFBpY1N0cnVjdC5GcmFtZVRyaXBsaW5nOlxuICAgICAgICByZXR1cm4gMztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFVpbnQ4QXJyYXlzIGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xhbmcvVWludDhBcnJheXMnO1xuaW1wb3J0IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIgZnJvbSAnLi4vQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcic7XG5pbXBvcnQgSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3ksIHtFeHRyYWN0ZWROYWxVbml0fSBmcm9tICcuL0lWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyM1ZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kgaW1wbGVtZW50cyBJVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90cnVuY2F0ZWRWY2xOYWxVbml0Qnl0ZUxlbmd0aCA9IDMyO1xuXG4gIHB1YmxpYyBleHRyYWN0VmNsTmFsVW5pdChjaHVuazogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIpOiBFeHRyYWN0ZWROYWxVbml0IHtcbiAgICBjb25zdCBuZXh0UG90ZW50aWFsNEJ5dGVTdGFydENvZGVJbmRleCA9IG9mZnNldCArIEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuYW5uZXhCNEJ5dGVTdGFydENvZGUuYnl0ZUxlbmd0aCArIFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjNWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5Ll90cnVuY2F0ZWRWY2xOYWxVbml0Qnl0ZUxlbmd0aDtcblxuICAgIGlmIChVaW50OEFycmF5cy5pc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZShBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjRCeXRlU3RhcnRDb2RlLCBjaHVuaywgbmV4dFBvdGVudGlhbDRCeXRlU3RhcnRDb2RlSW5kZXgpKSB7XG4gICAgICByZXR1cm4ge25hbFVuaXREYXRhOiBjaHVuay5zdWJhcnJheShvZmZzZXQgKyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjRCeXRlU3RhcnRDb2RlLmJ5dGVMZW5ndGgsIG5leHRQb3RlbnRpYWw0Qnl0ZVN0YXJ0Q29kZUluZGV4KX07XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFBvdGVudGlhbDNCeXRlU3RhcnRDb2RlSW5kZXggPSBvZmZzZXQgKyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyLmFubmV4QjNCeXRlU3RhcnRDb2RlLmJ5dGVMZW5ndGggKyBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneS5fdHJ1bmNhdGVkVmNsTmFsVW5pdEJ5dGVMZW5ndGg7XG5cbiAgICBpZiAoVWludDhBcnJheXMuaXNEYXRhQXRPZmZzZXRUYXJnZXRCeXRlU2VxdWVuY2UoQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEIzQnl0ZVN0YXJ0Q29kZSwgY2h1bmssIG5leHRQb3RlbnRpYWwzQnl0ZVN0YXJ0Q29kZUluZGV4KSkge1xuICAgICAgcmV0dXJuIHtuYWxVbml0RGF0YTogY2h1bmsuc3ViYXJyYXkob2Zmc2V0ICsgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlci5hbm5leEIzQnl0ZVN0YXJ0Q29kZS5ieXRlTGVuZ3RoLCBuZXh0UG90ZW50aWFsM0J5dGVTdGFydENvZGVJbmRleCl9O1xuICAgIH1cblxuICAgIHJldHVybiB7bmFsVW5pdERhdGE6IGNodW5rLnN1YmFycmF5KG9mZnNldCl9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlciBmcm9tICcuLi9Bbm5leEJCeXRlU3RyZWFtUGFyc2VyJztcbmltcG9ydCBJVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSwge0V4dHJhY3RlZE5hbFVuaXR9IGZyb20gJy4vSVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3knO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWYW5pbGxhVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSBpbXBsZW1lbnRzIElWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5IHtcbiAgcHVibGljIGV4dHJhY3RWY2xOYWxVbml0KGNodW5rOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlcik6IEV4dHJhY3RlZE5hbFVuaXQge1xuICAgIGNvbnN0IG5leHRBbm5leEJTdGFydENvZGVJbmRleCA9IEFubmV4QkJ5dGVTdHJlYW1QYXJzZXIuZmluZEFubmV4QlN0YXJ0SW5kZXhGcm9tT2Zmc2V0KGNodW5rLCBvZmZzZXQsIGNodW5rLmJ5dGVMZW5ndGgpO1xuXG4gICAgcmV0dXJuIHtuYWxVbml0RGF0YTogY2h1bmsuc3ViYXJyYXkob2Zmc2V0LCBuZXh0QW5uZXhCU3RhcnRDb2RlSW5kZXgpfTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgRXZlbnRQdWJsaXNoZXIgZnJvbSAnLi4vLi4vZXZlbnQvRXZlbnRQdWJsaXNoZXInO1xuaW1wb3J0IEgyNjRCaXRzdHJlYW0gZnJvbSAnLi4vY29kZWMvaDI2NC9IMjY0Qml0c3RyZWFtJztcbmltcG9ydCBBbm5leEJCeXRlU3RyZWFtUGFyc2VyIGZyb20gJy4uL2NvZGVjL2gyNjQvcGFyc2UvQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcic7XG5pbXBvcnQgVmFuaWxsYVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3kgZnJvbSAnLi4vY29kZWMvaDI2NC9wYXJzZS92Y2wvVmFuaWxsYVZjbE5hbFVuaXRFeHRyYWN0aW9uU3RyYXRlZ3knO1xuaW1wb3J0IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjNWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5IGZyb20gJy4uL2NvZGVjL2gyNjQvcGFyc2UvdmNsL1BoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjNWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5JztcbmltcG9ydCBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzIGZyb20gJy4uL2VuY29kaW5nLzIwMjMvUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMyc7XG5pbXBvcnQgSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciBmcm9tICcuL0gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXInO1xuaW1wb3J0IFBoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyIGZyb20gJy4vUGhlbml4SDI2NEVtYmVkZGVkSXNvQm1mZjIwMjNWaWRlb0JpdHN0cmVhbURlY29kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRzdHJlYW1EZWNvZGVycyB7XG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcigpOiBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIHtcbiAgICBjb25zdCBkZWNvZGVyRXZlbnRQdWJsaXNoZXIgPSBuZXcgRXZlbnRQdWJsaXNoZXIoKTtcbiAgICBjb25zdCBiaXRzdHJlYW0gPSBuZXcgSDI2NEJpdHN0cmVhbShkZWNvZGVyRXZlbnRQdWJsaXNoZXIpO1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBBbm5leEJCeXRlU3RyZWFtUGFyc2VyKGRlY29kZXJFdmVudFB1Ymxpc2hlciwgbmV3IFZhbmlsbGFWY2xOYWxVbml0RXh0cmFjdGlvblN0cmF0ZWd5KCkpO1xuXG4gICAgcmV0dXJuIG5ldyBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyKGRlY29kZXJFdmVudFB1Ymxpc2hlciwgYml0c3RyZWFtLCBwYXJzZXIpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlcigpOiBQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlciB7XG4gICAgY29uc3QgZGVjb2RlckV2ZW50UHVibGlzaGVyID0gbmV3IEV2ZW50UHVibGlzaGVyKCk7XG4gICAgY29uc3QgYml0c3RyZWFtID0gbmV3IEgyNjRCaXRzdHJlYW0oZGVjb2RlckV2ZW50UHVibGlzaGVyKTtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlcihkZWNvZGVyRXZlbnRQdWJsaXNoZXIsIG5ldyBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSgpKTtcbiAgICBjb25zdCBoMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyID0gbmV3IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIoZGVjb2RlckV2ZW50UHVibGlzaGVyLCBiaXRzdHJlYW0sIHBhcnNlcik7XG4gICAgY29uc3QgZW5jb2RpbmcgPSBuZXcgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMyhkZWNvZGVyRXZlbnRQdWJsaXNoZXIpO1xuXG4gICAgcmV0dXJuIG5ldyBQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlcihoMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyLCBlbmNvZGluZyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQml0c3RyZWFtRGVjb2RlcnMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgRXZlbnRQdWJsaXNoZXIgZnJvbSAnLi4vLi4vZXZlbnQvRXZlbnRQdWJsaXNoZXInO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCBmcm9tICcuLi8uLi9ldmVudC9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IHtFbmNvZGVkTWVkaWFTdHJlYW1FdmVudH0gZnJvbSAnLi4vLi4vZXZlbnQvZXZlbnRzL0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCBIMjY0Qml0c3RyZWFtIGZyb20gJy4uL2NvZGVjL2gyNjQvSDI2NEJpdHN0cmVhbSc7XG5pbXBvcnQgQW5uZXhCQnl0ZVN0cmVhbVBhcnNlciBmcm9tICcuLi9jb2RlYy9oMjY0L3BhcnNlL0FubmV4QkJ5dGVTdHJlYW1QYXJzZXInO1xuaW1wb3J0IElCaXRzdHJlYW1EZWNvZGVyIGZyb20gJy4vSUJpdHN0cmVhbURlY29kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIGltcGxlbWVudHMgSUJpdHN0cmVhbURlY29kZXI8SDI2NEJpdHN0cmVhbT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JpdHN0cmVhbTogSDI2NEJpdHN0cmVhbTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFyc2VyOiBBbm5leEJCeXRlU3RyZWFtUGFyc2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICBjb25zdHJ1Y3RvcihldmVudFB1Ymxpc2hlcjogRXZlbnRQdWJsaXNoZXIsIGJpdHN0cmVhbTogSDI2NEJpdHN0cmVhbSwgcGFyc2VyOiBBbm5leEJCeXRlU3RyZWFtUGFyc2VyKSB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIgPSBldmVudFB1Ymxpc2hlcjtcbiAgICB0aGlzLl9iaXRzdHJlYW0gPSBiaXRzdHJlYW07XG4gICAgdGhpcy5fcGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9iaXRzdHJlYW0pO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9wYXJzZXIpO1xuICB9XG5cbiAgZ2V0IGJpdHN0cmVhbSgpOiBIMjY0Qml0c3RyZWFtIHtcbiAgICByZXR1cm4gdGhpcy5fYml0c3RyZWFtO1xuICB9XG5cbiAgcHVibGljIGRlY29kZShlbmNvZGVkTWVkaWFTdHJlYW1DaHVuazogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFVpbnQ4QXJyYXk+KTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxVaW50OEFycmF5PihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5FbmNvZGVkVmlkZW9TdHJlYW1DaHVuaywgZW5jb2RlZE1lZGlhU3RyZWFtQ2h1bmspO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQgZnJvbSAnLi4vLi4vZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCBIMjY0Qml0c3RyZWFtIGZyb20gJy4uL2NvZGVjL2gyNjQvSDI2NEJpdHN0cmVhbSc7XG5pbXBvcnQgUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMyBmcm9tICcuLi9lbmNvZGluZy8yMDIzL1BoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMnO1xuaW1wb3J0IElzb0JtZmZTZWdtZW50IGZyb20gJy4uL2NvbnRhaW5lci9pc29ibWZmL3NlZ21lbnQvSXNvQm1mZlNlZ21lbnQnO1xuaW1wb3J0IEgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIgZnJvbSAnLi9IMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyJztcbmltcG9ydCBJQml0c3RyZWFtRGVjb2RlciBmcm9tICcuL0lCaXRzdHJlYW1EZWNvZGVyJztcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlciBpbXBsZW1lbnRzIElCaXRzdHJlYW1EZWNvZGVyPEgyNjRCaXRzdHJlYW0+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcjogSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5jb2Rpbmc6IFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcblxuICBjb25zdHJ1Y3RvcihoMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyOiBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyLCBlbmNvZGluZzogUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMykge1xuICAgIHRoaXMuX2gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIgPSBoMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyO1xuICAgIHRoaXMuX2VuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5faDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlcik7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2VuY29kaW5nKTtcbiAgfVxuXG4gIGdldCBiaXRzdHJlYW0oKTogSDI2NEJpdHN0cmVhbSB7XG4gICAgcmV0dXJuIHRoaXMuX2gyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIuYml0c3RyZWFtO1xuICB9XG5cbiAgcHVibGljIGRlY29kZShlbmNvZGVkTWVkaWFTdHJlYW1DaHVuazogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFVpbnQ4QXJyYXk+KTogdm9pZCB7XG4gICAgdGhpcy5faDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlci5kZWNvZGUoZW5jb2RlZE1lZGlhU3RyZWFtQ2h1bmspO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvRW1iZWRkZWREYXRhKG9uRGVjb2RlZE1lZGlhQ2h1bms6IChlbWJlZGRlZERhdGFFdmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PElzb0JtZmZTZWdtZW50PikgPT4gdm9pZCwgdHJhY2tJZD86IHN0cmluZyk6IERpc3Bvc2FibGUge1xuICAgIGlmICh0cmFja0lkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW5jb2Rpbmcuc3Vic2NyaWJlVG9FbWJlZGRlZERhdGEoZGVjb2RlZE1lZGlhQ2h1bmtFdmVudCA9PiB7XG4gICAgICAgIGlmIChkZWNvZGVkTWVkaWFDaHVua0V2ZW50LnRyYWNrSWQgPT09IHRyYWNrSWQpIHtcbiAgICAgICAgICBvbkRlY29kZWRNZWRpYUNodW5rKGRlY29kZWRNZWRpYUNodW5rRXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZW5jb2Rpbmcuc3Vic2NyaWJlVG9FbWJlZGRlZERhdGEob25EZWNvZGVkTWVkaWFDaHVuayk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4qL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uLy4uLy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi8uLi8uLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE5hbFVuaXRUeXBlIGZyb20gJy4uLy4uL2NvZGVjL2gyNjQvbmFsVW5pdC9OYWxVbml0VHlwZSc7XG5pbXBvcnQgTmFsVW5pdCBmcm9tICcuLi8uLi9jb2RlYy9oMjY0L25hbFVuaXQvTmFsVW5pdCc7XG5pbXBvcnQgSXNvQm1mZlNlZ21lbnQgZnJvbSAnLi4vLi4vY29udGFpbmVyL2lzb2JtZmYvc2VnbWVudC9Jc29CbWZmU2VnbWVudCc7XG5pbXBvcnQgRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkIGZyb20gJy4uLy4uL0VuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZCc7XG5pbXBvcnQgRXZlbnRQdWJsaXNoZXIgZnJvbSAnLi4vLi4vLi4vZXZlbnQvRXZlbnRQdWJsaXNoZXInO1xuaW1wb3J0IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCwge0VuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dH0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50JztcbmltcG9ydCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnR9IGZyb20gJy4uLy4uLy4uL2V2ZW50L2V2ZW50cy9FbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB1bmRlZmluZWQ7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdHJ1bmNhdGVkVmNsTmFsVW5pdERhdGFCeXRlTGVuZ3RoID0gMzI7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9waGVuaXhWY2xFbWJlZGRlZERhdGFVdWlkID0gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9waGVuaXhJbml0aWFsaXphdGlvblNlZ21lbnRVdWlkID0gJzUxMWUyMmJkLTM0YzAtNGNlZS1iNmMzLTNjNGQ0MDc2MjJjNyc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwZWN0ZWRQYXlsb2FkVXVpZDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuZE9mQ2h1bmtIYW5kbGVyc0J5VHJhY2tJZDogTWFwPHN0cmluZywgKHRyYWNrSWQ6IHN0cmluZykgPT4gdm9pZD4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbmFibGVXYXJuaW5nTG9nV2hlblZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kOiBEaXNwb3NhYmxlID0gbmV3IERpc3Bvc2FibGUodGhpcy5lbmFibGVXYXJuaW5nTG9nV2hlblZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kLmJpbmQodGhpcykpO1xuXG4gIGNvbnN0cnVjdG9yKGV2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlcikge1xuICAgIHRoaXMuX2V2ZW50UHVibGlzaGVyID0gZXZlbnRQdWJsaXNoZXI7XG4gICAgdGhpcy5fZXhwZWN0ZWRQYXlsb2FkVXVpZC5hZGQoUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy5fcGhlbml4VmNsRW1iZWRkZWREYXRhVXVpZCk7XG4gICAgdGhpcy5fZXhwZWN0ZWRQYXlsb2FkVXVpZC5hZGQoUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy5fcGhlbml4SW5pdGlhbGl6YXRpb25TZWdtZW50VXVpZCk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuc3Vic2NyaWJlVG9QYXlsb2FkRXZlbnRzKCkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLnN1YnNjcmliZVRvUGF5bG9hZFN1YnNjcmlwdGlvbkV2ZW50cygpKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5zdWJzY3JpYmVUb05hbFVuaXRFdmVudHMoKSk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlVG9FbWJlZGRlZERhdGEoaGFuZGxlcjogKGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8SXNvQm1mZlNlZ21lbnQ+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fZW5hYmxlV2FybmluZ0xvZ1doZW5WY2xFbWJlZGRlZERhdGFOb3RGb3VuZC5kaXNwb3NlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuUGF5bG9hZCwgKHtjb250ZXh0LCBkYXRhOiBwYXlsb2FkfSkgPT4ge1xuICAgICAgc3dpdGNoIChwYXlsb2FkLnV1aWQpIHtcbiAgICAgICAgY2FzZSBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl9waGVuaXhJbml0aWFsaXphdGlvblNlZ21lbnRVdWlkOlxuICAgICAgICAgIGhhbmRsZXIoe1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ0luaXRpYWxpemF0aW9uJyxcbiAgICAgICAgICAgICAgZGF0YTogcGF5bG9hZC5kYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFBoZW5peEVtYmVkZGVkSXNvQm1mZjIwMjMuX3BoZW5peFZjbEVtYmVkZGVkRGF0YVV1aWQ6XG4gICAgICAgICAgaGFuZGxlcih7XG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICB0eXBlOiAnTWVkaWEnLFxuICAgICAgICAgICAgICBkYXRhOiBwYXlsb2FkLmRhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgdGhpcy5fZW5kT2ZDaHVua0hhbmRsZXJzQnlUcmFja0lkLmNsZWFyKCk7XG4gICAgdGhpcy5fZXhwZWN0ZWRQYXlsb2FkVXVpZC5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVXYXJuaW5nTG9nV2hlblZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLnN1YnNjcmliZVRvRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmtFdmVudHMoKSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuc3Vic2NyaWJlVG9FbmRPZkNodW5rRXZlbnRzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1BheWxvYWRTdWJzY3JpcHRpb25FdmVudHMoKTogRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50UHVibGlzaGVyLnN1YnNjcmliZTxzdHJpbmc+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWRTdWJzY3JpcHRpb24sICh7ZGF0YTogcGF5bG9hZFV1aWR9KSA9PiB0aGlzLl9leHBlY3RlZFBheWxvYWRVdWlkLmFkZChwYXlsb2FkVXVpZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0VuY29kZWRWaWRlb1N0cmVhbUNodW5rRXZlbnRzKCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8VWludDhBcnJheT4oRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQuRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmssIHRoaXMuYXJtTG9nZ2luZ05vVmNsRW1iZWRkZWREYXRhRm91bmQuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvTmFsVW5pdEV2ZW50cygpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPE5hbFVuaXQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Lk5hbFVuaXQsIHRoaXMuaGFuZGxlTmFsVW5pdEV2ZW50LmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOYWxVbml0RXZlbnQoe2NvbnRleHQsIGRhdGE6IG5hbFVuaXR9OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8TmFsVW5pdD4pOiB2b2lkIHtcbiAgICBpZiAobmFsVW5pdC50eXBlID4gTmFsVW5pdFR5cGUuU2xpY2VMYXllcklkckRhdGEgfHwgbmFsVW5pdC5kYXRhLmJ5dGVMZW5ndGggPCBQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl90cnVuY2F0ZWRWY2xOYWxVbml0RGF0YUJ5dGVMZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnB1Ymxpc2hWY2xFbWJlZGRlZFBheWxvYWQoY29udGV4dCwge1xuICAgICAgdXVpZDogUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMy5fcGhlbml4VmNsRW1iZWRkZWREYXRhVXVpZCxcbiAgICAgIGRhdGE6IHRoaXMuZXh0cmFjdFZjbEVtYmVkZGVkRGF0YShuYWxVbml0KVxuICAgIH0pO1xuICAgIHRoaXMuZGlzYXJtTG9nZ2luZ05vVmNsRW1iZWRkZWREYXRhRm91bmQoY29udGV4dC50cmFja0lkKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFZjbEVtYmVkZGVkRGF0YShuYWxVbml0OiBOYWxVbml0KTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIG5hbFVuaXQuZGF0YS5zdWJhcnJheShQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzLl90cnVuY2F0ZWRWY2xOYWxVbml0RGF0YUJ5dGVMZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdWJsaXNoVmNsRW1iZWRkZWRQYXlsb2FkKGNvbnRleHQ6IEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50Q29udGV4dCwgcGF5bG9hZDogRW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkKTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRQdWJsaXNoZXIucHVibGlzaDxFbmNvZGVkTWVkaWFTdHJlYW1FbWJlZGRlZFBheWxvYWQ+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LlBheWxvYWQsIHtcbiAgICAgIGNvbnRleHQsXG4gICAgICBkYXRhOiBwYXlsb2FkXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFybUxvZ2dpbmdOb1ZjbEVtYmVkZGVkRGF0YUZvdW5kKHtjb250ZXh0fTogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFVpbnQ4QXJyYXk+KTogdm9pZCB7XG4gICAgdGhpcy5fZW5kT2ZDaHVua0hhbmRsZXJzQnlUcmFja0lkLnNldChjb250ZXh0LnRyYWNrSWQsIHRoaXMubG9nV2FybmluZ1ZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kLmJpbmQodGhpcywgY29udGV4dC50cmFja0lkKSk7XG4gIH1cblxuICBwcml2YXRlIGRpc2FybUxvZ2dpbmdOb1ZjbEVtYmVkZGVkRGF0YUZvdW5kKHRyYWNrSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2VuZE9mQ2h1bmtIYW5kbGVyc0J5VHJhY2tJZC5zZXQodHJhY2tJZCwgbm9vcCk7XG4gIH1cblxuICBwcml2YXRlIGxvZ1dhcm5pbmdWY2xFbWJlZGRlZERhdGFOb3RGb3VuZChjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBbJXNdIE5vIFZDTCBlbWJlZGRlZCBkYXRhIGZvdW5kIGluIGFuIGVuY29kZWQgdmlkZW8gc3RyZWFtIGNodW5rIGZyb20gdHJhY2sgd2l0aCBpZCBbJXNdJywgY29udGV4dC5zdHJlYW1JZCwgY29udGV4dC5jb250ZXh0SWQsIGNvbnRleHQudHJhY2tJZCk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvRW5kT2ZDaHVua0V2ZW50cygpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlPG51bGw+KEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LkVuZE9mQ2h1bmssIHRoaXMuaGFuZGxlRW5kT2ZFbmNvZGVkVmlkZW9TdHJlYW1DaHVuay5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRW5kT2ZFbmNvZGVkVmlkZW9TdHJlYW1DaHVuayh7Y29udGV4dH06IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxudWxsPik6IHZvaWQge1xuICAgIGNvbnN0IGVuZE9mQ2h1bmtFdmVudEhhbmRsZXIgPSB0aGlzLl9lbmRPZkNodW5rSGFuZGxlcnNCeVRyYWNrSWQuZ2V0KGNvbnRleHQudHJhY2tJZCkgYXMgKCkgPT4gdm9pZDtcblxuICAgIGVuZE9mQ2h1bmtFdmVudEhhbmRsZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9QYXlsb2FkRXZlbnRzKCk6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFB1Ymxpc2hlci5zdWJzY3JpYmU8RW5jb2RlZE1lZGlhU3RyZWFtRW1iZWRkZWRQYXlsb2FkPihFbmNvZGVkTWVkaWFTdHJlYW1FdmVudC5QYXlsb2FkLCB0aGlzLmhhbmRsZVBheWxvYWRFdmVudC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUGF5bG9hZEV2ZW50KHtjb250ZXh0LCBkYXRhOiBwYXlsb2FkfTogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEVuY29kZWRNZWRpYVN0cmVhbUVtYmVkZGVkUGF5bG9hZD4pIHtcbiAgICBpZiAoIXRoaXMuX2V4cGVjdGVkUGF5bG9hZFV1aWQuaGFzKHBheWxvYWQudXVpZCkpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KHRoaXMubG9nV2FybmluZ1VuZXhwZWN0ZWRQYXlsb2FkVXVpZFJlY2VpdmVkT25jZS5iaW5kKHRoaXMsIGNvbnRleHQsIHBheWxvYWQudXVpZCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9nV2FybmluZ1VuZXhwZWN0ZWRQYXlsb2FkVXVpZFJlY2VpdmVkT25jZShjb250ZXh0OiBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudENvbnRleHQsIHBheWxvYWRVdWlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBbJXNdIFslc10gUmVjZWl2ZWQgdW5leHBlY3RlZCBwYXlsb2FkIHdpdGggdXVpZCBbJXNdJywgY29udGV4dC5zdHJlYW1JZCwgY29udGV4dC5jb250ZXh0SWQsIGNvbnRleHQudHJhY2tJZCwgcGF5bG9hZFV1aWQpO1xuICAgIHRoaXMuX2V4cGVjdGVkUGF5bG9hZFV1aWQuYWRkKHBheWxvYWRVdWlkKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhfSBmcm9tICcuL0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudEVtaXR0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0ZW5lcnM6IFNldDwoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KSA9PiB2b2lkPiA9IG5ldyBTZXQoKTtcblxuICBwdWJsaWMgc3Vic2NyaWJlPEV2ZW50RGF0YSBleHRlbmRzIEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YT4obGlzdGVuZXI6IChldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuYWRkKGxpc3RlbmVyIGFzIDxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQ8RXZlbnREYXRhPikgPT4gdm9pZCk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGUoKCkgPT4gdGhpcy5fbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lciBhcyA8RXZlbnREYXRhIGV4dGVuZHMgRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhPihldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pID0+IHZvaWQpKTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0PEV2ZW50RGF0YSBleHRlbmRzIEVuY29kZWRNZWRpYVN0cmVhbUV2ZW50RGF0YT4oZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMuY2xlYXIoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50LCB7RW5jb2RlZE1lZGlhU3RyZWFtRXZlbnREYXRhfSBmcm9tICcuL0lFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICcuL0V2ZW50RW1pdHRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50UHVibGlzaGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRFbWl0dGVyczogTWFwPHN0cmluZyB8IG51bWJlciwgRXZlbnRFbWl0dGVyPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVyczogU2V0PDxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50VHlwZTogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pID0+IHZvaWQ+ID0gbmV3IFNldCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICBwdWJsaWMgb25FdmVudFdpdGhOb1N1YnNjcmliZXIob25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVyOiAoZXZlbnRUeXBlOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBJRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQpID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9vbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXJzLmFkZChvbkV2ZW50V2l0aE5vU3Vic2NyaWJlckhhbmRsZXIpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlKCgpID0+IHRoaXMuX29uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcnMuZGVsZXRlKG9uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcikpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZTxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50VHlwZTogc3RyaW5nIHwgbnVtYmVyLCBoYW5kbGVyOiAoZXZlbnQ6IElFbmNvZGVkTWVkaWFTdHJlYW1FdmVudDxFdmVudERhdGE+KSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gICAgY29uc3QgZW1pdHRlciA9IHRoaXMuX2V2ZW50RW1pdHRlcnMuZ2V0KGV2ZW50VHlwZSkgfHwgdGhpcy5jcmVhdGVFbWl0dGVyKGV2ZW50VHlwZSk7XG4gICAgY29uc3QgZGlzcG9zYWJsZUxpc3RlbmVyID0gZW1pdHRlci5zdWJzY3JpYmUoaGFuZGxlcik7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQoZGlzcG9zYWJsZUxpc3RlbmVyKTtcblxuICAgIHJldHVybiBkaXNwb3NhYmxlTGlzdGVuZXI7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaDxFdmVudERhdGEgZXh0ZW5kcyBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudERhdGE+KGV2ZW50VHlwZTogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PEV2ZW50RGF0YT4pOiB2b2lkIHtcbiAgICBjb25zdCBlbWl0dGVyID0gdGhpcy5fZXZlbnRFbWl0dGVycy5nZXQoZXZlbnRUeXBlKTtcblxuICAgIGlmICghZW1pdHRlcikge1xuICAgICAgdGhpcy5fb25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVycy5mb3JFYWNoKGhhbmRsZXIgPT4gaGFuZGxlcihldmVudFR5cGUsIGV2ZW50KSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbWl0dGVyLmVtaXQ8RXZlbnREYXRhPihldmVudCk7XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgdGhpcy5jbGVhblVwUmVzb3VyY2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRFbWl0dGVycy5jbGVhcigpO1xuICAgIHRoaXMuX29uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcnMuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRW1pdHRlcihldmVudFR5cGU6IHN0cmluZyB8IG51bWJlcik6IEV2ZW50RW1pdHRlciB7XG4gICAgY29uc3QgZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHRoaXMuX2V2ZW50RW1pdHRlcnMuc2V0KGV2ZW50VHlwZSwgZW1pdHRlcik7XG5cbiAgICByZXR1cm4gZW1pdHRlcjtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZW51bSBFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCB7XG4gIEVuY29kZWRWaWRlb1N0cmVhbUNodW5rID0gMCxcbiAgTmFsVW5pdCxcbiAgU2VpUGF5bG9hZCxcbiAgUGF5bG9hZCxcbiAgUGF5bG9hZFN1YnNjcmlwdGlvbixcbiAgRW5kT2ZDaHVua1xufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0RGlzY292ZXJ5VXJpID0gJ2h0dHBzOi8vcGNhc3QucGhlbml4cnRzLmNvbS9wY2FzdC9lbmRQb2ludHMnO1xuXG5leHBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZU1vZGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlTW9kZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlKTogQml0cmF0ZU1vZGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVNb2RlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLk5vcm1hbDpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Gb3JjZTpcbiAgICAgICAgcmV0dXJuICdGb3JjZSc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVNb2RlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZVN0YXRlLCBCaXRyYXRlU3RhdGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlU3RhdGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUpOiBCaXRyYXRlU3RhdGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVTdGF0ZSkge1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuS2VlcDpcbiAgICAgICAgcmV0dXJuICdLZWVwJztcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVTdGF0ZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBHbG9iYWxTY29wZS5VUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgcmV0dXJuIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlTZXJ2aWNlID0gbmV3IERpc2NvdmVyeVNlcnZpY2UodXJpKTtcbiAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9IGRpc2NvdmVyeVNlcnZpY2UuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQoKTtcbiAgICBjb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID09PSBjYWNoZWRWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgICAgIH1cbiAgICAgIH0sIGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gIH1cblxuICBzdGF0aWMgY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQodXJpOiBVUkwpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgR2xvYmFsU2NvcGUuZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PiBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpKVxuICAgIF0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCB3aXRoIG5vIGRhdGEgWyR7dXJsfV1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc1N0cmluZyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhc1N0cmluZy5zcGxpdCgnLCcpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gbmV3IEVuZFBvaW50KGVuZFBvaW50LCB0aW1lb3V0KSk7XG4gIH1cblxuICBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCh0aW1lb3V0OiBudW1iZXIgPSBkZWZhdWx0VGltZW91dCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSBEaXNjb3ZlcnlVcmkuYnVpbGREaXNjb3ZlcnlVcmwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhd2FpdCB0aGlzLmRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKG5ldyBHbG9iYWxTY29wZS5VUkwodXJsKSwgdGltZW91dCk7XG4gICAgbGV0IGZhaWxlZFJlcXVlc3RzID0gMDtcbiAgICBjb25zdCBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChmYWlsZWRSZXF1ZXN0cyA+PSBlbmRQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIHJlamVjdChgRGlzY292ZXJ5IG9mIFske2VuZFBvaW50cy5sZW5ndGh9XSBlbmRwb2ludHMgZnJvbSBbJHt1cmx9XSBmYWlsZWQsIHByZXZlbnRpbmcgaXQgZnJvbSBjb21wbGV0aW5nYCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZW5kUG9pbnQgPSBhd2FpdCBQcm9taXNlLnJhY2UoZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBlbmRQb2ludFxuICAgICAgLnBpbmcoKVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICB0aGlzLl9sb2dnZXIud2FybignRmFpbGVkIHRvIHBpbmcgZW5kIHBvaW50IFslc10nLCBlbmRQb2ludCwgZSk7XG5cbiAgICAgICAgZmFpbGVkUmVxdWVzdHMrKztcblxuICAgICAgICByZXR1cm4gcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbih0aW1lID0+IHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJlZCBlbmQgcG9pbnQgWyVzXSB3aXRoIHRpbWUgWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCksIHRpbWUpO1xuICAgICAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgICAgIHJ1bnRpbWU6IChub3cgLSBTREsucGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWUgfHwgMH0sXG4gICAgICAgICAgcmVzb3VyY2U6IGVuZFBvaW50LnRvU3RyaW5nKCksXG4gICAgICAgICAga2luZDogJ3BpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludDtcbiAgICAgIH0pKSk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gJy4uLy4uL2Vudmlyb25tZW50L1BhcmFtZXRlcnMnO1xuaW1wb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfSBmcm9tICcuLi9kZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVVyaSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kaXNjb3ZlcnlVcmk6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oZGVmYXVsdERpc2NvdmVyeVVyaSk7XG5cbiAgc3RhdGljIGdldCB1cmkoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5VXJpLl9kaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGREaXNjb3ZlcnlVcmwodXJpOiBVUkwpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IG5ldyBHbG9iYWxTY29wZS5VUkwodXJpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd2ZXJzaW9uJywgc2RrVmVyc2lvbik7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2ludGVudGlvbnMnLCBpbnRlbnRpb25zKTtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnXycsIGAke0RhdGUubm93KCl9YCk7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVJlc3BvbnNlLFxuICBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3Rcbn0gZnJvbSAnLi4vYXBpL1N1YnNjcmliZSc7XG5pbXBvcnQge0lTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QsIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlfSBmcm9tICcuLi9hcGkvU2V0UmVtb3RlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJRGVzdHJveVN0cmVhbVJlcXVlc3QsIElEZXN0cm95U3RyZWFtUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9EZXN0cm95U3RyZWFtJztcbmltcG9ydCB7SUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0LCBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlfSBmcm9tICcuLi9hcGkvQWRkSWNlQ2FuZGlkYXRlcyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZSwgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEJpdHJhdGVNb2RlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVNb2RlTWFwcGluZyc7XG5pbXBvcnQgQml0cmF0ZVN0YXRlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVTdGF0ZU1hcHBpbmcnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IHtcbiAgSVB1Ymxpc2hSZXNwb25zZSxcbiAgSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QsXG4gIFB1Ymxpc2hTdGF0dXNcbn0gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNztcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZvcmJpZGRlbi10YWcnIHwgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBEZXN0cm95U3RyZWFtU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbSB7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1YnNjcmliZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU3Vic2NyaWJlU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7XG4gIHN0YXR1czogUHVibGlzaFN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59O1xuXG5pbnRlcmZhY2UgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cztcbiAgc2Vzc2lvbkRlc2NyaXB0aW9uPzogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuaW50ZXJmYWNlIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzO1xuICBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZFBvaW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VuZFBvaW50Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VyaTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3JvdW5kVHJpcFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdGltZW91dDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSB0aW1lb3V0O1xuXG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuZCBwb2ludCByZXF1aXJlcyBhIHRpbWVvdXRgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcm91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYEVuZFBvaW50W3VyaT0ke3RoaXMuX3VyaX1dYDtcbiAgfVxuXG4gIGFzeW5jIHBpbmcoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkUGluZ1VybCgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBHbG9iYWxTY29wZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgUGluZyB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRoaXMuX3RpbWVvdXQpKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdzdWJzY3JpYmUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBTdWJzY3JpYmUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHN1YnNjcmliZSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBwdWJsaXNoKG5hbWU6IHN0cmluZywgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3B1Ymxpc2gnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIG5ldyBFcnJvcihgUHVibGlzaCB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBQdWJsaXNoU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHB1Ymxpc2ggcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtOiBJU3RyZWFtLCBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzY3JpcHRpb24nLCAncmVtb3RlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICB0eXBlOiBzZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgc2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBHbG9iYWxTY29wZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgbmV3IEVycm9yKGBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dCkpXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIEdsb2JhbFNjb3BlLmNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsaW1pdEJpdHJhdGUoXG4gICAgc3RyZWFtOiBJU3RyZWFtLFxuICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyLFxuICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IEJpdHNQZXJTZWNvbmQsXG4gICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUsXG4gICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlLFxuICApOiBQcm9taXNlPElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnYml0cmF0ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZU1hcHBpbmcuY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGUpLFxuICAgICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZSlcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgbmV3IEVycm9yKGBTZXQgbGltaXQgYml0cmF0ZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBzZXQgbGltaXQgYml0cmF0ZSByZXNwb25zZSBbJXNdIGluIFslc10gbXMnLCBzdGF0dXMsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHtzdGF0dXN9O1xuICB9XG5cbiAgYXN5bmMgYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW06IElTdHJlYW0sIGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdLCBkaXNjb3ZlcnlDb21wbGV0ZWQ6IGJvb2xlYW4sIG9wdGlvbnM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdpY2UnLCAnY2FuZGlkYXRlcyddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQsXG4gICAgICBvcHRpb25zXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBHbG9iYWxTY29wZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBuZXcgRXJyb3IoYEFkZCBpY2UgY2FuZGlkYXRlcyB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgYWRkIElDRSBjYW5kaWRhdGVzIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbShzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBHbG9iYWxTY29wZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYERlbGV0ZSBzdHJlYW0gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHN0cmVhbScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBkZXN0cm95IHN0cmVhbSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBkZXN0cm95U3RyZWFtUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW1PblVubW91bnQoc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbmF2aWdhdG9yPy5zZW5kQmVhY29uKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgbmF2aWdhdG9yLnNlbmRCZWFjb24odXJsLCBmb3JtRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVXJsKHBhdGg6IHN0cmluZ1tdKTogVVJMIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgR2xvYmFsU2NvcGUuVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgcGF0aEFzQXJyYXkgPSB1cmkucGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIHBhdGhBc0FycmF5Lmxlbmd0aCA9IHBhdGhBc0FycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICB1cmkucGF0aG5hbWUgPSBwYXRoQXNBcnJheS5jb25jYXQoLi4ucGF0aCkuam9pbignLycpO1xuXG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQaW5nVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJpID0gbmV3IEdsb2JhbFNjb3BlLlVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCd0eXBlJywgJ2h0dHAnKTtcbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgndmVyc2lvbicsIHNka1ZlcnNpb24pO1xuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCdpbnRlbnRpb25zJywgaW50ZW50aW9ucyk7XG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ18nLCBgJHtEYXRlLm5vdygpfWApO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFB1Ymxpc2hTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA2OlxuICAgICAgICByZXR1cm4gJ21pc3NpbmctY2hhbm5lbC1vci1yb29tLWlkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA0MDk6XG4gICAgICAgIHJldHVybiAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnO1xuICAgICAgY2FzZSA0MTU6XG4gICAgICAgIHJldHVybiAnZm9yYmlkZGVuLXRhZyc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFN1YnNjcmliZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDQwOTpcbiAgICAgICAgcmV0dXJuICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc7XG4gICAgICBjYXNlIDQxNTpcbiAgICAgICAgcmV0dXJuICdmb3JiaWRkZW4tdGFnJztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBEZXN0cm95U3RyZWFtU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVN1YnNjcmliZVJlc3BvbnNlO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlOiBJU3Vic2NyaWJlUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5sYWcgPSBkYXRhLmxhZztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJUHVibGlzaFJlc3BvbnNlO1xuICAgIGNvbnN0IHB1Ymxpc2hSZXNwb25zZTogSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBwdWJsaXNoUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHVibGlzaFJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7aWNlU2VydmVyczogW119O1xuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9IGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgdXJsczogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHMsXG4gICAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5O1xuICAgIH1cblxuICAgIHJldHVybiBydGNDb25maWd1cmF0aW9uO1xuICB9XG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uID0gZGF0YS5zZXNzaW9uRGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTogSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLm9wdGlvbnMpIHtcbiAgICAgICAgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElEZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbTogSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0JztcbmltcG9ydCBTZWlQYXlsb2FkIGZyb20gJy4uL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9uYWxVbml0L1NlaVBheWxvYWQnO1xuaW1wb3J0IFNlaVBheWxvYWRUeXBlIGZyb20gJy4uL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9uYWxVbml0L1NlaVBheWxvYWRUeXBlJztcbmltcG9ydCBQaWN0dXJlVGltaW5nUGFyc2VyLCB7UGljdHVyZVRpbWluZ1BhcnNpbmdDb25maWd9IGZyb20gJy4uL2RlY29kZS9iaXRzdHJlYW0vY29kZWMvaDI2NC9wYXJzZS9QaWN0dXJlVGltaW5nUGFyc2VyJztcbmltcG9ydCBCaXRzdHJlYW1EZWNvZGVycyBmcm9tICcuLi9kZWNvZGUvYml0c3RyZWFtL2RlY29kZXJzL0JpdHN0cmVhbURlY29kZXJzJztcbmltcG9ydCBIMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIGZyb20gJy4uL2RlY29kZS9iaXRzdHJlYW0vZGVjb2RlcnMvSDI2NFZpZGVvQml0c3RyZWFtRGVjb2Rlcic7XG5pbXBvcnQgSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50IGZyb20gJy4uL2RlY29kZS9ldmVudC9JRW5jb2RlZE1lZGlhU3RyZWFtRXZlbnQnO1xuaW1wb3J0IHtEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbn0gZnJvbSAnLi9GcmFtZVRpbWluZ0luZm9ybWF0aW9uJztcblxudHlwZSBGcmFtZVRpbWluZyA9IHtcbiAgbWlkOiBzdHJpbmc7XG4gIHRyYWNrSWQ6IHN0cmluZztcbiAgcmVjZWl2ZVRpbWVzdGFtcDogRGF0ZTtcbiAgZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24/OiBEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEgyNjRGcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTUFYX0ZSQU1FX1RJTUlOR19FTlRSSUVTID0gNjAgKiAzMDsgLy8gMzBzICogNjBmcHMgPSAxODAwIGVudHJpZXNcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0OiBGcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfYml0c3RyZWFtRGVjb2RlcjogSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciA9IEJpdHN0cmVhbURlY29kZXJzLmNyZWF0ZUgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXA6IE1hcDxzdHJpbmcsIEZyYW1lVGltaW5nPiA9IG5ldyBNYXAoKTtcbiAgLy8gV29ya3Mgd2l0aCBtdWx0aS1iaXRyYXRlIHN0cmVhbXMgYXMgd2UgYXJlIGluIGNvbnRyb2wgb2YgaG93IHdlIGdlbmVyYXRlIHRoZSBwaWN0dXJlIHRpbWluZyBTRUkgcGF5bG9hZHNcbiAgLy8gTWlnaHQgbm90IGFsd2F5cyB3b3JrIHdpdGggc2luZ2xlLWJpdHJhdGUgc3RyZWFtcyB3aGVuIHRoZSBjcGJEcGJEZWxheXNQcmVzZW50RmxhZyBpcyB0cnVlXG4gIC8vIFRPRE8gKE5IKTogTW9uaXRvciBTUFMgdG8gZHluYW1pY2FsbHkgc2V0IHRoZXNlIGZsYWdzXG4gIHByaXZhdGUgcmVhZG9ubHkgX3BpY3R1cmluZ1RpbWluZ1BhcnNpbmdDb25maWc6IFBpY3R1cmVUaW1pbmdQYXJzaW5nQ29uZmlnID0ge1xuICAgIGNwYkRwYkRlbGF5c1ByZXNlbnRGbGFnOiBmYWxzZSxcbiAgICBwaWNTdHJ1Y3RQcmVzZW50RmxhZzogdHJ1ZVxuICB9O1xuICBwcml2YXRlIHJlYWRvbmx5IF9waWN0dXJlVGltaW5nUGFyc2VyOiBQaWN0dXJlVGltaW5nUGFyc2VyID0gbmV3IFBpY3R1cmVUaW1pbmdQYXJzZXIoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50RGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgX2N1cnJlbnRQbGF5YmFja1N0YXRlOiAncGxheWluZycgfCAncGF1c2VkJyB8ICdzdGFsbGVkJyB8ICdlbmRlZCcgfCAnZXJyb3InIHwgJ3dhaXRpbmcnID0gJ3dhaXRpbmcnO1xuICBwcml2YXRlIF9hcm1lZFZpZGVvRnJhbWVDYWxsYmFja0lkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgX2Rpc3Bvc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dCwgZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ6IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCA9IGZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0O1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2JpdHN0cmVhbURlY29kZXIpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB0aGlzLl9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcC5jbGVhcigpKSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzKTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0dXBWaWRlb0V2ZW50TGlzdGVuZXJzKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC5zdWJzY3JpYmUodmlkZW9FbGVtZW50ID0+IHtcbiAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgICB0aGlzLnNldHVwVmlkZW9FdmVudExpc3RlbmVycyh2aWRlb0VsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIGlmICh0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZWNvZGUudmFsdWUpIHtcbiAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9iaXRzdHJlYW1EZWNvZGVyLmJpdHN0cmVhbS5zdWJzY3JpYmVUb1NlaVBheWxvYWRUeXBlKFNlaVBheWxvYWRUeXBlLlBpY3R1cmVUaW1pbmcsIHRoaXMub25QaWN0dXJlVGltaW5nRXh0cmFjdGVkLmJpbmQodGhpcykpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJvY2Vzc0ZyYW1lKHN0cmVhbUlkOiBzdHJpbmcsIG1pZDogc3RyaW5nLCB0cmFja0lkOiBzdHJpbmcsIGZyYW1lOiBSVENFbmNvZGVkVmlkZW9GcmFtZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZyYW1lVGltaW5nID0ge1xuICAgICAgbWlkLFxuICAgICAgdHJhY2tJZCxcbiAgICAgIHJlY2VpdmVUaW1lc3RhbXA6IG5ldyBEYXRlKClcbiAgICB9O1xuXG4gICAgdGhpcy5yZW1vdmVGcmFtZVRpbWluZ3NFeGNlZWRpbmdNYXhDYXBhY2l0eSgpO1xuXG4gICAgY29uc3QgcnRwVGltZXN0YW1wID0gZnJhbWUudGltZXN0YW1wLnRvU3RyaW5nKDEwKTtcblxuICAgIGlmICh0aGlzLl9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcC5oYXMocnRwVGltZXN0YW1wKSkge1xuICAgICAgLy8gVE9ETyAoTkgpOiBBZGQgYSB0aHJvdHRsZWQgbG9nIGluZGljYXRpbmcgdGhhdCBhIGZyYW1lIHRpbWluZyB3YXMgb3ZlcndyaXR0ZW5cbiAgICB9XG5cbiAgICB0aGlzLl9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcC5zZXQocnRwVGltZXN0YW1wLCBmcmFtZVRpbWluZyk7XG5cbiAgICAvLyBUT0RPIChOSCk6IFRoYXQgc2hvdWxkIGJlIGRvbmUgd2l0aGluIGEgV29ya2VyXG4gICAgLy8gTm90IHBvc3NpYmxlIHlldCBiZWNhdXNlIGl0IHdvbid0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgc2luayBhbmQgdHJhbnNmb3JtIHBpcGVsaW5lICh3ZSBjYW5ub3QgZHluYW1pY2FsbHkgaW5qZWN0IGNvZGUgaW4gYSB3b3JrZXIpXG4gICAgLy8gV2UgbmVlZCB0byByZWZpbmUgdGhlIGFyY2hpdGVjdHVyZSB0byBtYWtlIGl0IHBvc3NpYmxlXG4gICAgdGhpcy5fYml0c3RyZWFtRGVjb2Rlci5kZWNvZGUoe1xuICAgICAgY29udGV4dDoge1xuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgdHJhY2tJZCxcbiAgICAgICAgY29udGV4dElkOiBydHBUaW1lc3RhbXBcbiAgICAgIH0sXG4gICAgICBkYXRhOiBuZXcgVWludDhBcnJheShmcmFtZS5kYXRhKVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zZWQgPSB0cnVlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgb25QaWN0dXJlVGltaW5nRXh0cmFjdGVkKHtjb250ZXh0OiB7Y29udGV4dElkOiBydHBUaW1lc3RhbXAsIHRyYWNrSWR9LCBkYXRhOiBzZWlQYXlsb2FkfTogSUVuY29kZWRNZWRpYVN0cmVhbUV2ZW50PFNlaVBheWxvYWQ+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGljdHVyZVRpbWluZyA9IHRoaXMuX3BpY3R1cmVUaW1pbmdQYXJzZXIucGFyc2Uoc2VpUGF5bG9hZC5kYXRhLCB0aGlzLl9waWN0dXJpbmdUaW1pbmdQYXJzaW5nQ29uZmlnKTtcbiAgICBjb25zdCBjbG9ja1RpbWVzdGFtcCA9IHBpY3R1cmVUaW1pbmcucGljU3RydWN0Py5jbG9ja1RpbWVzdGFtcHMuZmluZChpID0+IGkuY2xvY2tUaW1lc3RhbXBGbGFnID09PSB0cnVlKT8uY2xvY2tUaW1lc3RhbXA7XG5cbiAgICBpZiAoIWNsb2NrVGltZXN0YW1wKSB7XG4gICAgICAvLyBUT0RPIChOSCk6IEFkZCBhIHRocm90dGxlZCBsb2cgaW5kaWNhdGluZyB0aGF0IG5vIGNsb2NrIHRpbWVzdGFtcCB3YXMgZm91bmRcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZyYW1lVGltaW5nID0gdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuZ2V0KHJ0cFRpbWVzdGFtcCk7XG5cbiAgICBpZiAoIWZyYW1lVGltaW5nKSB7XG4gICAgICAvLyBUT0RPIChOSCk6IEFkZCBhIHRocm90dGxlZCBsb2cgaW5kaWNhdGluZyB0aGF0IG5vIGZyYW1lIHRpbWluZyB3YXMgZm91bmRcbiAgICAgIC8vIEV4cGVjdGVkIGlmIHRoZSBjaXJjdWxhciBmcmFtZSB0aW1pbmdzIGJ1ZmZlciBpcyBmdWxsIGFuZCBhIGZyYW1lIGhhcyBiZWVuIGRyb3BwZWRcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uOiBEZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiA9IHtcbiAgICAgIG1pZDogZnJhbWVUaW1pbmcubWlkLFxuICAgICAgdHJhY2tJZCxcbiAgICAgIGtpbmQ6ICd2aWRlbycsXG4gICAgICBjb2RlYzogJ0gyNjQnLFxuICAgICAgdGltZWNvZGU6IHtcbiAgICAgICAgaG91cnM6IGNsb2NrVGltZXN0YW1wLmhvdXJzID8/IG51bGwsXG4gICAgICAgIG1pbnV0ZXM6IGNsb2NrVGltZXN0YW1wLm1pbnV0ZXMgPz8gbnVsbCxcbiAgICAgICAgc2Vjb25kczogY2xvY2tUaW1lc3RhbXAuc2Vjb25kcyA/PyBudWxsLFxuICAgICAgICBmcmFtZXM6IGNsb2NrVGltZXN0YW1wLm5GcmFtZXMsXG4gICAgICAgIGlzRnJhbWVEcm9wOiBjbG9ja1RpbWVzdGFtcC5jb3VudGluZ1R5cGUgPiAxXG4gICAgICB9LFxuICAgICAgc291cmNlVGltZXN0YW1wOiBudWxsLFxuICAgICAgaW5nZXN0VGltZXN0YW1wOiBudWxsLFxuICAgICAgZW5jb2RlVGltZXN0YW1wOiBudWxsLFxuICAgICAgdHJhbnNjb2RlVGltZXN0YW1wOiBudWxsLFxuICAgICAgcmVjZWl2ZVRpbWVzdGFtcDogbmV3IERhdGUoZnJhbWVUaW1pbmcucmVjZWl2ZVRpbWVzdGFtcCksXG4gICAgICBwbGF5YmFja1N0YXRlOiB0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZVxuICAgIH07XG5cbiAgICBmcmFtZVRpbWluZy5kZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiA9IGRlY29kZWRGcmFtZVRpbWluZ0luZm9ybWF0aW9uO1xuXG4gICAgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24udmFsdWUgPSBkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgdmlkZW9GcmFtZUNhbGxiYWNrKG5vdzogRE9NSGlnaFJlc1RpbWVTdGFtcCwgbWV0YWRhdGE6IFZpZGVvRnJhbWVDYWxsYmFja01ldGFkYXRhKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmUtcmVnaXN0ZXIgdGhlIGNhbGxiYWNrIHRvIGVuc3VyZSBpdCdzIGNhbGxlZCBhZ2FpblxuICAgIHRoaXMuYXJtVmlkZW9GcmFtZUNhbGxiYWNrKCk7XG5cbiAgICBjb25zdCBydHBUaW1lc3RhbXAgPSBtZXRhZGF0YS5ydHBUaW1lc3RhbXA7XG5cbiAgICBpZiAoIXJ0cFRpbWVzdGFtcCkge1xuICAgICAgLy8gVE9ETyAoTkgpOiBBZGQgYSB0aHJvdHRsZWQgbG9nIGluZGljYXRpbmcgdGhhdCBubyBSVFAgdGltZXN0YW1wIHdhcyBmb3VuZFxuICAgICAgLy8gVGhlIHNwZWNpZmljYXRpb24gc2F5cyB0aGF0IGl0J3MgbnVsbGFibGUsIGJ1dCB3ZSBhbHdheXMgaGF2ZSBpdCBpbiBhIFdlYlJUQyBjb250ZXh0XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lc3RhbXBzVG9EZWxldGU6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFt0aW1lc3RhbXAsIGZyYW1lVGltaW5nXSBvZiB0aGlzLl9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcCkge1xuICAgICAgaWYgKHBhcnNlSW50KHRpbWVzdGFtcCwgMTApID4gcnRwVGltZXN0YW1wKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY3VycmVudFBsYXliYWNrU3RhdGUgPT09ICdwbGF5aW5nJykge1xuICAgICAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5yZW5kZXJlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24udmFsdWUgPSB7XG4gICAgICAgICAgLi4uZnJhbWVUaW1pbmcuZGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24hLFxuICAgICAgICAgIHJlbmRlclRpbWVzdGFtcDogbmV3IERhdGUocGVyZm9ybWFuY2UudGltZU9yaWdpbiArIG5vdyksXG4gICAgICAgICAgcGxheWJhY2tTdGF0ZTogJ3BsYXlpbmcnXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHRpbWVzdGFtcHNUb0RlbGV0ZS5wdXNoKHRpbWVzdGFtcCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0aW1lc3RhbXAgb2YgdGltZXN0YW1wc1RvRGVsZXRlKSB7XG4gICAgICB0aGlzLl9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcC5kZWxldGUodGltZXN0YW1wKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUZyYW1lVGltaW5nc0V4Y2VlZGluZ01heENhcGFjaXR5KCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnRzVG9EZWxldGUgPSB0aGlzLl9mcmFtZVRpbWluZ3NCeVJ0cFRpbWVzdGFtcC5zaXplIC0gKEgyNjRGcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlci5NQVhfRlJBTUVfVElNSU5HX0VOVFJJRVMgLSAxKTtcblxuICAgIGlmIChlbGVtZW50c1RvRGVsZXRlIDw9IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMuX2ZyYW1lVGltaW5nc0J5UnRwVGltZXN0YW1wLmtleXMoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHNUb0RlbGV0ZTsgaSsrKSB7XG4gICAgICBjb25zdCBrZXlUb0RlbGV0ZSA9IGl0ZXJhdG9yLm5leHQoKS52YWx1ZTtcblxuICAgICAgdGhpcy5fZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAuZGVsZXRlKGtleVRvRGVsZXRlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwVmlkZW9FdmVudExpc3RlbmVycyh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBvblBsYXlpbmcgPSAoKSA9PiB0aGlzLl9jdXJyZW50UGxheWJhY2tTdGF0ZSA9ICdwbGF5aW5nJztcblxuICAgIHZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgb25QbGF5aW5nKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4gdmlkZW9FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCBvblBsYXlpbmcpKSk7XG5cbiAgICBjb25zdCBvblBhdXNlID0gKCkgPT4gdGhpcy5fY3VycmVudFBsYXliYWNrU3RhdGUgPSAncGF1c2VkJztcblxuICAgIHZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIG9uUGF1c2UpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB2aWRlb0VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGF1c2UnLCBvblBhdXNlKSkpO1xuXG4gICAgY29uc3Qgb25TdGFsbGVkID0gKCkgPT4gdGhpcy5fY3VycmVudFBsYXliYWNrU3RhdGUgPSAnc3RhbGxlZCc7XG5cbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIG9uU3RhbGxlZCk7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHZpZGVvRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgb25TdGFsbGVkKSkpO1xuXG4gICAgY29uc3Qgb25XYWl0aW5nID0gKCkgPT4gdGhpcy5fY3VycmVudFBsYXliYWNrU3RhdGUgPSAnd2FpdGluZyc7XG5cbiAgICB2aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2FpdGluZycsIG9uV2FpdGluZyk7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHZpZGVvRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd3YWl0aW5nJywgb25XYWl0aW5nKSkpO1xuXG4gICAgY29uc3Qgb25FbmRlZCA9ICgpID0+IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID0gJ2VuZGVkJztcblxuICAgIHZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIG9uRW5kZWQpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB2aWRlb0VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZW5kZWQnLCBvbkVuZGVkKSkpO1xuXG4gICAgY29uc3Qgb25FcnJvciA9ICgpID0+IHRoaXMuX2N1cnJlbnRQbGF5YmFja1N0YXRlID0gJ2Vycm9yJztcblxuICAgIHZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB2aWRlb0VsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKSkpO1xuXG4gICAgdGhpcy5hcm1WaWRlb0ZyYW1lQ2FsbGJhY2soKTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnREaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2FybWVkVmlkZW9GcmFtZUNhbGxiYWNrSWQpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlPy5jYW5jZWxWaWRlb0ZyYW1lQ2FsbGJhY2sodGhpcy5fYXJtZWRWaWRlb0ZyYW1lQ2FsbGJhY2tJZCk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcm1WaWRlb0ZyYW1lQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgdGhpcy5fYXJtZWRWaWRlb0ZyYW1lQ2FsbGJhY2tJZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZT8ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayh0aGlzLnZpZGVvRnJhbWVDYWxsYmFjay5iaW5kKHRoaXMpKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuaW1wb3J0IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUgZnJvbSAnLi9DaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2h1bmtlZFN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2h1bmtlZFN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NodW5rZWRTdHJlYW1QbGF5YmFja01vZGU6IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vbml0b3JEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9zdHJlYW1TdGF0aXN0aWNzOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgcHJpdmF0ZSBfbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQsIGNodW5rZWRTdHJlYW1QbGF5YmFja01vZGU6IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX2NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUgPSBjaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlO1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZCh0aGlzKTtcbiAgfVxuXG4gIHN0YXJ0KHVyaTogVVJMLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkIHwgSURpc3Bvc2FibGU+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKVxuICAgICAgLnRoZW4oZW5kUG9pbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbnVsbCwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2ZmZXJTZHAgPSBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICBvcmlnaW5TdGFydFRpbWU6IERhdGUubm93KCkgLSBsYWcgKyB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gMixcbiAgICAgICAgICBsYWdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gQ2h1bmtlZFN0cmVhbWluZy5zdGFydCh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBvZmZlclNkcCwgb3B0aW9ucylcbiAgICAgICAgICAudGhlbihwbGF5ZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG5cbiAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChwbGF5ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGxheWVyO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDaHVua2VkU3RyZWFtaW5nIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb25pdG9yKHBsYXllcjogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgbmV3U3RyZWFtU3RhdGlzdGljcyA9IENodW5rZWRTdHJlYW1pbmcuZ2V0U3RhdHMoKTtcblxuICAgICAgaWYgKHRoaXMuX2NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUgPT09IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUuTGl2ZVxuICAgICAgICAgICYmIG5ld1N0cmVhbVN0YXRpc3RpY3MubmV0d29ya1N0YXRlID09PSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgICAgICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5jdXJyZW50VGltZSA9PT0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmR1cmF0aW9uXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBlbmQgb2Ygc3RyZWFtJywgZSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc3RyZWFtU3RhdGlzdGljcyAmJlxuICAgICAgICAhdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmN1cnJlbnRUaW1lID49IG5ld1N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgJiZcbiAgICAgICAgICAodGhpcy5fc3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgfHwgIW5ld1N0cmVhbVN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQrKztcblxuICAgICAgICBpZiAodGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA+IDQpIHtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MgPSBuZXdTdHJlYW1TdGF0aXN0aWNzO1xuXG4gICAgICB0aGlzLm1vbml0b3IocGxheWVyKTtcbiAgICB9LCAxMDAwKTtcblxuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSB7XG4gICAgTGl2ZSA9IDEsXG4gICAgT25kRGVtYW5kID0gMlxufVxuXG5leHBvcnQgZGVmYXVsdCBDaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBXZWJQbGF5ZXIgZnJvbSAnLi9XZWJQbGF5ZXInO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IFNoYWthUGxheWVyIGZyb20gJy4vU2hha2FQbGF5ZXInO1xuaW1wb3J0IEhsc1BsYXllciBmcm9tICcuL0hsc1BsYXllcic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQge0hsc1BsYXllclR5cGUsIENodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcywgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcblxuZXhwb3J0IGNsYXNzIENodW5rZWRTdHJlYW1pbmcge1xuICBwcml2YXRlIHN0YXRpYyBfcGVuZGluZyA9IGZhbHNlO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzUGxheWVyOiBIbHNQbGF5ZXJUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfcGhlbml4V2ViUGxheWVyOiBXZWJQbGF5ZXJUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2E6IFNoYWthVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIHN0YXRpYyBfcGxheWVyOiBTaGFrYVBsYXllciB8IFdlYlBsYXllciB8IEhsc1BsYXllcjtcblxuICBzdGF0aWMgZ2V0IGhsc1BsYXllcigpOiBIbHNQbGF5ZXJUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5faGxzUGxheWVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBwaGVuaXhXZWJQbGF5ZXIoKTogV2ViUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BoZW5peFdlYlBsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2EoKTogU2hha2FUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2hha2E7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgc3RhcnQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucyk6IFByb21pc2U8SURpc3Bvc2FibGU+IHtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcblxuICAgIGlmICh0aGlzLl9obHNQbGF5ZXIgfHwgdGhpcy5fc2hha2EgfHwgdGhpcy5fcGhlbml4V2ViUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkZWQodmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHApO1xuICAgIH1cblxuICAgIGlmICghU0RLLndlYlBsYXllckxvYWRlciAmJiAhU0RLLnNoYWthUGxheWVyTG9hZGVyICYmICFTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQtZmVhdHVyZSwgYWRkIHN0cmVhbSBwbGF5ZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsuaGxzSnNMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9obHNQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy53ZWJQbGF5ZXJMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9waGVuaXhXZWJQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLnNoYWthUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fc2hha2EgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgcGxheShQbGF5ZXI6IHR5cGVvZiBXZWJQbGF5ZXIgfCB0eXBlb2YgU2hha2FQbGF5ZXIgfCB0eXBlb2YgSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKTogUHJvbWlzZTxJRGlzcG9zYWJsZT4ge1xuICAgIGNvbnN0IGRhc2hNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW1wZFxcPz9bXlxcc10qKS9tKTtcbiAgICBjb25zdCBobHNNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW0zdThcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgbWFuaWZlc3RVcmwgPSBkYXNoTWFuaWZlc3RVcmxNYXRjaCAmJiBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA/IGRhc2hNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG4gICAgY29uc3QgcGxheWxpc3RVcmwgPSBobHNNYW5pZmVzdFVybE1hdGNoICYmIGhsc01hbmlmZXN0VXJsTWF0Y2hbMV0gPyBobHNNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG5cbiAgICBpZiAocGxheWxpc3RVcmwpIHtcbiAgICAgIGlmICghdGhpcy5fcGhlbml4V2ViUGxheWVyIHx8IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhscykge1xuICAgICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2hscycsIHN0cmVhbUlkLCBwbGF5bGlzdFVybCwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWFuaWZlc3RVcmwpIHtcbiAgICAgIGlmICghdGhpcy5faGxzUGxheWVyICYmICEodGhpcy5fcGhlbml4V2ViUGxheWVyICYmIEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhscykpIHtcbiAgICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdkYXNoJywgc3RyZWFtSWQsIG1hbmlmZXN0VXJsLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYW5pZmVzdFVybCB8fCBwbGF5bGlzdFVybCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBbJHtzdHJlYW1JZH1dIENhbm5vdCBwbGF5IFske3BsYXlsaXN0VXJsID8gJ0hMUycgOiAnREFTSCd9XSBzdHJlYW0gd2l0aCBpbmNsdWRlZCBwbGF5ZXJgKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHN0cmVhbSBwbGF5bGlzdCBmb3VuZCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZGVkKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZyk6IFByb21pc2U8SURpc3Bvc2FibGU+IHtcbiAgICBpZiAoIXRoaXMuX3NoYWthICYmICF0aGlzLl9waGVuaXhXZWJQbGF5ZXIgJiYgIXRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShXZWJQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2hha2EpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoU2hha2FQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ30gZnJvbSAnLi9DaHVua2VkU3RyZWFtaW5nJztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ09wdGlvbnMsIENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7SUhsc1BsYXllclR5cGV9IGZyb20gJy4vSUhsc1BsYXllcic7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhsc1BsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJSGxzUGxheWVyVHlwZTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllcikge1xuICAgICAgaWYgKENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgICAgdGhpcy5fcGxheWVyID0gbmV3IENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyKHtcbiAgICAgICAgICBlbmFibGVXb3JrZXI6IHRydWUsXG4gICAgICAgICAgbWF4QnVmZmVyTGVuZ3RoOiAxLFxuICAgICAgICAgIGJhY2tCdWZmZXJMZW5ndGg6IDAsXG4gICAgICAgICAgbGl2ZVN5bmNEdXJhdGlvbjogNyxcbiAgICAgICAgICBsaXZlRHVyYXRpb25JbmZpbml0eTogdHJ1ZSxcbiAgICAgICAgICBsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uOiBJbmZpbml0eSxcbiAgICAgICAgICBoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2Q6IDFcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5sb2FkU291cmNlKHRoaXMuX21hbmlmZXN0VVJJKTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmF0dGFjaE1lZGlhKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnKSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQuc3JjID0gdGhpcy5fbWFuaWZlc3RVUkk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyICYmIENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCk7XG4gIH1cblxuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICB3aWR0aDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldFdpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0SGVpZ2h0LFxuICAgICAgY3VycmVudFRpbWU6IHRoaXMuX3BsYXllci5tZWRpYS5jdXJyZW50VGltZSxcbiAgICAgIGxhZzogMC4wLFxuICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlLFxuICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnSURMRScpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRVJST1InIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRU5ERUQnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ0xPQURJTkcnKSB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnV0FJVElORycpKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgKGN1cnJlbnRUaW1lICsgKHRoaXMuX29wdGlvbnMubGFnIC8gMTAwMCkpIC0gdHJ1ZUN1cnJlbnRUaW1lKTtcblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyICYmIHRoaXMuX3BsYXllci5kZXN0cm95KSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZW51bSBOZXR3b3JrU3RhdGVzIHtcbiAgTmV0d29ya0VtcHR5LFxuICBOZXR3b3JrSWRsZSxcbiAgTmV0d29ya0xvYWRpbmcsXG4gIE5ldHdvcmtOb1NvdXJjZVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCB7U2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGZyb20gJy4uLy4uL3J0Yy9QZWVyQ29ubmVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgUnRjQ29ubmVjdGlvbk1vbml0b3IgZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25maWd1cmF0aW9uTWFuYWdlcic7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9GcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCc7XG5pbXBvcnQgSDI2NEZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyIGZyb20gJy4uL2ZyYW1lVGltaW5nL0gyNjRGcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlcic7XG5pbXBvcnQgSW5zZXJ0YWJsZVN0cmVhbXMgZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMnO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuLi8uLi9ydGMvU2RwUGFyc2VyJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcblxuY29uc3QgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwgPSAxMDA7XG5jb25zdCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0ID0gMzAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWxUaW1lU3RyZWFtIGltcGxlbWVudHMgSVN0cmVhbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdSZWFsVGltZVN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDogRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDogRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IHBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0ID0gc3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCA9IGZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0O1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKHRoaXMpO1xuICB9XG5cbiAgc3RhcnQodXJpLCB0b2tlbiwgbGlzdGVuT25TdHJlYW1TZXR1cCwgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXF1aXJlc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlXG4gICAgICB8fCB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5zaG91bGRFeHRyYWN0VGltZWNvZGUudmFsdWVcbiAgICAgIHx8IHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lc3RhbXBzLnZhbHVlO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigncmVjdm9ubHknLCByZXF1aXJlc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcylcbiAgICAgICAgLnRoZW4oKHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn0pID0+IHtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsb2NhbE9mZmVyLFxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb25cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgIF0pXG4gICAgICAudGhlbigoW2VuZFBvaW50LCB7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259XSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdMb2NhbCBvZmZlcjpcXG4nICsgbG9jYWxPZmZlci5zZHApO1xuXG4gICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uZGlzcG9zZSgpO1xuXG4gICAgICAgICAgaWYgKFNESy5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ICYmICEoRmVhdHVyZUVuYWJsZW1lbnQuaXNNb2JpbGUgJiYgU0RLLnNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcykpIHtcbiAgICAgICAgICAgIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgbG9jYWxPZmZlciA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW5kUG9pbnQuc3Vic2NyaWJlKHRva2VuLCBsb2NhbE9mZmVyLCB0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCh7c3RhdHVzLCBzdHJlYW0sIHJ0Y0NvbmZpZ3VyYXRpb24sIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSwgbGFnfSkgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBzdHJlYW07XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxhZy52YWx1ZSA9IGxhZztcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQoKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAgICAgJ1slc10gU3Vic2NyaWJlIGNvbXBsZXRlZCBbJXNdIFslal0gWyVqXSBbJWpdIFslal0nLFxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICBydGNDb25maWd1cmF0aW9uLFxuICAgICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2VcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5UnRjQ29uZmlndXJhdGlvbih0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUsIHJ0Y0NvbmZpZ3VyYXRpb24pXG4gICAgICAgICAgLnRoZW4ocGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICAgICAgbGV0IHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0O1xuICAgICAgICAgICAgbGV0IGNhbmNlbERpc2NvdmVyeSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGRpc2NvdmVyeUNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlczogUlRDSWNlQ2FuZGlkYXRlW10gPSBbXTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gKGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuc2VuZExvY2FsQ2FuZGlkYXRlcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlLmNhbmRpZGF0ZSAmJiBlLmNhbmRpZGF0ZS5jYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2goZS5jYW5kaWRhdGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpc2NvdmVyeUNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIXN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW0sIGNhbmRpZGF0ZXMsIGRpc2NvdmVyeUNvbXBsZXRlZClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHtzdGF0dXMsIG9wdGlvbnN9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gRmFpbGVkIHRvIGFkZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlcygnY2FuY2VsJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbERpc2NvdmVyeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gQWRkZWQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXSBhbmQgb3B0aW9ucyBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHN0YXR1cywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGFkZCBJQ0UgY2FuZGlkYXRlcycsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSwgaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSAhPT0gcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIHN0b3Agbm9ybWFsbHkgdGhlIHBlZXIgY29ubmVjdGlvbiBpcyB1bnJlZ2lzdGVyZWQgZmlyc3QuXG4gICAgICAgICAgICAgICAgLy8gVGh1cyBhbnl0aW1lIHdlIHNlZSBhIGNsb3NlZCBwZWVyIGNvbm5lY3Rpb24gdGhhdCBpcyBzdGlsbCB2YWxpZCwgaXQgaXMgYW4gZXJyb3IuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgcGVlciBjb25uZWN0aW9uIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgc3dpdGNoIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjaGVja2luZyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ25ldyc6XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkaXNjb25uZWN0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICAgICAgICBpZiAoR2xvYmFsU2NvcGUubmF2aWdhdG9ySXNPbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gSUNFIGNvbm5lY3Rpb24gc3RhdGUgY2hhbmdlZCB0byBbJXNdLCB0cnlpbmcgdG8gcmVjb25uZWN0JywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnY2xvc2VkJzpcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgcmV0cnlpbmcgdG8gY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW1Qcm9taXNlID0gbmV3IFByb21pc2U8TWVkaWFTdHJlYW0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFGZWF0dXJlRW5hYmxlbWVudC5vblRyYWNrRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSksIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub250cmFjayA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW1zWzBdKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgdHJhY2tMaXN0ZW5lciA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgICAgIEdsb2JhbFNjb3BlLmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWRkc3RyZWFtJywgdHJhY2tMaXN0ZW5lcik7XG5cbiAgICAgICAgICAgICAgICBpZiAoZS5zdHJlYW1zKSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZS5zdHJlYW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1N0cmVhbSBzZXR1cCB0aW1lZCBvdXQnKSk7XG4gICAgICAgICAgICAgIH0sIGRlZmF1bHRTdHJlYW1TZXR1cFRpbWVvdXQpO1xuXG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYWNrJywgdHJhY2tMaXN0ZW5lcik7XG4gICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IGxvY2FsIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IHJlbW90ZSBTRFAgYW5zd2VyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIG9mZmVyIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHApO1xuXG4gICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoe1xuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZUF1ZGlvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGFuc3dlciA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgbG9jYWwgU0RQIGFuc3dlciBbJWpdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGFuc3dlcik7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5zZXRSZW1vdGVEZXNjcmlwdGlvbihzdHJlYW0sIGFuc3dlcik7XG4gICAgICAgICAgICAgICAgfSkudGhlbigoe3N0YXR1cywgc2Vzc2lvbkRlc2NyaXB0aW9ufSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNlc3Npb25EZXNjcmlwdGlvbiwgZS5tZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuc3VjY2Vzcyh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG1lZGlhU3RyZWFtUHJvbWlzZTtcbiAgICAgICAgICAgIH0pLnRoZW4obWVkaWFTdHJlYW0gPT4ge1xuICAgICAgICAgICAgICBpZiAocmVxdWlyZXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbiA9IG5ldyBTZHBQYXJzZXIocGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZXJzID0gcGVlckNvbm5lY3Rpb24uZ2V0UmVjZWl2ZXJzKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qge2Rpc3Bvc2FibGVzLCBlbmNvZGVkVmlkZW9GcmFtZX0gPSBJbnNlcnRhYmxlU3RyZWFtcy5jb25maWd1cmVFbmNvZGVkU3RyZWFtUGlwZWxpbmUobWVkaWFTdHJlYW0sIHJlY2VpdmVycywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmssIHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLnZpZGVvQ29kZWMsIHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLmF1ZGlvQ29kZWMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiA9IHBhcnNlZFJlbW90ZURlc2NyaXB0aW9uLnZpZGVvQ29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnXG4gICAgICAgICAgICAgICAgICAmJiAodGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQuc2hvdWxkRXh0cmFjdFRpbWVjb2RlLnZhbHVlIHx8IHRoaXMuX2ZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LnNob3VsZEV4dHJhY3RUaW1lc3RhbXBzLnZhbHVlKTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlc0ZyYW1lVGltaW5nSW5mb3JtYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyID0gbmV3IEgyNjRGcmFtZVRpbWluZ0luZm9ybWF0aW9uTWFuYWdlcih0aGlzLl9jaGFubmVsQ29udGV4dCwgdGhpcy5fZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQpO1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQoZnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIpO1xuXG4gICAgICAgICAgICAgICAgICBtZWRpYVN0cmVhbS5nZXRWaWRlb1RyYWNrcygpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBCb3RoIGFyZSBleHBlY3RlZCB0byBiZSBwcmVzZW50LCBidXQgdGhlIHR5cGUgc3lzdGVtIG1ha2VzIHRoZW0gbnVsbGFibGUsIHNvIHdlIGhhdmUgdG8gYXNzZXJ0IHRoZSBwcmVzZW5jZVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVyID0gcmVjZWl2ZXJzLmZpbHRlcihyZWNlaXZlciA9PiByZWNlaXZlci50cmFjayA9PT0gdHJhY2spWzBdO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFBsYXRmb3JtIHN1cHBvcnRpbmcgZnJhbWUgdGltaW5nIGluZm9ybWF0aW9uIHNob3VsZCBhbHNvIHN1cHBvcnQgZ2V0VHJhbnNjZWl2ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWlkID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRUcmFuc2NlaXZlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcGVlckNvbm5lY3Rpb24uZ2V0VHJhbnNjZWl2ZXJzKCkuZmlsdGVyKHRyYW5zY2VpdmVyID0+IHRyYW5zY2VpdmVyLnJlY2VpdmVyID09PSByZWNlaXZlcilbMF0/Lm1pZFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWNlaXZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gU2tpcHBpbmcgZnJhbWUgdGltaW5nIGluZm9ybWF0aW9uIGZvciB0cmFjayBbJXNdIGJlY2F1c2Ugbm8gcmVjZWl2ZXIgd2FzIGZvdW5kJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHRyYWNrLmlkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmICghbWlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBTa2lwcGluZyBmcmFtZSB0aW1pbmcgaW5mb3JtYXRpb24gZm9yIHRyYWNrIFslc10gYmVjYXVzZSBubyBtaWQgd2FzIGZvdW5kJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHRyYWNrLmlkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChlbmNvZGVkVmlkZW9GcmFtZS5zdWJzY3JpYmUoZW5jb2RlZFZpZGVvRnJhbWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuY29kZWRWaWRlb0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lVGltaW5nSW5mb3JtYXRpb25NYW5hZ2VyLnByb2Nlc3NGcmFtZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgbWlkLCBlbmNvZGVkVmlkZW9GcmFtZS50cmFjay5pZCwgZW5jb2RlZFZpZGVvRnJhbWUuY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dC5pc0VuYWJsZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQoZGlzcG9zYWJsZXMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7dHJhbnNmb3JtZWRTdHJlYW0sIGRpc3Bvc2FibGVzfSA9IEluc2VydGFibGVTdHJlYW1zLmNvbmZpZ3VyZUluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1hdGlvbihtZWRpYVN0cmVhbSwgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKGRpc3Bvc2FibGVzKTtcbiAgICAgICAgICAgICAgICBtZWRpYVN0cmVhbSA9IHRyYW5zZm9ybWVkU3RyZWFtO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbWVkaWFTdHJlYW07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3IgPSBuZXcgUnRjQ29ubmVjdGlvbk1vbml0b3IocGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtLCB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gNCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvclN0YXRpc3RpY1N1YnNjcmlwdGlvbiA9IHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLnJ0Y1N0YXRpc3RpYy5zdWJzY3JpYmUoc3RhdGlzdGljcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjU3RhdGlzdGljcy52YWx1ZSA9IHN0YXRpc3RpY3M7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmICF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLmF1ZGlvO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGF1ZGlvVHJhY2tGYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgdmlkZW9UcmFja0ZhaWxlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MuYXVkaW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1ZGlvVHJhY2tGYWlsZWQgJiYgR2xvYmFsU2NvcGUubmF2aWdhdG9ySXNPbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEF1ZGlvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCAmJiBHbG9iYWxTY29wZS5uYXZpZ2F0b3JJc09uTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gVmlkZW8gdHJhY2sgZmFpbGVkIHdpdGggbGFzdCBieXRlc1JlY2VpdmVkIFslc10gaXMgZXF1YWwgdG8gcHJldmlvdXMgYnl0ZXNSZWNlaXZlZCBbJXNdIHdpdGhpbiBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy52aWRlby5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEdXJhdGlvbnMoc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXAgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXApLnRvSXNvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMgPSBzdGF0aXN0aWNzLnZpZGVvO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghR2xvYmFsU2NvcGUubmF2aWdhdG9ySXNPbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLk9mZmxpbmU7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCB8fCBhdWRpb1RyYWNrRmFpbGVkKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXRyeUNhbGxiYWNrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBydGNDb25uZWN0aW9uTW9uaXRvci5kaXNwb3NlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHRyYWNrIHN0b3BwZWQgd2l0aCBzdGF0ZSBbJXNdJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLk9mZmxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPyBDaGFubmVsU3RhdGUuUGxheWluZyA6IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBzdGF0ZSByZXN0b3JlZCB0byBbJXNdIGFmdGVyIHJlY29ubmVjdGluZycsIENoYW5uZWxTdGF0ZVt0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yU3RhdGlzdGljU3Vic2NyaXB0aW9uKTtcblxuICAgICAgICAgICAgICBpZiAoIVNESy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXBwbHlSdGNDb25maWd1cmF0aW9uKFxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiB8IG51bGwsXG4gICAgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgaWYgKCFvcHRpb25hbFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uID0gUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHJ1bmNhdGVJY2VTZXJ2ZXJzKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm4gU0RLLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25maWd1cmF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdSdGNDb25maWd1cmF0aW9uID0ge1xuICAgICAgLi4ub3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCksXG4gICAgICAuLi5ydGNDb25maWd1cmF0aW9uXG4gICAgfTtcblxuICAgIG9wdGlvbmFsUGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbihuZXdSdGNDb25maWd1cmF0aW9uKTtcblxuICAgIHJldHVybiBvcHRpb25hbFBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgaWYgKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc7XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPCBTREsubWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyB8fCAhU0RLLmF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMrKztcblxuICAgICAgY29uc3QgaXNDbGllbnRPZmZlckZsb3cgPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbj8udHlwZSA9PT0gJ29mZmVyJztcblxuICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFpc0NsaWVudE9mZmVyRmxvd1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JlY29ubmVjdGluZyBwZWVyIGNvbm5lY3Rpb24gYnkgcmVzdGFydGluZyBJQ0UnKTtcblxuICAgICAgY29uc3QgY3VycmVudExvY2FsRGVzY3JpcHRpb24gPSBwZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih7aWNlUmVzdGFydDogdHJ1ZX0pLnRoZW4ob2ZmZXIgPT4ge1xuICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihvZmZlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oY3VycmVudExvY2FsRGVzY3JpcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uJywgZSk7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gYWZ0ZXIgWyVzXSBhdHRlbXB0cywgcGVyZm9ybWluZyBmdWxsIHJlY292ZXJ5JywgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMpO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICByZXRyeUNhbGxiYWNrKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG50eXBlIFNoYWthT3B0aW9ucyA9IHtcbiAgYWJyOiB7XG4gICAgZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiBudW1iZXI7XG4gIH07XG4gIG1hbmlmZXN0OiB7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgc3RyZWFtaW5nOiB7XG4gICAgbGl2ZVN5bmNQYW5pY1RocmVzaG9sZDogbnVtYmVyO1xuICAgIGJ1ZmZlcmluZ0dvYWw6IG51bWJlcjtcbiAgICBidWZmZXJCZWhpbmQ6IG51bWJlcjtcbiAgICByZXRyeVBhcmFtZXRlcnM6IHtcbiAgICAgIHRpbWVvdXQ6IG51bWJlcjtcbiAgICAgIG1heEF0dGVtcHRzOiBudW1iZXI7XG4gICAgICBiYWNrb2ZmRmFjdG9yOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNoYWthIHtcbiAgY29uZmlndXJlOiAobzogU2hha2FPcHRpb25zKSA9PiB2b2lkO1xuICBsb2FkOiAodXJpOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIGdldFN0YXRzOiAoKSA9PiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgZGVzdHJveTogKCkgPT4gdm9pZDtcbiAgdW5sb2FkOiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFrYVBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTaGFrYVBsYXllcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vbml0b3JlZFN0YXRpc3RpY3M6IHtcbiAgICBlc3RpbWF0ZWRCYW5kd2lkdGg6IG51bWJlcjtcbiAgICBwbGF5VGltZTogbnVtYmVyO1xuICB9O1xuICBwcml2YXRlIF9wbGF5ZXI6IElTaGFrYTtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLl9tb25pdG9yZWRTdGF0aXN0aWNzID0ge1xuICAgICAgZXN0aW1hdGVkQmFuZHdpZHRoOiAwLFxuICAgICAgcGxheVRpbWU6IDBcbiAgICB9O1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKENodW5rZWRTdHJlYW1pbmcuc2hha2EpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnM6IFNoYWthT3B0aW9ucyA9IHtcbiAgICAgICAgYWJyOiB7ZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiAyMDAwMDAwfSxcbiAgICAgICAgbWFuaWZlc3Q6IHtyZXRyeVBhcmFtZXRlcnM6IHt0aW1lb3V0OiAxMDAwMH19LFxuICAgICAgICBzdHJlYW1pbmc6IHtcbiAgICAgICAgICBsaXZlU3luY1BhbmljVGhyZXNob2xkOiAxLFxuICAgICAgICAgIGJ1ZmZlcmluZ0dvYWw6IDYwLFxuICAgICAgICAgIGJ1ZmZlckJlaGluZDogMzAsXG4gICAgICAgICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgICAgICAgIG1heEF0dGVtcHRzOiAxMCxcbiAgICAgICAgICAgIGJhY2tvZmZGYWN0b3I6IDEuMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IENodW5rZWRTdHJlYW1pbmcuc2hha2EuUGxheWVyKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB0aGlzLmxvYWRQbGF5ZXIocGxheWVyT3B0aW9ucyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgICBsYWc6IDAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHtcbiAgICAgIC4uLnRoaXMuX3BsYXllci5nZXRTdGF0cygpLFxuICAgICAgY3VycmVudFRpbWU6IDAsXG4gICAgICBsYWc6IDBcbiAgICB9O1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudCkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBsYWc7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoID4gMCAmJiB0aGlzLl9tb25pdG9yZWRTdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA8IHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCAmJiB0aGlzLl9tb25pdG9yZWRTdGF0aXN0aWNzLnBsYXlUaW1lIDwgc3RhdGlzdGljcy5wbGF5VGltZSkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICB0aGlzLl9tb25pdG9yZWRTdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA9IHN0YXRpc3RpY3MuZXN0aW1hdGVkQmFuZHdpZHRoO1xuICAgIHRoaXMuX21vbml0b3JlZFN0YXRpc3RpY3MucGxheVRpbWUgPSBzdGF0aXN0aWNzLnBsYXlUaW1lO1xuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci51bmxvYWQoKTtcbiAgICAgIHRoaXMuX3BsYXllci5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFBsYXllcihwbGF5ZXJDb25maWc6IFNoYWthT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BsYXllci5jb25maWd1cmUocGxheWVyQ29uZmlnKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9wbGF5ZXIubG9hZCh0aGlzLl9tYW5pZmVzdFVSSSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEQVNIIGxpdmUgc3RyZWFtIGhhcyBiZWVuIGxvYWRlZCcsIHRoaXMuX3N0cmVhbUlkKTtcblxuICAgICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KSB7XG4gICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KCk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRXJyb3Igd2hpbGUgbG9hZGluZyBEQVNIIGxpdmUgc3RyZWFtIFslc10nLCB0aGlzLl9zdHJlYW1JZCwgZS5jb2RlLCBlKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IEVkZ2VBdXRoUGFyc2VyIGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VkZ2VBdXRoUGFyc2VyJztcbmltcG9ydCBDaHVua2VkU3RyZWFtIGZyb20gJy4vQ2h1bmtlZFN0cmVhbSc7XG5pbXBvcnQgUmVhbFRpbWVTdHJlYW0gZnJvbSAnLi9SZWFsVGltZVN0cmVhbSc7XG5pbXBvcnQgQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSBmcm9tICcuL0NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUnO1xuaW1wb3J0IENoYW5uZWxDb250ZXh0IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQnO1xuaW1wb3J0IEZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1GYWN0b3J5IHtcbiAgc3RhdGljIGNyZWF0ZSh0b2tlbjogc3RyaW5nLCBjaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dDogUGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0OiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBmcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dDogRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pOiBJU3RyZWFtIHtcbiAgICBjb25zdCB0b2tlbkNhcGFiaWxpdGllcyA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLmNhcGFiaWxpdGllcztcbiAgICBjb25zdCBoYXNTdHJlYW1pbmcgPSB0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygnc3RyZWFtaW5nJyk7XG4gICAgY29uc3QgaGFzT25EZW1hbmQgPSB0b2tlbkNhcGFiaWxpdGllcy5pbmNsdWRlcygnb24tZGVtYW5kJyk7XG5cbiAgICBpZiAoaGFzU3RyZWFtaW5nIHx8IGhhc09uRGVtYW5kKSB7XG4gICAgICByZXR1cm4gbmV3IENodW5rZWRTdHJlYW0oY2hhbm5lbENvbnRleHQsICFoYXNPbkRlbWFuZCA/IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUuTGl2ZSA6IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUuT25kRGVtYW5kLCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlYWxUaW1lU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyZWFtRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge05ldHdvcmtTdGF0ZXN9IGZyb20gJy4vTmV0d29ya1N0YXRlcyc7XG5cbmNvbnN0IGJhbmR3aWR0aFRvU3RhcnRBdCA9IDMwMDAwMDA7IC8vIENvcnJlc3BvbmRzIHRvIDcyMHAgaW4gbW9zdCBzZXR1cHNcbmNvbnN0IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkID0gMTUwMDA7XG5cbnR5cGUgRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllciA9IChldnQ6IFdlYlBsYXllckV2ZW50KSA9PiB2b2lkO1xudHlwZSBXZWJQbGF5ZXJFdmVudCA9IHtcbiAgY29kZTogbnVtYmVyO1xuICBzZXZlcml0eTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJV2ViUGxheWVyIHtcbiAgc3RhcnQ6ICh1cmw6IHN0cmluZykgPT4gdm9pZDtcbiAgYWRkRXZlbnRMaXN0ZW5lcihuYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyKTogdm9pZDtcbiAgZGlzcG9zZSgpOiB2b2lkO1xuICBlcnJvcnM6IHtcbiAgICBzZXZlcml0eToge1xuICAgICAgUkVDT1ZFUkFCTEU6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1dlYlBsYXllcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSVdlYlBsYXllcjtcbiAgcHJpdmF0ZSBfbGFzdFJlbG9hZFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIGtpbmQ6IHN0cmluZywgc3RyZWFtSWQ6IHN0cmluZywgbWFuaWZlc3RVUkk6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpIHtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG4gICAgdGhpcy5fa2luZCA9IGtpbmQ7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9tYW5pZmVzdFVSSSA9IGVuY29kZVVSSShtYW5pZmVzdFVSSSkucmVwbGFjZSgvWyNdL2csICclMjMnKTtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllcikge1xuICAgICAgY29uc3QgcGxheWVyT3B0aW9ucyA9IHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgYmFuZHdpZHRoVG9TdGFydEF0XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuV2ViUGxheWVyKHRoaXMuX2xvZ2dlciwgdGhpcy5fdmlkZW9FbGVtZW50LCBwbGF5ZXJPcHRpb25zKTtcbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCh0aGlzLl9tYW5pZmVzdFVSSSk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGVycm9yT2JqZWN0ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2FuUmVsb2FkKCkgJiYgZXJyb3JPYmplY3QgJiYgKGVycm9yT2JqZWN0LmNvZGUgPT09IDMgfHwgZXJyb3JPYmplY3Quc2V2ZXJpdHkgPT09IENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLmVycm9ycy5zZXZlcml0eS5SRUNPVkVSQUJMRSkpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gYWZ0ZXIgZXJyb3IgZXZlbnQgWyVqXScsIGVycm9yT2JqZWN0KTtcbiAgICAgICAgICB0aGlzLnJlbG9hZElmQWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcmVsb2FkIHdpdGggZXJyb3IgWyVqXScsIGVycm9yT2JqZWN0KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyICYmIENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLmlzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMC4wLFxuICAgICAgICBsYWc6IDAuMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZSxcbiAgICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGlzdGljcyA9IHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gc3RhdGlzdGljcy5jdXJyZW50VGltZSB8fCB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ107XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZD8ubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRpc3RpY3MuaXNOYXRpdmUgJiYgc3RhdGlzdGljcy5kZWxpdmVyeVR5cGUgPT09ICdIbHMnKSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWUgLSBzdGF0aXN0aWNzLmxhZztcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRpc3RpY3MuY3VycmVudFRpbWUpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRpc3RpY3MuaXNOYXRpdmUpIHtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gTWF0aC5tYXgoMC4wLCB0cnVlQ3VycmVudFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZD8ubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5SZWxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQgPSAhdGhpcy5fbGFzdFJlbG9hZFRpbWUgfHwgRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RSZWxvYWRUaW1lID4gbWluVGltZUJlZm9yZU5leHRSZWxvYWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fdmlkZW9FbGVtZW50ICYmIHRoaXMuX3BsYXllciAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoICE9PSAwICYmIGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRJZkFibGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbG9hZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gdGhhdCB3YXMgYWN0aXZlIGZvciBhdCBsZWFzdCBbJXNdIHNlY29uZHMnLCB0aGlzLl9zdHJlYW1JZCwgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgLyAxMDAwKTtcblxuICAgIHRoaXMuX2xhc3RSZWxvYWRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRW5jb2RlZFN0cmVhbVNpbms8VCA9IFJUQ0VuY29kZWRBdWRpb0ZyYW1lIHwgUlRDRW5jb2RlZFZpZGVvRnJhbWU+IHtcbiAgICAodHJhY2s6IE1lZGlhU3RyZWFtVHJhY2ssIGNodW5rOiBUKTogYm9vbGVhbiB8IFByb21pc2VMaWtlPGJvb2xlYW4+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmNvZGVkU3RyZWFtU2luayB7XG4gIHN0YXRpYyB2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKG1vZGU6ICdhdWRpbycgfCAndmlkZW8nLCBpdGVtOiBJRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBFbmNvZGVkIFN0cmVhbSBTaW5rIGZ1bmN0aW9uIHR5cGUuIEZvdW5kIFske3R5cGVvZiBpdGVtfV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gMikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IEVuY29kZWQgU3RyZWFtIFNpbmsgZnVuY3Rpb24gcGFyYW1ldGVyIGxlbmd0aC4gRXhwZWN0ZWQgMi4gRm91bmQgWyR7aXRlbS5sZW5ndGh9XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDogJ29rJ1xuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kZWRTdHJlYW1TaW5rIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIHtTdXJyb2dhdGVGcmFtZVR5cGUsIFNraXBGcmFtZX0gZnJvbSAnLi9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyJztcbmltcG9ydCBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0gZnJvbSAnLi9UcmFuc2Zvcm1TdHJlYW0ud29ya2VyJztcblxudHlwZSBNZWRpYVN0cmVhbVRyYWNrS2luZCA9ICd2aWRlbycgfCAnYXVkaW8nO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSVENFbmNvZGVkRnJhbWU8VCBleHRlbmRzIFJUQ0VuY29kZWRWaWRlb0ZyYW1lIHwgUlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHtcbiAgdHJhY2s6IE1lZGlhU3RyZWFtVHJhY2s7XG4gIGNodW5rOiBUO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnNlcnRhYmxlU3RyZWFtcyB7XG4gIHN0YXRpYyBjb25maWd1cmVFbmNvZGVkU3RyZWFtUGlwZWxpbmUoXG4gICAgc3RyZWFtOiBNZWRpYVN0cmVhbSxcbiAgICByZWNlaXZlcnM6IFJUQ1J0cFJlY2VpdmVyW10sXG4gICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZCwgLy8gQ2FuIGJlIHVuZGVmaW5lZCB3aGVuIHRoZSB1c2VyIGRpZG4ndCBzcGVjaWZ5IGEgc2lua1xuICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQsIC8vIENhbiBiZSB1bmRlZmluZWQgd2hlbiB0aGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhIHNpbmtcbiAgICB2aWRlb0NvZGVjOiBzdHJpbmcsXG4gICAgYXVkaW9Db2RlYzogc3RyaW5nXG4gICk6IHtcbiAgICBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gICAgZW5jb2RlZFZpZGVvRnJhbWU6IFN1YmplY3Q8SVJUQ0VuY29kZWRGcmFtZTxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCBudWxsPjtcbiAgICBlbmNvZGVkQXVkaW9GcmFtZTogU3ViamVjdDxJUlRDRW5jb2RlZEZyYW1lPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IG51bGw+O1xuICB9IHtcbiAgICBjb25zdCBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICBjb25zdCBlbmNvZGVkVmlkZW9GcmFtZSA9IG5ldyBTdWJqZWN0PElSVENFbmNvZGVkRnJhbWU8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgbnVsbD4obnVsbCk7XG4gICAgY29uc3QgZW5jb2RlZEF1ZGlvRnJhbWUgPSBuZXcgU3ViamVjdDxJUlRDRW5jb2RlZEZyYW1lPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IG51bGw+KG51bGwpO1xuXG4gICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgY29uc3QgcmVjZWl2ZXIgPSByZWNlaXZlcnMuZmlsdGVyKHJlY2VpdmUgPT4gcmVjZWl2ZS50cmFjayA9PT0gdHJhY2spWzBdO1xuICAgICAgY29uc3Qga2luZDogTWVkaWFTdHJlYW1UcmFja0tpbmQgPSB0cmFjay5raW5kIGFzIE1lZGlhU3RyZWFtVHJhY2tLaW5kO1xuXG4gICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgY2FzZSAndmlkZW8nOiB7XG4gICAgICAgICAgY29uc3QgbXVzdFNpbmsgPSAhIWVuY29kZWRWaWRlb1N0cmVhbVNpbms7XG5cbiAgICAgICAgICAvLyBGaXJlZm94IGFuZCBTYWZhcmlcbiAgICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IFdvcmtlclRyYW5zZm9ybVN0cmVhbSgpO1xuXG4gICAgICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gYXN5bmMgZXZlbnQgPT4ge1xuICAgICAgICAgICAgICBlbmNvZGVkVmlkZW9GcmFtZS52YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICB0cmFjayxcbiAgICAgICAgICAgICAgICBjaHVuazogZXZlbnQuZGF0YS5jaHVua1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChtdXN0U2luayAmJiAhYXdhaXQgZW5jb2RlZFZpZGVvU3RyZWFtU2luayh0cmFjaywgZXZlbnQuZGF0YS5jaHVuaykpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe2ZvcmNlSW52YWxpZEZyYW1lOiB0cnVlfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJlY2VpdmVyLnRyYW5zZm9ybSA9IG5ldyBSVENSdHBTY3JpcHRUcmFuc2Zvcm0od29ya2VyLCB7XG4gICAgICAgICAgICAgIGtpbmQ6IHRyYWNrLmtpbmQsXG4gICAgICAgICAgICAgIGNvZGVjOiB2aWRlb0NvZGVjLFxuICAgICAgICAgICAgICBtdXN0U2lua1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENocm9taXVtIChDaHJvbWUsIEVkZ2UsIE9wZXJhLCAuLi4pXG4gICAgICAgICAgY29uc3QgZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFJUQ0VuY29kZWRWaWRlb0ZyYW1lLCBSVENFbmNvZGVkVmlkZW9GcmFtZT4gPSBhc3luYyhjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgZW5jb2RlZFZpZGVvRnJhbWUudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRyYWNrLFxuICAgICAgICAgICAgICBjaHVua1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKG11c3RTaW5rKSB7XG4gICAgICAgICAgICAgIGlmICghYXdhaXQgZW5jb2RlZFZpZGVvU3RyZWFtU2luayh0cmFjaywgY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN1cnJvZ2F0ZTogU3Vycm9nYXRlRnJhbWVUeXBlO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNodW5rLnR5cGUgPT09ICdrZXknKSB7XG4gICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZSh2aWRlb0NvZGVjKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUodmlkZW9Db2RlYyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN1cnJvZ2F0ZSA9PT0gU2tpcEZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IHN1cnJvZ2F0ZSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjaHVuay50eXBlID09PSAna2V5Jykge1xuICAgICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlYyh2aWRlb0NvZGVjKSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjKHZpZGVvQ29kZWMpIHx8IGNodW5rLmRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuayk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICBjb25zdCByZWNlaXZlclN0cmVhbXMgPSByZWNlaXZlci5jcmVhdGVFbmNvZGVkU3RyZWFtcygpO1xuICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHJlY2VpdmVyU3RyZWFtcy5yZWFkYWJsZTtcbiAgICAgICAgICBjb25zdCBzaW5rID0gcmVjZWl2ZXJTdHJlYW1zLndyaXRhYmxlO1xuXG4gICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdhdWRpbyc6IHtcbiAgICAgICAgICBjb25zdCBtdXN0U2luayA9ICEhZW5jb2RlZEF1ZGlvU3RyZWFtU2luaztcblxuICAgICAgICAgIC8vIEZpcmVmb3ggYW5kIFNhZmFyaVxuICAgICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gV29ya2VyVHJhbnNmb3JtU3RyZWFtKCk7XG5cbiAgICAgICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBhc3luYyBldmVudCA9PiB7XG4gICAgICAgICAgICAgIGVuY29kZWRBdWRpb0ZyYW1lLnZhbHVlID0ge1xuICAgICAgICAgICAgICAgIHRyYWNrLFxuICAgICAgICAgICAgICAgIGNodW5rOiBldmVudC5kYXRhLmNodW5rXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgaWYgKG11c3RTaW5rICYmICFhd2FpdCBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rKHRyYWNrLCBldmVudC5kYXRhLmNodW5rKSkge1xuICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7Zm9yY2VJbnZhbGlkRnJhbWU6IHRydWV9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmVjZWl2ZXIudHJhbnNmb3JtID0gbmV3IFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSh3b3JrZXIsIHtcbiAgICAgICAgICAgICAga2luZDogdHJhY2sua2luZCxcbiAgICAgICAgICAgICAgY29kZWM6IGF1ZGlvQ29kZWMsXG4gICAgICAgICAgICAgIG11c3RTaW5rXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgbWVkaWFTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcbiAgICAgICAgICAgIGNvbnN0IGF1ZGlvUHVtcGVyID0gbmV3IEF1ZGlvKCk7XG5cbiAgICAgICAgICAgIGF1ZGlvUHVtcGVyLnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhdWRpb1B1bXBlcik7XG5cbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhdWRpb1B1bXBlcik7XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENocm9taXVtIChDaHJvbWUsIEVkZ2UsIE9wZXJhLCAuLi4pXG4gICAgICAgICAgY29uc3QgZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFJUQ0VuY29kZWRBdWRpb0ZyYW1lLCBSVENFbmNvZGVkQXVkaW9GcmFtZT4gPSBhc3luYyhjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgZW5jb2RlZEF1ZGlvRnJhbWUudmFsdWUgPSB7XG4gICAgICAgICAgICAgIHRyYWNrLFxuICAgICAgICAgICAgICBjaHVua1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKG11c3RTaW5rKSB7XG4gICAgICAgICAgICAgIGlmICghYXdhaXQgZW5jb2RlZEF1ZGlvU3RyZWFtU2luayh0cmFjaywgY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoYXVkaW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgY29uc3QgcmVjZWl2ZXJTdHJlYW1zID0gcmVjZWl2ZXIuY3JlYXRlRW5jb2RlZFN0cmVhbXMoKTtcbiAgICAgICAgICBjb25zdCBzb3VyY2UgPSByZWNlaXZlclN0cmVhbXMucmVhZGFibGU7XG4gICAgICAgICAgY29uc3Qgc2luayA9IHJlY2VpdmVyU3RyZWFtcy53cml0YWJsZTtcblxuICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgLnBpcGVUbyhzaW5rKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShraW5kKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBkaXNwb3NhYmxlcyxcbiAgICAgIGVuY29kZWRWaWRlb0ZyYW1lLFxuICAgICAgZW5jb2RlZEF1ZGlvRnJhbWVcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGNvbmZpZ3VyZUluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1hdGlvbihzdHJlYW06IE1lZGlhU3RyZWFtLCB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4sIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+KToge3RyYW5zZm9ybWVkU3RyZWFtOiBNZWRpYVN0cmVhbTsgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0fSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZWRTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcbiAgICBjb25zdCBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIGNvbnN0IGtpbmQ6IE1lZGlhU3RyZWFtVHJhY2tLaW5kID0gdHJhY2sua2luZCBhcyBNZWRpYVN0cmVhbVRyYWNrS2luZDtcblxuICAgICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgIGNhc2UgJ3ZpZGVvJzoge1xuICAgICAgICAgIGlmICh2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjb25zdCBpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8VmlkZW9GcmFtZSwgVmlkZW9GcmFtZT4gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayh0cmFjaywgY2h1bmssIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgdmlkZW9UcmFjayA9IHRyYWNrIGFzIE1lZGlhU3RyZWFtVmlkZW9UcmFjaztcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yKHt0cmFjazogdmlkZW9UcmFja30pO1xuICAgICAgICAgICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3Ioe2tpbmQ6IHZpZGVvVHJhY2sua2luZH0pO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcHJvY2Vzc29yLnJlYWRhYmxlO1xuICAgICAgICAgICAgY29uc3Qgc2luayA9IGdlbmVyYXRvci53cml0YWJsZTtcblxuICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgICAgLnBpcGVUbyhzaW5rKTtcblxuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLnJlbW92ZVRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKHRyYWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2F1ZGlvJzoge1xuICAgICAgICAgIGlmIChhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjb25zdCBpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8QXVkaW9EYXRhLCBBdWRpb0RhdGE+ID0gKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sodHJhY2ssIGNodW5rLCBjb250cm9sbGVyKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGF1ZGlvVHJhY2sgPSB0cmFjayBhcyBNZWRpYVN0cmVhbUF1ZGlvVHJhY2s7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2s6IGF1ZGlvVHJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiBhdWRpb1RyYWNrLmtpbmR9KTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvci5yZWFkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSBnZW5lcmF0b3Iud3JpdGFibGU7XG5cbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGdlbmVyYXRvcik7XG5cbiAgICAgICAgICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG4gICAgICAgICAgICBjb25zdCBhdWRpb1B1bXBlciA9IG5ldyBBdWRpbygpO1xuXG4gICAgICAgICAgICBtZWRpYVN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgICBhdWRpb1B1bXBlci5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0ucmVtb3ZlVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhdWRpb1B1bXBlcik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKHRyYWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoa2luZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNmb3JtZWRTdHJlYW0sXG4gICAgICBkaXNwb3NhYmxlc1xuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luc2VydGFibGVTdHJlYW1zIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VCA9IEF1ZGlvRGF0YSB8IFZpZGVvRnJhbWU+IHtcbiAgICAodHJhY2s6IE1lZGlhU3RyZWFtVHJhY2ssIGNodW5rOiBULCBjb250cm9sbGVyOiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcjxUPik6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtVHJhY2tUcmFuc2Zvcm0ge1xuICBzdGF0aWMgdmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKG1vZGU6ICdhdWRpbycgfCAndmlkZW8nLCBpdGVtOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm0pIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHR5cGUuIEZvdW5kIFske3R5cGVvZiBpdGVtfV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gMykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IE1lZGlhIFN0cmVhbSBUcmFjayB0cmFuc2Zvcm0gZnVuY3Rpb24gcGFyYW1ldGVyIGxlbmd0aC4gRXhwZWN0ZWQgMy4gRm91bmQgWyR7aXRlbS5sZW5ndGh9XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDogJ29rJ1xuICAgIH07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi8uLi9kb20vQnJvd3NlckRldGVjdG9yJztcblxuZXhwb3J0IGNvbnN0IFNraXBGcmFtZSA9IFN5bWJvbCgpO1xuXG5leHBvcnQgdHlwZSBTdXJyb2dhdGVGcmFtZVR5cGUgPSBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB8IHR5cGVvZiBTa2lwRnJhbWU7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNTYWZhcmkgPSBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNNb2JpbGVDaHJvbWUgPSBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5pc01vYmlsZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNBbmRyb2lkQ2hyb21lID0gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuaXNBbmRyb2lkO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2luZ2xlWmVyb0J5dGUgPSBuZXcgVWludDhBcnJheShbMHgwMF0pO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjID0ge09QVVM6IG5ldyBVaW50OEFycmF5KFsweDY4LCAweDA3LCAweGQ5LCAweGFiLCAweGJjLCAweDc5LCAweDg3LCAweGFiLCAweDhlLCAweDRhLCAweDE0LCAweGYzLCAweGE3LCAweDFjLCAweGYyLCAweDlhLCAweDdhLCAweDQ1LCAweGE3LCAweDJkLCAweDQ0LCAweDI1LCAweDc0LCAweDRjLCAweGFkLCAweDE2LCAweGIzLCAweDBlLCAweDUxLCAweDU3LCAweGVhLCAweGU3LCAweGFkLCAweDJhLCAweDM4LCAweGNlLCAweDMzXSl9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjID0ge1xuICAgIEgyNjQ6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDksIDB4ZjAsIC8vIEFjY2VzcyB1bml0IGRlbGltaXRlclxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHhmNCwgMHgwMCwgMHgwYSwgMHg5MSwgMHg5YiwgMHgyYiwgMHhmMSwgMHhmMSwgMHhmOCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwNywgMHg4OSwgMHgxMiwgMHhjYiwgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhlYiwgMHhlMywgMHhjNCwgMHg0OCwgMHg0NCwgLy8gUGljdHVyZSBwYXJhbXRlciBzZXRcbiAgICAgIC8qICovIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjUsIDB4ODgsIDB4ODIsIDB4MDAsIDB4M2YsIDB4NzAsIDB4MjMsIDB4ODYsIDB4ZTYsIDB4ZDEsIDB4ODAsIDB4MDksIDB4YWYsIDB4MGEsIDB4NDEsIDB4NjYsIDB4NmIsIDB4NTQsIDB4NDYsIDB4ZmIsIDB4NzEsIDB4ZDksIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZjldKSwgLy8gU2xpY2UgbGF5ZXI6IGlkciBkYXRhXG4gICAgVlA4OiBuZXcgVWludDhBcnJheShbMHhiMCwgMHgwMiwgMHgwMCwgMHg5ZCwgMHgwMSwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg2YiwgMHgwMCwgMHgyNywgMHgxYywgMHgyNCwgMHgwYywgMHgyYywgMHgyYywgMHg0NCwgMHhjYywgMHgyNCwgMHg0MSwgMHhhOCwgMHgwMCwgMHgxMywgMHhhNywgMHhhMywgMHg3YSwgMHg1MCwgMHgwMCwgMHhmZSwgMHhlYiwgMHhkZSwgMHgyZiwgMHg4YSwgMHgxZSwgMHg2YiwgMHg3YiwgMHgwNywgMHg3MiwgMHg2MywgMHgwOSwgMHhhNCwgMHg4ZSwgMHhjMF0pLFxuICAgIFZQOTogbmV3IFVpbnQ4QXJyYXkoWzB4ODIsIDB4NDksIDB4ODMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NzYsIDB4MzgsIDB4MjQsIDB4MWMsIDB4MTksIDB4YTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MTEsIDB4YmYsIDB4ZGQsIDB4NzcsIDB4ZmYsIDB4NDAsIDB4N2YsIDB4YjEsIDB4MDBdKVxuICB9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjID0ge1xuICAgIEgyNjQ6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDksIDB4ZjAsIC8vIEFjY2VzcyB1bml0IGRlbGltaXRlclxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MSwgMHg5YSwgMHg2OCwgMHg0OSwgMHhhOCwgMHg0MSwgMHg2OCwgMHg5OSwgMHg0YywgMHgwZiwgMHhmZiwgMHg5MiwgMHg4MV0pLCAvLyBTbGljZSBsYXllcjogbm9uIGlkciBkYXRhXG4gICAgVlA4OiBuZXcgVWludDhBcnJheShbMHgzMSwgMHgwMywgMHgwMCwgMHhlNCwgMHhlMCwgMHhhOCwgMHg5YiwgMHgzNywgMHhhZiwgMHgxMCwgMHg0ZiwgMHg0ZiwgMHhiMSwgMHgwYSwgMHgyZiwgMHhlNCwgMHg5MiwgMHhjMCwgMHgxZiwgMHhlNywgMHg0ZiwgMHg0NiwgMHhmZiwgMHhlZSwgMHg1MSwgMHhjMSwgMHg1ZCwgMHgwMCwgMHhmZSwgMHhlYiwgMHhkZSwgMHgyZiwgMHg4YSwgMHgxZSwgMHg2YiwgMHg3YiwgMHgwNywgMHg3MiwgMHg2MywgMHgwOSwgMHhhNCwgMHg4ZSwgMHhjMF0pLFxuICAgIFZQOTogbmV3IFVpbnQ4QXJyYXkoWzB4ODYsIDB4MDAsIDB4NDAsIDB4OTIsIDB4OWMsIDB4MjQsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NDBdKVxuICB9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXk4Mng4MkgyNjQgPSB7XG4gICAgSUZyYW1lOiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweDQyLCAweGMwLCAweDBkLCAweGRhLCAweDE4LCAweGRlLCAweDIyLCAweDIyLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDAzLCAweGM4LCAweGYxLCAweDQyLCAweGFhLCAvLyBTZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0XG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY4LCAweGNlLCAweDBmLCAweGM4LCAvLyBQaWN0dXJlIHBhcmFtZXRlciBzZXRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4MDMsIC4uLm5ldyBVaW50OEFycmF5KDQwKS5maWxsKDB4ZmYpLCAweDVmLCAuLi5uZXcgVWludDhBcnJheSgxMDI5NSkuZmlsbCgweGZmKSwgMHg4MCwgLy8gU3VwcGxlbWVudGFsIGVuaGFuY2VtZW50IGluZm9ybWF0aW9uIChTRUkpXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY1LCAweDg4LCAweDg0LCAweDA1LCAuLi5uZXcgVWludDhBcnJheSgzKS5maWxsKDB4ZmYpLCAweDBmLCAweDQ1LCAweDAwLCAweDAxLCAweDU3LCAweDlmLCAweDI3LCAweDI3LCAweDI3LCAweDI3LCAweDI3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc4XSksIC8vIFNsaWNlIGxheWVyOiBJZHIgZGF0YVxuICAgIFBGcmFtZTogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNiwgMHgwMywgLi4ubmV3IFVpbnQ4QXJyYXkoNDApLmZpbGwoMHhmZiksIDB4YTQsIC4uLm5ldyBVaW50OEFycmF5KDEwMzY0KS5maWxsKDB4ZmYpLCAweDgwLCAvLyBTRUlcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDEsIDB4OWEsIDB4MjAsIDB4MTUsIDB4ZjAsIDB4NGJdKSAvLyBTbGljZSBsYXllcjogbm9uIGlkciBkYXRhXG4gIH07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXggPSAxMDQxODtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCA9IDE7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNNb2JpbGVDaHJvbWUgfHwgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNTYWZhcmk7XG4gIHByaXZhdGUgc3RhdGljIF9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0O1xuXG4gIHN0YXRpYyBnZXRTdXJyb2dhdGVBdWRpb1NpbGVudFBlckNvZGVjKGNvZGVjOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoIChjb2RlYy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdPUFVTJzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjLk9QVVMuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEludmFsaWRTdXJyb2dhdGVBdWRpb0RhdGEoKTogQXJyYXlCdWZmZXIge1xuICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlYyhjb2RlYzogc3RyaW5nKTogQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xuICAgICAgY2FzZSAnSDI2NCc6IHtcbiAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0O1xuXG4gICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15ODJ4ODJIMjY0LklGcmFtZS5idWZmZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLkgyNjQuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDgnOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA4LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA5Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLlZQOS5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lKGNvZGVjOiBzdHJpbmcpOiBTdXJyb2dhdGVGcmFtZVR5cGUge1xuICAgIGlmICgoY29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnKSAmJiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0O1xuXG4gICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNBbmRyb2lkQ2hyb21lKSB7XG4gICAgICAgIHJldHVybiBTa2lwRnJhbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjKGNvZGVjOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoIChjb2RlYy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdIMjY0Jzoge1xuICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpO1xuXG4gICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuSDI2NC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOCc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5WUDguYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDknOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuVlA5LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUoY29kZWM6IHN0cmluZyk6IFN1cnJvZ2F0ZUZyYW1lVHlwZSB7XG4gICAgaWYgKChjb2RlYy50b1VwcGVyQ2FzZSgpID09PSAnSDI2NCcpICYmIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgIGNvbnN0IHNhdmVkU3Vycm9nYXRlRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyO1xuICAgICAgY29uc3QgYnVmZmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyKCk7XG5cbiAgICAgIGlmIChzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0KSB7XG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcbiAgICAgICAgICByZXR1cm4gU2tpcEZyYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcisrO1xuXG4gICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cblxuICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyKCk6IEFycmF5QnVmZmVyIHtcbiAgICBjb25zdCBiaXRNYXNrMSA9IDB4MGU7XG4gICAgY29uc3QgYml0TWFzazIgPSAweDAxO1xuICAgIGNvbnN0IGJpdFNoaWZ0UmlnaHRCeTEgPSAxO1xuICAgIGNvbnN0IGJpdFNoaWZ0TGVmdEJ5NyA9IDc7XG4gICAgY29uc3QgYnl0ZTEgPSAoKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgJiBiaXRNYXNrMSkgPj4gYml0U2hpZnRSaWdodEJ5MSk7XG4gICAgY29uc3QgYnl0ZTIgPSAoKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgJiBiaXRNYXNrMikgPDwgYml0U2hpZnRMZWZ0Qnk3KTtcbiAgICBjb25zdCBjb3B5T2ZEdW1teVBGcmFtZXMgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NC5QRnJhbWUuc2xpY2UoKTtcbiAgICBjb25zdCBidWZmZXIgPSBjb3B5T2ZEdW1teVBGcmFtZXMuYnVmZmVyO1xuICAgIGNvbnN0IGJ1ZmZlckluZGV4ID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4O1xuXG4gICAgYnVmZmVyW2J1ZmZlckluZGV4XSB8PSBieXRlMTtcbiAgICBidWZmZXJbYnVmZmVySW5kZXggKyAxXSB8PSBieXRlMjtcbiAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XG5cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fQlVJTERfVkVSU0lPTl9fOiBzdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnNpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2RlZmF1bHRWZXJzaW9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gIHN0YXRpYyBnZXQgc2RrVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gX19CVUlMRF9WRVJTSU9OX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeVNlcnZpY2UgZnJvbSAnLi9UZWxlbWV0cnlTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi4vbG9nZ2VyL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3k7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQ7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQ7XG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZSA9IG5ldyBUZWxlbWV0cnlTZXJ2aWNlKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UucHVzaChsb2dMZXZlbCwgbWVzc2FnZSwgY2F0ZWdvcnksIGRhdGUpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIF90aHJlc2hvbGQgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHRlbGVtZXRyeVVybCA9IG5ldyBHbG9iYWxTY29wZS5VUkwodXJsKTtcblxuICAgIHRlbGVtZXRyeVVybC5wYXRobmFtZSA9IHRlbGVtZXRyeVVybC5wYXRobmFtZSArICcvbG9ncyc7XG5cbiAgICB0aGlzLl91cmwgPSB0ZWxlbWV0cnlVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc2V0IHBhZ2VMb2FkVGltZShwYWdlTG9hZFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBOdW1iZXJzIGZyb20gJy4uL2xhbmcvTnVtYmVycyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBHbG9iYWxTY29wZS5sb2NhdGlvbkhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBydW50aW1lID0gKHRpbWVzdGFtcC52YWx1ZU9mKCkgLSB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnBhZ2VMb2FkVGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgcnVudGltZVxuICAgIH07XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHRoaXMuX2xvZ3MucHVzaChsb2dSZWNvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2dzLnVuc2hpZnQobG9nUmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9ncyhsb2dNZXNzYWdlczogQXJyYXk8SUxvZ0l0ZW0+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBsb2dNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBHbG9iYWxTY29wZS5mZXRjaCh0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9nc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9sb2dzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBudW1iZXJPZkxvZ3NUb1NlbmQgPSAwO1xuICAgIGxldCBzaXplT2ZMb2dzVG9TZW5kID0gMDtcblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBnZXRJdGVtU2l6ZSA9IGl0ZW0gPT4gdHlwZW9mIGl0ZW0gPT09ICdudW1iZXInID8gTnVtYmVycy5jb3VudE51bWJlckxlbmd0aChpdGVtKSA6IGl0ZW0ubGVuZ3RoO1xuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBnZXRJdGVtU2l6ZShpdGVtKSA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAyMDAwO1xuY29uc3QgZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAxO1xuY29uc3QgZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAzMDAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9uZW50aWFsQmFja29mZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRcbiAgKSB7XG4gICAgdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gIH1cblxuICBnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KGZhaWx1cmVDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMgPSB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIC8gMTAwMDtcbiAgICBjb25zdCByYW5kb21pemF0aW9uID0gMC41ICsgKDAuNSAqIE1hdGgucmFuZG9tKCkpOyAvLyBbMC41LCAxKVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZiA9IE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcywgZmFpbHVyZUNvdW50IC0gMik7IC8vICBbMS80IDEvMiAxIDIgNCA4IC4uLi5dXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gPSBNYXRoLmZsb29yKGV4cG9uZW50aWFsQmFja29mZikgKiByYW5kb21pemF0aW9uO1xuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCA9IE1hdGguY2VpbChNYXRoLm1heChleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiAqIDEwMDAsIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpKTtcblxuICAgIHJldHVybiBNYXRoLm1pbihleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQsIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpbWVuc2lvbiBpbXBsZW1lbnRzIElDb21wYXJhYmxlPERpbWVuc2lvbj4ge1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xuICByZWFkb25seSBoZWlnaHQ6IG51bWJlcjtcblxuICBzdGF0aWMgZ2V0IGVtcHR5KCk6IERpbWVuc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMCwgMCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogRGltZW5zaW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyICYmIHRoaXMud2lkdGggPT09IG90aGVyLndpZHRoICYmIHRoaXMuaGVpZ2h0ID09PSBvdGhlci5oZWlnaHQ7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLndpZHRofXgke3RoaXMuaGVpZ2h0fWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBOZXR3b3JrTW9uaXRvciBmcm9tICcuLi9kb20vTmV0d29ya01vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmludGVyZmFjZSBJTmV0d29ya1N0YXRpc3RpY3Mge1xuICBydHQ/OiBudW1iZXI7XG4gIGVmZmVjdGl2ZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2Vzc2lvblRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gU0RLLmFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrTW9uaXRvcjogTmV0d29ya01vbml0b3IgPSBuZXcgTmV0d29ya01vbml0b3IoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9sYXN0TmV0d29ya1N0YXRpc3RpY3M6IElOZXR3b3JrU3RhdGlzdGljcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yKTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLl9uZXR3b3JrTW9uaXRvci5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5pc0ZvcmVncm91bmQuc3Vic2NyaWJlKGlzRm9yZWdyb3VuZCA9PiB7XG4gICAgICB0aGlzLnJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLnJ0dC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrUlRUVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmVmZmVjdGl2ZVR5cGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gIH1cblxuICBsaXN0ZW5PblN0cmVhbVNldHVwKCk6IFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICAgIHJldHVybiBuZXcgU3RyZWFtU2V0dXBMaXN0ZW5lcih0aGlzLl9wYWdlTG9hZFRpbWUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lU2luY2VMYXN0Q2hhbmdlID0gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBpc0ZvcmVncm91bmQgPyBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQgOiBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlTGFzdENoYW5nZX1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ0FwcGxpY2F0aW9uIGhhcyBnb25lIGludG8gdGhlIFslc10gYWZ0ZXIgWyVzXSBtcycsXG4gICAgICBpc0ZvcmVncm91bmQgPyAnZm9yZWdyb3VuZCcgOiAnYmFja2dyb3VuZCcsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZUxhc3RDaGFuZ2UpLnRvSXNvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1JUVFVwZGF0ZShuZXdSVFQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkUnR0ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dDtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQgPSBuZXdSVFQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogbmV3UlRUfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFJ0dCA/IHt1aW50NjQ6IG9sZFJ0dH0gOiB1bmRlZmluZWQsXG4gICAgICByZXNvdXJjZTogJ25hdmlnYXRvcidcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBSVFQgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld1JUVCxcbiAgICAgIG9sZFJ0dFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKG5ld05ldHdvcmtUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZE5ldHdvcmtUeXBlID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGU7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZSA9IG5ld05ldHdvcmtUeXBlO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdOZXR3b3JrVHlwZX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGROZXR3b3JrVHlwZSA/IHtzdHJpbmc6IG9sZE5ldHdvcmtUeXBlfSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGVmZmVjdGl2ZSB0eXBlIGhhcyBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3TmV0d29ya1R5cGUsXG4gICAgICBvbGROZXR3b3JrVHlwZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZShuZXdDYXBhY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRDYXBhY2l0eSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSA9IG5ld0NhcGFjaXR5O1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7ZmxvYXQ6IG5ld0NhcGFjaXR5fSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZENhcGFjaXR5ID8ge2Zsb2F0OiBvbGRDYXBhY2l0eX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBkb3dubGluayB0aHJvdWdocHV0IGNhcGFjaXR5IGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdDYXBhY2l0eSxcbiAgICAgIG9sZENhcGFjaXR5XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlb1RlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF9saXN0ZW5Ub0ZpcnN0VGltZTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yU3RhbGw6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvckNvbnRpbnVhdGlvbjogKGV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvU3RhbGxlZDogbnVtYmVyO1xuICBwcml2YXRlIF9sYXN0UHJvZ3Jlc3M6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9SZXNvbHV0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyOiBEaXNwb3NhYmxlO1xuICBwcml2YXRlIF9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXI6IERpc3Bvc2FibGU7XG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtSWQ6IHN0cmluZywgcGFnZUxvYWRUaW1lOiBudW1iZXIsIGNoYW5uZWxTdGFydFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IGNoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSA9ICgpOiB2b2lkID0+IHRoaXMuY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB9KTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIpO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuRm9yU3RhbGwgPSAoKTogdm9pZCA9PiB0aGlzLm9uU3RhbGwoKTtcblxuICAgIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbiA9IChldmVudCk6IHZvaWQgPT4gdGhpcy5vbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcblxuICAgIHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZHVyYXRpb25TaW5jZVBhZ2VMb2FkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHJldHVybiBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTtcbiAgICB0aGlzLnB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lci5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fdGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBGaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIENoYW5uZWwgY3JlYXRpb24gdG8gZmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlkZW9TdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5TdGFsbGVkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHN0YWxsZWQnLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk6IHZvaWQge1xuICAgIGlmICghdmlkZW8uYnVmZmVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB2aWRlby5idWZmZXJlZC5sZW5ndGg7XG4gICAgY29uc3QgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQgPSBldmVudC50eXBlID09PSAncGxheWluZydcbiAgICB8fCBidWZmZXJMZW5ndGggPiAwID8gKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcydcbiAgICAgIHx8IGV2ZW50LnR5cGUgPT09ICd0aW1ldXBkYXRlJylcbiAgICAgICYmIHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKSA9PT0gdGhpcy5fbGFzdFByb2dyZXNzIDogdHJ1ZTtcblxuICAgIGlmICghdGhpcy5fdmlkZW9TdGFsbGVkIHx8IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lU2luY2VTdG9wID0gRGF0ZS5ub3coKSAtIHRoaXMuX3ZpZGVvU3RhbGxlZDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQnVmZmVyaW5nLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VTdG9wfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgcmVjb3ZlcmVkIGZyb20gc3RhbGwgYWZ0ZXIgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VTdG9wKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBudWxsO1xuICB9XG5cbiAgb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKG5ld1Jlc29sdXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld1Jlc29sdXRpb259LFxuICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5fdmlkZW9SZXNvbHV0aW9uID8ge3N0cmluZzogdGhpcy5fdmlkZW9SZXNvbHV0aW9ufSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9SZXNvbHV0aW9uID0gbmV3UmVzb2x1dGlvbjtcbiAgfVxufSIsIlxuaW1wb3J0IHdvcmtlciBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvd29ya2VyLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5saW5lLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFdvcmtlcl9mbigpIHtcbiAgcmV0dXJuIHdvcmtlcihcIi8qKioqKiovICgoKSA9PiB7IC8vIHdlYnBhY2tCb290c3RyYXBcXG4vKioqKioqLyBcXHR2YXIgX193ZWJwYWNrX21vZHVsZXNfXyA9ICh7XFxuXFxuLyoqKi8gXFxcIi4vc3JjL2RvbS9Ccm93c2VyRGV0ZWN0b3IudHNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXFxcImRlZmF1bHRcXFwiOiAoKSA9PiAoLyogYmluZGluZyAqLyBCcm93c2VyRGV0ZWN0b3IpXFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7XFxuXFxuXFxuXFxudmFyIF9Ccm93c2VyRGV0ZWN0b3IsIF9uYXZpZ2F0b3IsIF9uYXZpZ2F0b3IyO1xcbi8qKlxcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXFxuICovXFxudmFyIEJyb3dzZXJEZXRlY3RvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBCcm93c2VyRGV0ZWN0b3IoKSB7XFxuICAgIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCgpKHRoaXMsIEJyb3dzZXJEZXRlY3Rvcik7XFxuICB9XFxuICByZXR1cm4gX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX19kZWZhdWx0KCkoQnJvd3NlckRldGVjdG9yLCBudWxsLCBbe1xcbiAgICBrZXk6IFxcXCJicm93c2VyTmFtZUFuZFZlcnNpb25cXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiYnJvd3Nlck5hbWVcXFwiLFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiYnJvd3Nlck1ham9yVmVyc2lvblxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiB0aGlzLl9icm93c2VyTWFqb3JWZXJzaW9uO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImlzQW5kcm9pZFxcXCIsXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQW5kcm9pZDtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJpc0Nocm9tZTY5XFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJpc0Nocm9tZTcwXFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MDtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJpc0Nocm9tZTcxXFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJpc0Nocm9tZTcyXFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJpc0Nocm9tZTc0XFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NDtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJpc0Nocm9tZTc1XFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJpc0Nocm9tZTc2XFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJpc0Nocm9tZTc3XFxcIixcXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NztcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJpc01vYmlsZVxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc01vYmlsZSgpIHtcXG4gICAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc01vYmlsZTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvblxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpIHtcXG4gICAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xcbiAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgIH1cXG4gICAgICB2YXIgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcXG4gICAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xcbiAgICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwicGFyc2VCcm93c2VyTmFtZVxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUJyb3dzZXJOYW1lKCkge1xcbiAgICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcXG4gICAgICAgIHJldHVybiAnJztcXG4gICAgICB9XFxuICAgICAgdmFyIGJyb3dzZXJOYW1lTGlzdCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLnNwbGl0KCcvJyk7XFxuICAgICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xcbiAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcInBhcnNlQnJvd3Nlck1ham9yVmVyc2lvblxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKSB7XFxuICAgICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xcbiAgICAgICAgcmV0dXJuIDA7XFxuICAgICAgfVxcbiAgICAgIHZhciBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xcbiAgICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcXG4gICAgICAgIHJldHVybiAwO1xcbiAgICAgIH1cXG4gICAgICB2YXIgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XFxuICAgICAgaWYgKCFmdWxsVmVyc2lvbikge1xcbiAgICAgICAgcmV0dXJuIDA7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBOdW1iZXIoZnVsbFZlcnNpb24uc3BsaXQoJy4nKVswXSkgfHwgMDtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKSB7XFxuICAgICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcXG4gICAgICAgIHJldHVybiAnJztcXG4gICAgICB9XFxuICAgICAgdmFyIHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XFxuICAgICAgdmFyIG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcXG4gICAgICBpZiAobXNpZSA+IDApIHtcXG4gICAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxcbiAgICAgICAgcmV0dXJuIFxcXCJJRS9cXFwiLmNvbmNhdChwYXJzZUludCh1c2VyQWdlbnQuc3Vic3RyaW5nKG1zaWUgKyA1LCB1c2VyQWdlbnQuaW5kZXhPZignLicsIG1zaWUpKSwgMTApKTtcXG4gICAgICB9XFxuICAgICAgdmFyIHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcXG4gICAgICBpZiAodHJpZGVudCA+IDApIHtcXG4gICAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxcbiAgICAgICAgdmFyIHZlcnNpb24gPSB1c2VyQWdlbnQuaW5kZXhPZigncnY6Jyk7XFxuICAgICAgICByZXR1cm4gXFxcIklFL1xcXCIuY29uY2F0KHBhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCkpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gJyc7XFxuICAgIH1cXG4gIH1dKTtcXG59KCk7XFxuX0Jyb3dzZXJEZXRlY3RvciA9IEJyb3dzZXJEZXRlY3RvcjtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXhcXFwiLCAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFxcXC8pKFtcXFxcZC5hcHJlXSspL2cpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCgpKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9icm93c2VyTmFtZUFuZFZlcnNpb25cXFwiLCBfQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCkpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCgpKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9icm93c2VyTmFtZVxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZSgpKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfYnJvd3Nlck1ham9yVmVyc2lvblxcXCIsIF9Ccm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCkpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCgpKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc01vYmlsZVxcXCIsIC9BbmRyb2lkfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxPcGVyYSBNaW5pL2kudGVzdCgoX25hdmlnYXRvciA9IG5hdmlnYXRvcikgPT09IG51bGwgfHwgX25hdmlnYXRvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25hdmlnYXRvci51c2VyQWdlbnQpKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShCcm93c2VyRGV0ZWN0b3IsIFxcXCJfaXNBbmRyb2lkXFxcIiwgL0FuZHJvaWQvaS50ZXN0KChfbmF2aWdhdG9yMiA9IG5hdmlnYXRvcikgPT09IG51bGwgfHwgX25hdmlnYXRvcjIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9uYXZpZ2F0b3IyLnVzZXJBZ2VudCkpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCgpKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTY5XFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJykpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCgpKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTcwXFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJykpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCgpKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTcxXFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzEuJykpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCgpKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTcyXFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJykpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCgpKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTc0XFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJykpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCgpKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTc1XFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzUuJykpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCgpKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTc2XFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJykpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCgpKEJyb3dzZXJEZXRlY3RvciwgXFxcIl9pc0Nocm9tZTc3XFxcIiwgX0Jyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJykpO1xcblxcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci50c1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci50cyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSA9PiB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCB7XFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBTa2lwRnJhbWU6ICgpID0+ICgvKiBiaW5kaW5nICovIFNraXBGcmFtZSksXFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcXFwiZGVmYXVsdFxcXCI6ICgpID0+ICgvKiBiaW5kaW5nICovIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIpXFxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfdG9Db25zdW1hYmxlQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9kb21fQnJvd3NlckRldGVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi8uLi9kb20vQnJvd3NlckRldGVjdG9yICovIFxcXCIuL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzXFxcIik7XFxuXFxuXFxuXFxuXFxudmFyIF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyO1xcbi8qKlxcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXFxuICovXFxuXFxuXFxudmFyIFNraXBGcmFtZSA9IFN5bWJvbCgpO1xcbnZhciBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcXG4gIGZ1bmN0aW9uIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIoKSB7XFxuICAgIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCgpKHRoaXMsIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIpO1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xcbiAgfVxcbiAgcmV0dXJuIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCgpKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIG51bGwsIFt7XFxuICAgIGtleTogXFxcImdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWNcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3Vycm9nYXRlQXVkaW9TaWxlbnRQZXJDb2RlYyhjb2RlYykge1xcbiAgICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xcbiAgICAgICAgY2FzZSAnT1BVUyc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjLk9QVVMuYnVmZmVyO1xcbiAgICAgICAgICB9XFxuICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRJbnZhbGlkU3Vycm9nYXRlQXVkaW9EYXRhXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEludmFsaWRTdXJyb2dhdGVBdWRpb0RhdGEoKSB7XFxuICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMoY29kZWMpIHtcXG4gICAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcXG4gICAgICAgIGNhc2UgJ0gyNjQnOlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcXG4gICAgICAgICAgICAgIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyUmVzZXQ7XFxuICAgICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjQuSUZyYW1lLmJ1ZmZlcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYy5IMjY0LmJ1ZmZlcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgY2FzZSAnVlA4JzpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA4LmJ1ZmZlcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgY2FzZSAnVlA5JzpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA5LmJ1ZmZlcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAge1xcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICAgICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiBcXFwiZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZShjb2RlYykge1xcbiAgICAgIGlmIChjb2RlYy50b1VwcGVyQ2FzZSgpID09PSAnSDI2NCcgJiYgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xcbiAgICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldDtcXG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIFNraXBGcmFtZTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJnZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1cnJvZ2F0ZVZpZGVvUEZyYW1lUGVyQ29kZWMoY29kZWMpIHtcXG4gICAgICBzd2l0Y2ggKGNvZGVjLnRvVXBwZXJDYXNlKCkpIHtcXG4gICAgICAgIGNhc2UgJ0gyNjQnOlxcbiAgICAgICAgICB7XFxuICAgICAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcXG4gICAgICAgICAgICAgIHZhciBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcXG4gICAgICAgICAgICAgIHJldHVybiBidWZmZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuSDI2NC5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGNhc2UgJ1ZQOCc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOC5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGNhc2UgJ1ZQOSc6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjLlZQOS5idWZmZXI7XFxuICAgICAgICAgIH1cXG4gICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgIHtcXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xcbiAgICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImdldEludmFsaWRTdXJyb2dhdGVWaWRlb1BGcmFtZVxcXCIsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUoY29kZWMpIHtcXG4gICAgICBpZiAoY29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnICYmIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcXG4gICAgICAgIHZhciBzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcjtcXG4gICAgICAgIHZhciBidWZmZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIoKTtcXG4gICAgICAgIGlmIChzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0KSB7XFxuICAgICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gU2tpcEZyYW1lO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XFxuICAgICAgICB9XFxuICAgICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XFxuICAgICAgICByZXR1cm4gYnVmZmVyO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc2luZ2xlWmVyb0J5dGUuYnVmZmVyO1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogXFxcImdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXJcXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpIHtcXG4gICAgICB2YXIgYml0TWFzazEgPSAweDBlO1xcbiAgICAgIHZhciBiaXRNYXNrMiA9IDB4MDE7XFxuICAgICAgdmFyIGJpdFNoaWZ0UmlnaHRCeTEgPSAxO1xcbiAgICAgIHZhciBiaXRTaGlmdExlZnRCeTcgPSA3O1xcbiAgICAgIHZhciBieXRlMSA9IChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyICYgYml0TWFzazEpID4+IGJpdFNoaWZ0UmlnaHRCeTE7XFxuICAgICAgdmFyIGJ5dGUyID0gKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgJiBiaXRNYXNrMikgPDwgYml0U2hpZnRMZWZ0Qnk3O1xcbiAgICAgIHZhciBjb3B5T2ZEdW1teVBGcmFtZXMgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NC5QRnJhbWUuc2xpY2UoKTtcXG4gICAgICB2YXIgYnVmZmVyID0gY29weU9mRHVtbXlQRnJhbWVzLmJ1ZmZlcjtcXG4gICAgICB2YXIgYnVmZmVySW5kZXggPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXg7XFxuICAgICAgYnVmZmVyW2J1ZmZlckluZGV4XSB8PSBieXRlMTtcXG4gICAgICBidWZmZXJbYnVmZmVySW5kZXggKyAxXSB8PSBieXRlMjtcXG4gICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XFxuICAgICAgcmV0dXJuIGJ1ZmZlcjtcXG4gICAgfVxcbiAgfV0pO1xcbn0oKTtcXG5fU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXI7XFxuX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0KCkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9pc1NhZmFyaVxcXCIsIF9kb21fQnJvd3NlckRldGVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXFxcImRlZmF1bHRcXFwiXS5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaScpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCgpKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfaXNNb2JpbGVDaHJvbWVcXFwiLCBfZG9tX0Jyb3dzZXJEZXRlY3Rvcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fW1xcXCJkZWZhdWx0XFxcIl0uYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIF9kb21fQnJvd3NlckRldGVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXFxcImRlZmF1bHRcXFwiXS5pc01vYmlsZSgpKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQoKShTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLCBcXFwiX2lzQW5kcm9pZENocm9tZVxcXCIsIF9kb21fQnJvd3NlckRldGVjdG9yX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bXFxcImRlZmF1bHRcXFwiXS5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgX2RvbV9Ccm93c2VyRGV0ZWN0b3JfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1tcXFwiZGVmYXVsdFxcXCJdLmlzQW5kcm9pZCk7XFxuX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0KCkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9zaW5nbGVaZXJvQnl0ZVxcXCIsIG5ldyBVaW50OEFycmF5KFsweDAwXSkpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCgpKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjXFxcIiwge1xcbiAgT1BVUzogbmV3IFVpbnQ4QXJyYXkoWzB4NjgsIDB4MDcsIDB4ZDksIDB4YWIsIDB4YmMsIDB4NzksIDB4ODcsIDB4YWIsIDB4OGUsIDB4NGEsIDB4MTQsIDB4ZjMsIDB4YTcsIDB4MWMsIDB4ZjIsIDB4OWEsIDB4N2EsIDB4NDUsIDB4YTcsIDB4MmQsIDB4NDQsIDB4MjUsIDB4NzQsIDB4NGMsIDB4YWQsIDB4MTYsIDB4YjMsIDB4MGUsIDB4NTEsIDB4NTcsIDB4ZWEsIDB4ZTcsIDB4YWQsIDB4MmEsIDB4MzgsIDB4Y2UsIDB4MzNdKVxcbn0pO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCgpKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjXFxcIiwge1xcbiAgSDI2NDogbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDksIDB4ZjAsXFxuICAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXJcXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjcsIDB4ZjQsIDB4MDAsIDB4MGEsIDB4OTEsIDB4OWIsIDB4MmIsIDB4ZjEsIDB4ZjEsIDB4ZjgsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDcsIDB4ODksIDB4MTIsIDB4Y2IsXFxuICAvLyBTZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0XFxuICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY4LCAweGViLCAweGUzLCAweGM0LCAweDQ4LCAweDQ0LFxcbiAgLy8gUGljdHVyZSBwYXJhbXRlciBzZXRcXG4gIC8qICovXFxuICAweDAwLCAweDAwLCAweDAxLCAweDY1LCAweDg4LCAweDgyLCAweDAwLCAweDNmLCAweDcwLCAweDIzLCAweDg2LCAweGU2LCAweGQxLCAweDgwLCAweDA5LCAweGFmLCAweDBhLCAweDQxLCAweDY2LCAweDZiLCAweDU0LCAweDQ2LCAweGZiLCAweDcxLCAweGQ5LCAweDdmLCAweGZmLCAweGZmLCAweGY5XSksXFxuICAvLyBTbGljZSBsYXllcjogaWRyIGRhdGFcXG4gIFZQODogbmV3IFVpbnQ4QXJyYXkoWzB4YjAsIDB4MDIsIDB4MDAsIDB4OWQsIDB4MDEsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzksIDB4NmIsIDB4MDAsIDB4MjcsIDB4MWMsIDB4MjQsIDB4MGMsIDB4MmMsIDB4MmMsIDB4NDQsIDB4Y2MsIDB4MjQsIDB4NDEsIDB4YTgsIDB4MDAsIDB4MTMsIDB4YTcsIDB4YTMsIDB4N2EsIDB4NTAsIDB4MDAsIDB4ZmUsIDB4ZWIsIDB4ZGUsIDB4MmYsIDB4OGEsIDB4MWUsIDB4NmIsIDB4N2IsIDB4MDcsIDB4NzIsIDB4NjMsIDB4MDksIDB4YTQsIDB4OGUsIDB4YzBdKSxcXG4gIFZQOTogbmV3IFVpbnQ4QXJyYXkoWzB4ODIsIDB4NDksIDB4ODMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NzYsIDB4MzgsIDB4MjQsIDB4MWMsIDB4MTksIDB4YTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MTEsIDB4YmYsIDB4ZGQsIDB4NzcsIDB4ZmYsIDB4NDAsIDB4N2YsIDB4YjEsIDB4MDBdKVxcbn0pO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCgpKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjXFxcIiwge1xcbiAgSDI2NDogbmV3IFVpbnQ4QXJyYXkoWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDksIDB4ZjAsXFxuICAvLyBBY2Nlc3MgdW5pdCBkZWxpbWl0ZXJcXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDEsIDB4OWEsIDB4NjgsIDB4NDksIDB4YTgsIDB4NDEsIDB4NjgsIDB4OTksIDB4NGMsIDB4MGYsIDB4ZmYsIDB4OTIsIDB4ODFdKSxcXG4gIC8vIFNsaWNlIGxheWVyOiBub24gaWRyIGRhdGFcXG4gIFZQODogbmV3IFVpbnQ4QXJyYXkoWzB4MzEsIDB4MDMsIDB4MDAsIDB4ZTQsIDB4ZTAsIDB4YTgsIDB4OWIsIDB4MzcsIDB4YWYsIDB4MTAsIDB4NGYsIDB4NGYsIDB4YjEsIDB4MGEsIDB4MmYsIDB4ZTQsIDB4OTIsIDB4YzAsIDB4MWYsIDB4ZTcsIDB4NGYsIDB4NDYsIDB4ZmYsIDB4ZWUsIDB4NTEsIDB4YzEsIDB4NWQsIDB4MDAsIDB4ZmUsIDB4ZWIsIDB4ZGUsIDB4MmYsIDB4OGEsIDB4MWUsIDB4NmIsIDB4N2IsIDB4MDcsIDB4NzIsIDB4NjMsIDB4MDksIDB4YTQsIDB4OGUsIDB4YzBdKSxcXG4gIFZQOTogbmV3IFVpbnQ4QXJyYXkoWzB4ODYsIDB4MDAsIDB4NDAsIDB4OTIsIDB4OWMsIDB4MjQsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NDBdKVxcbn0pO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCgpKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXk4Mng4MkgyNjRcXFwiLCB7XFxuICBJRnJhbWU6IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweDQyLCAweGMwLCAweDBkLCAweGRhLCAweDE4LCAweGRlLCAweDIyLCAweDIyLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDAzLCAweGM4LCAweGYxLCAweDQyLCAweGFhLFxcbiAgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhjZSwgMHgwZiwgMHhjOCxcXG4gIC8vIFBpY3R1cmUgcGFyYW1ldGVyIHNldFxcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNiwgMHgwM10uY29uY2F0KF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCgpKG5ldyBVaW50OEFycmF5KDQwKS5maWxsKDB4ZmYpKSwgWzB4NWZdLCBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc190b0NvbnN1bWFibGVBcnJheV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQoKShuZXcgVWludDhBcnJheSgxMDI5NSkuZmlsbCgweGZmKSksIFsweDgwLFxcbiAgLy8gU3VwcGxlbWVudGFsIGVuaGFuY2VtZW50IGluZm9ybWF0aW9uIChTRUkpXFxuICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY1LCAweDg4LCAweDg0LCAweDA1XSwgX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfdG9Db25zdW1hYmxlQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0KCkobmV3IFVpbnQ4QXJyYXkoMykuZmlsbCgweGZmKSksIFsweDBmLCAweDQ1LCAweDAwLCAweDAxLCAweDU3LCAweDlmLCAweDI3LCAweDI3LCAweDI3LCAweDI3LCAweDI3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc4XSkpLFxcbiAgLy8gU2xpY2UgbGF5ZXI6IElkciBkYXRhXFxuICBQRnJhbWU6IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA2LCAweDAzXS5jb25jYXQoX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfdG9Db25zdW1hYmxlQXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX19kZWZhdWx0KCkobmV3IFVpbnQ4QXJyYXkoNDApLmZpbGwoMHhmZikpLCBbMHhhNF0sIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX3RvQ29uc3VtYWJsZUFycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCgpKG5ldyBVaW50OEFycmF5KDEwMzY0KS5maWxsKDB4ZmYpKSwgWzB4ODAsXFxuICAvLyBTRUlcXG4gIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDEsIDB4OWEsIDB4MjAsIDB4MTUsIDB4ZjAsIDB4NGJdKSkgLy8gU2xpY2UgbGF5ZXI6IG5vbiBpZHIgZGF0YVxcbn0pO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCgpKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4XFxcIiwgMTA0MTgpO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19fZGVmYXVsdCgpKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIsIFxcXCJfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0XFxcIiwgMSk7XFxuX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0KCkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyXFxcIiwgX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2lzTW9iaWxlQ2hyb21lIHx8IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc1NhZmFyaSk7XFxuX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX19kZWZhdWx0KCkoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwgXFxcIl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyXFxcIiwgX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlMaWtlVG9BcnJheS5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheUxpa2VUb0FycmF5LmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoKG1vZHVsZSkgPT4ge1xcblxcbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcXG4gIChudWxsID09IGEgfHwgYSA+IHIubGVuZ3RoKSAmJiAoYSA9IHIubGVuZ3RoKTtcXG4gIGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdO1xcbiAgcmV0dXJuIG47XFxufVxcbm1vZHVsZS5leHBvcnRzID0gX2FycmF5TGlrZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcXFwiZGVmYXVsdFxcXCJdID0gbW9kdWxlLmV4cG9ydHM7XFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xcblxcbnZhciBhcnJheUxpa2VUb0FycmF5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hcnJheUxpa2VUb0FycmF5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanNcXFwiKTtcXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikge1xcbiAgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIpO1xcbn1cXG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1xcXCJkZWZhdWx0XFxcIl0gPSBtb2R1bGUuZXhwb3J0cztcXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoKG1vZHVsZSkgPT4ge1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhLCBuKSB7XFxuICBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpO1xcbn1cXG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjaywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1xcXCJkZWZhdWx0XFxcIl0gPSBtb2R1bGUuZXhwb3J0cztcXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qc1xcXCI6XFxuLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqLyAoKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSA9PiB7XFxuXFxudmFyIHRvUHJvcGVydHlLZXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL3RvUHJvcGVydHlLZXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Qcm9wZXJ0eUtleS5qc1xcXCIpO1xcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHtcXG4gIGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykge1xcbiAgICB2YXIgbyA9IHJbdF07XFxuICAgIG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXFxcInZhbHVlXFxcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pO1xcbiAgfVxcbn1cXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkge1xcbiAgcmV0dXJuIHIgJiYgX2RlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsIHIpLCB0ICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHQpLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXFxcInByb3RvdHlwZVxcXCIsIHtcXG4gICAgd3JpdGFibGU6ICExXFxuICB9KSwgZTtcXG59XFxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcXFwiZGVmYXVsdFxcXCJdID0gbW9kdWxlLmV4cG9ydHM7XFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xcblxcbnZhciB0b1Byb3BlcnR5S2V5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi90b1Byb3BlcnR5S2V5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanNcXFwiKTtcXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XFxuICAgIHZhbHVlOiB0LFxcbiAgICBlbnVtZXJhYmxlOiAhMCxcXG4gICAgY29uZmlndXJhYmxlOiAhMCxcXG4gICAgd3JpdGFibGU6ICEwXFxuICB9KSA6IGVbcl0gPSB0LCBlO1xcbn1cXG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1xcXCJkZWZhdWx0XFxcIl0gPSBtb2R1bGUuZXhwb3J0cztcXG5cXG4vKioqLyB9KSxcXG5cXG4vKioqLyBcXFwiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKChtb2R1bGUpID0+IHtcXG5cXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KHIpIHtcXG4gIGlmIChcXFwidW5kZWZpbmVkXFxcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcXFwiQEBpdGVyYXRvclxcXCJdKSByZXR1cm4gQXJyYXkuZnJvbShyKTtcXG59XFxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXFxcImRlZmF1bHRcXFwiXSA9IG1vZHVsZS5leHBvcnRzO1xcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlU3ByZWFkLmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovICgobW9kdWxlKSA9PiB7XFxuXFxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXFxcIik7XFxufVxcbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXFxcImRlZmF1bHRcXFwiXSA9IG1vZHVsZS5leHBvcnRzO1xcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovICgobW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pID0+IHtcXG5cXG52YXIgYXJyYXlXaXRob3V0SG9sZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL2FycmF5V2l0aG91dEhvbGVzLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzXFxcIik7XFxudmFyIGl0ZXJhYmxlVG9BcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vaXRlcmFibGVUb0FycmF5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheS5qc1xcXCIpO1xcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcXFwiKTtcXG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vbkl0ZXJhYmxlU3ByZWFkLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlU3ByZWFkLmpzXFxcIik7XFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHtcXG4gIHJldHVybiBhcnJheVdpdGhvdXRIb2xlcyhyKSB8fCBpdGVyYWJsZVRvQXJyYXkocikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcXG59XFxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcXFwiZGVmYXVsdFxcXCJdID0gbW9kdWxlLmV4cG9ydHM7XFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9QcmltaXRpdmUuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xcblxcbnZhciBfdHlwZW9mID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdHlwZW9mLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qc1xcXCIpW1xcXCJkZWZhdWx0XFxcIl0pO1xcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcXG4gIGlmIChcXFwib2JqZWN0XFxcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcXG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFxcXCJkZWZhdWx0XFxcIik7XFxuICAgIGlmIChcXFwib2JqZWN0XFxcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cXFwiKTtcXG4gIH1cXG4gIHJldHVybiAoXFxcInN0cmluZ1xcXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xcbn1cXG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJpbWl0aXZlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXFxcImRlZmF1bHRcXFwiXSA9IG1vZHVsZS5leHBvcnRzO1xcblxcbi8qKiovIH0pLFxcblxcbi8qKiovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Qcm9wZXJ0eUtleS5qcyAqKiohXFxuICBcXFxcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xcblxcbnZhciBfdHlwZW9mID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdHlwZW9mLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qc1xcXCIpW1xcXCJkZWZhdWx0XFxcIl0pO1xcbnZhciB0b1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4vdG9QcmltaXRpdmUuanMgKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9QcmltaXRpdmUuanNcXFwiKTtcXG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcXG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXFxcInN0cmluZ1xcXCIpO1xcbiAgcmV0dXJuIFxcXCJzeW1ib2xcXFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFxcXCJcXFwiO1xcbn1cXG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJvcGVydHlLZXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcXFwiZGVmYXVsdFxcXCJdID0gbW9kdWxlLmV4cG9ydHM7XFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzXFxcIjpcXG4vKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcXFxcXFxuICAhKioqIC4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKiovICgobW9kdWxlKSA9PiB7XFxuXFxuZnVuY3Rpb24gX3R5cGVvZihvKSB7XFxuICBcXFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcXFwiO1xcblxcbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFxcXCJmdW5jdGlvblxcXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcXFwic3ltYm9sXFxcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG8pIHtcXG4gICAgcmV0dXJuIHR5cGVvZiBvO1xcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XFxuICAgIHJldHVybiBvICYmIFxcXCJmdW5jdGlvblxcXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFxcXCJzeW1ib2xcXFwiIDogdHlwZW9mIG87XFxuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXFxcImRlZmF1bHRcXFwiXSA9IG1vZHVsZS5leHBvcnRzLCBfdHlwZW9mKG8pO1xcbn1cXG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcXFwiZGVmYXVsdFxcXCJdID0gbW9kdWxlLmV4cG9ydHM7XFxuXFxuLyoqKi8gfSksXFxuXFxuLyoqKi8gXFxcIi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcXFwiOlxcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXFxcXFxcbiAgISoqKiAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzICoqKiFcXG4gIFxcXFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKi8gKChtb2R1bGUsIF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykgPT4ge1xcblxcbnZhciBhcnJheUxpa2VUb0FycmF5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi9hcnJheUxpa2VUb0FycmF5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanNcXFwiKTtcXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkociwgYSkge1xcbiAgaWYgKHIpIHtcXG4gICAgaWYgKFxcXCJzdHJpbmdcXFwiID09IHR5cGVvZiByKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShyLCBhKTtcXG4gICAgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTtcXG4gICAgcmV0dXJuIFxcXCJPYmplY3RcXFwiID09PSB0ICYmIHIuY29uc3RydWN0b3IgJiYgKHQgPSByLmNvbnN0cnVjdG9yLm5hbWUpLCBcXFwiTWFwXFxcIiA9PT0gdCB8fCBcXFwiU2V0XFxcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcXFwiQXJndW1lbnRzXFxcIiA9PT0gdCB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSA/IGFycmF5TGlrZVRvQXJyYXkociwgYSkgOiB2b2lkIDA7XFxuICB9XFxufVxcbm1vZHVsZS5leHBvcnRzID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXFxcImRlZmF1bHRcXFwiXSA9IG1vZHVsZS5leHBvcnRzO1xcblxcbi8qKiovIH0pXFxuXFxuLyoqKioqKi8gXFx0fSk7XFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4vKioqKioqLyBcXHQvLyBUaGUgbW9kdWxlIGNhY2hlXFxuLyoqKioqKi8gXFx0dmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xcbi8qKioqKiovIFxcdFxcbi8qKioqKiovIFxcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXFxuLyoqKioqKi8gXFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xcbi8qKioqKiovIFxcdFxcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxcbi8qKioqKiovIFxcdFxcdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xcbi8qKioqKiovIFxcdFxcdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xcbi8qKioqKiovIFxcdFxcdFxcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcXG4vKioqKioqLyBcXHRcXHR9XFxuLyoqKioqKi8gXFx0XFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcXG4vKioqKioqLyBcXHRcXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcXG4vKioqKioqLyBcXHRcXHRcXHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXFxuLyoqKioqKi8gXFx0XFx0XFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcXG4vKioqKioqLyBcXHRcXHRcXHRleHBvcnRzOiB7fVxcbi8qKioqKiovIFxcdFxcdH07XFxuLyoqKioqKi8gXFx0XFxuLyoqKioqKi8gXFx0XFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXFxuLyoqKioqKi8gXFx0XFx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XFxuLyoqKioqKi8gXFx0XFxuLyoqKioqKi8gXFx0XFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcXG4vKioqKioqLyBcXHRcXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XFxuLyoqKioqKi8gXFx0fVxcbi8qKioqKiovIFxcdFxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKioqKi8gXFx0Lyogd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQgKi9cXG4vKioqKioqLyBcXHQoKCkgPT4ge1xcbi8qKioqKiovIFxcdFxcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXFxuLyoqKioqKi8gXFx0XFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xcbi8qKioqKiovIFxcdFxcdFxcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xcbi8qKioqKiovIFxcdFxcdFxcdFxcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxcbi8qKioqKiovIFxcdFxcdFxcdFxcdCgpID0+IChtb2R1bGUpO1xcbi8qKioqKiovIFxcdFxcdFxcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xcbi8qKioqKiovIFxcdFxcdFxcdHJldHVybiBnZXR0ZXI7XFxuLyoqKioqKi8gXFx0XFx0fTtcXG4vKioqKioqLyBcXHR9KSgpO1xcbi8qKioqKiovIFxcdFxcbi8qKioqKiovIFxcdC8qIHdlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyAqL1xcbi8qKioqKiovIFxcdCgoKSA9PiB7XFxuLyoqKioqKi8gXFx0XFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xcbi8qKioqKiovIFxcdFxcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XFxuLyoqKioqKi8gXFx0XFx0XFx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xcbi8qKioqKiovIFxcdFxcdFxcdFxcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xcbi8qKioqKiovIFxcdFxcdFxcdFxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XFxuLyoqKioqKi8gXFx0XFx0XFx0XFx0fVxcbi8qKioqKiovIFxcdFxcdFxcdH1cXG4vKioqKioqLyBcXHRcXHR9O1xcbi8qKioqKiovIFxcdH0pKCk7XFxuLyoqKioqKi8gXFx0XFxuLyoqKioqKi8gXFx0Lyogd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCAqL1xcbi8qKioqKiovIFxcdCgoKSA9PiB7XFxuLyoqKioqKi8gXFx0XFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKVxcbi8qKioqKiovIFxcdH0pKCk7XFxuLyoqKioqKi8gXFx0XFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IHt9O1xcbi8vIFRoaXMgZW50cnkgbmVlZCB0byBiZSB3cmFwcGVkIGluIGFuIElJRkUgYmVjYXVzZSBpdCBuZWVkIHRvIGJlIGluIHN0cmljdCBtb2RlLlxcbigoKSA9PiB7XFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlxcXFxcXG4gICEqKiogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/cnVsZVNldFsxXS5ydWxlc1sxXS51c2UhLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1RyYW5zZm9ybVN0cmVhbS53b3JrZXIudHMgKioqIVxcbiAgXFxcXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY2xhc3NDYWxsQ2hlY2tfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NyZWF0ZUNsYXNzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfY3JlYXRlQ2xhc3NfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzICovIFxcXCIuL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzXFxcIik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgKi8gXFxcIi4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLnRzXFxcIik7XFxuXFxuXFxuXFxuLyoqXFxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG4gKi9cXG5cXG52YXIgd29ya2VyID0gc2VsZjtcXG53b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uZm9yY2VJbnZhbGlkRnJhbWUgPSBldmVudC5kYXRhLmZvcmNlSW52YWxpZEZyYW1lO1xcbn07XFxuaWYgKHNlbGYuUlRDVHJhbnNmb3JtRXZlbnQpIHtcXG4gIHNlbGYub25ydGN0cmFuc2Zvcm0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgdmFyIHRyYW5zZm9ybWVyID0gZXZlbnQudHJhbnNmb3JtZXI7XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5jb2RlYyA9IHRyYW5zZm9ybWVyLm9wdGlvbnMuY29kZWM7XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS50cmFuc2Zvcm1GdW5jdGlvbiA9IHRyYW5zZm9ybWVyLm9wdGlvbnMua2luZCA9PT0gJ3ZpZGVvJyA/IFdvcmtlclRyYW5zZm9ybVN0cmVhbS52aWRlb1RyYW5zZm9ybUZ1bmN0aW9uIDogV29ya2VyVHJhbnNmb3JtU3RyZWFtLmF1ZGlvVHJhbnNmb3JtRnVuY3Rpb247XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5tdXN0U2luayA9IHRyYW5zZm9ybWVyLm9wdGlvbnMubXVzdFNpbms7XFxuICAgIFdvcmtlclRyYW5zZm9ybVN0cmVhbS5mb3JjZUludmFsaWRGcmFtZSA9IGZhbHNlO1xcbiAgICB2YXIgdHJhbnNmb3JtU3RyZWFtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7XFxuICAgICAgdHJhbnNmb3JtOiBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0udHJhbnNmb3JtRnVuY3Rpb25cXG4gICAgfSk7XFxuICAgIHZhciBzb3VyY2UgPSB0cmFuc2Zvcm1lci5yZWFkYWJsZTtcXG4gICAgdmFyIHNpbmsgPSB0cmFuc2Zvcm1lci53cml0YWJsZTtcXG4gICAgc291cmNlLnBpcGVUaHJvdWdoKHRyYW5zZm9ybVN0cmVhbSkucGlwZVRvKHNpbmspO1xcbiAgfTtcXG59XFxudmFyIFdvcmtlclRyYW5zZm9ybVN0cmVhbSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0oKSB7XFxuICAgIF9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2NsYXNzQ2FsbENoZWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19fZGVmYXVsdCgpKHRoaXMsIFdvcmtlclRyYW5zZm9ybVN0cmVhbSk7XFxuICAgIHRocm93IG5ldyBFcnJvcignV29ya2VyVHJhbnNmb3JtU3RyZWFtIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcXG4gIH1cXG4gIHJldHVybiBfVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19jcmVhdGVDbGFzc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fX2RlZmF1bHQoKShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0sIG51bGwsIFt7XFxuICAgIGtleTogXFxcInZpZGVvVHJhbnNmb3JtRnVuY3Rpb25cXFwiLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmlkZW9UcmFuc2Zvcm1GdW5jdGlvbihjaHVuaywgY29udHJvbGxlcikge1xcbiAgICAgIHBvc3RNZXNzYWdlKHtcXG4gICAgICAgIGNodW5rOiB7XFxuICAgICAgICAgIHR5cGU6IGNodW5rLnR5cGUsXFxuICAgICAgICAgIHRpbWVzdGFtcDogY2h1bmsudGltZXN0YW1wLFxcbiAgICAgICAgICBkYXRhOiBjaHVuay5kYXRhXFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgICAgaWYgKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5tdXN0U2luaykge1xcbiAgICAgICAgaWYgKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5mb3JjZUludmFsaWRGcmFtZSkge1xcbiAgICAgICAgICB2YXIgc3Vycm9nYXRlO1xcbiAgICAgICAgICBXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uZm9yY2VJbnZhbGlkRnJhbWUgPSBmYWxzZTtcXG4gICAgICAgICAgaWYgKGNodW5rLnR5cGUgPT09ICdrZXknKSB7XFxuICAgICAgICAgICAgc3Vycm9nYXRlID0gX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdLmdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uY29kZWMpO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXS5nZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUoV29ya2VyVHJhbnNmb3JtU3RyZWFtLmNvZGVjKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBpZiAoc3Vycm9nYXRlID09PSBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fLlNraXBGcmFtZSkge1xcbiAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBjaHVuay5kYXRhID0gc3Vycm9nYXRlIHx8IGNodW5rLmRhdGE7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICBpZiAoY2h1bmsudHlwZSA9PT0gJ2tleScpIHtcXG4gICAgICAgICAgICBjaHVuay5kYXRhID0gX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1tcXFwiZGVmYXVsdFxcXCJdLmdldFN1cnJvZ2F0ZVZpZGVvSUZyYW1lUGVyQ29kZWMoV29ya2VyVHJhbnNmb3JtU3RyZWFtLmNvZGVjKSB8fCBjaHVuay5kYXRhO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGNodW5rLmRhdGEgPSBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0uZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyhXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uY29kZWMpIHx8IGNodW5rLmRhdGE7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6IFxcXCJhdWRpb1RyYW5zZm9ybUZ1bmN0aW9uXFxcIixcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGF1ZGlvVHJhbnNmb3JtRnVuY3Rpb24oY2h1bmssIGNvbnRyb2xsZXIpIHtcXG4gICAgICBwb3N0TWVzc2FnZSh7XFxuICAgICAgICBjaHVuazoge1xcbiAgICAgICAgICB0aW1lc3RhbXA6IGNodW5rLnRpbWVzdGFtcCxcXG4gICAgICAgICAgZGF0YTogY2h1bmsuZGF0YVxcbiAgICAgICAgfVxcbiAgICAgIH0pO1xcbiAgICAgIGlmIChXb3JrZXJUcmFuc2Zvcm1TdHJlYW0ubXVzdFNpbmspIHtcXG4gICAgICAgIGlmIChXb3JrZXJUcmFuc2Zvcm1TdHJlYW0uZm9yY2VJbnZhbGlkRnJhbWUpIHtcXG4gICAgICAgICAgV29ya2VyVHJhbnNmb3JtU3RyZWFtLmZvcmNlSW52YWxpZEZyYW1lID0gZmFsc2U7XFxuICAgICAgICAgIGNodW5rLmRhdGEgPSBfU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fW1xcXCJkZWZhdWx0XFxcIl0uZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSgpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgY2h1bmsuZGF0YSA9IF9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bXFxcImRlZmF1bHRcXFwiXS5nZXRTdXJyb2dhdGVBdWRpb1NpbGVudFBlckNvZGVjKFdvcmtlclRyYW5zZm9ybVN0cmVhbS5jb2RlYykgfHwgY2h1bmsuZGF0YTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcXG4gICAgfVxcbiAgfV0pO1xcbn0oKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0sIFxcXCJjb2RlY1xcXCIsIHZvaWQgMCk7XFxuX1VzZXJzX3RlYW1jaXR5X2J1aWxkQWdlbnRfd29ya181NDU0M2YwNGIyNTNkMGNjX25vZGVfbW9kdWxlc19iYWJlbF9ydW50aW1lX2hlbHBlcnNfZGVmaW5lUHJvcGVydHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0KCkoV29ya2VyVHJhbnNmb3JtU3RyZWFtLCBcXFwidHJhbnNmb3JtRnVuY3Rpb25cXFwiLCB2b2lkIDApO1xcbl9Vc2Vyc190ZWFtY2l0eV9idWlsZEFnZW50X3dvcmtfNTQ1NDNmMDRiMjUzZDBjY19ub2RlX21vZHVsZXNfYmFiZWxfcnVudGltZV9oZWxwZXJzX2RlZmluZVByb3BlcnR5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19fZGVmYXVsdCgpKFdvcmtlclRyYW5zZm9ybVN0cmVhbSwgXFxcIm11c3RTaW5rXFxcIiwgdm9pZCAwKTtcXG5fVXNlcnNfdGVhbWNpdHlfYnVpbGRBZ2VudF93b3JrXzU0NTQzZjA0YjI1M2QwY2Nfbm9kZV9tb2R1bGVzX2JhYmVsX3J1bnRpbWVfaGVscGVyc19kZWZpbmVQcm9wZXJ0eV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fX2RlZmF1bHQoKShXb3JrZXJUcmFuc2Zvcm1TdHJlYW0sIFxcXCJmb3JjZUludmFsaWRGcmFtZVxcXCIsIHZvaWQgMCk7XFxuLyogdW51c2VkIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIF9fV0VCUEFDS19ERUZBVUxUX0VYUE9SVF9fID0gKG51bGwpO1xcbn0pKCk7XFxuXFxuLyoqKioqKi8gfSkoKVxcbjtcXG5cIiwgXCJXb3JrZXJcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiwgbm8tdXNlLWJlZm9yZS1kZWZpbmUsIG5ldy1jYXAgKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbnRlbnQsIHdvcmtlckNvbnN0cnVjdG9yLCB3b3JrZXJPcHRpb25zLCB1cmwpIHtcbiAgdmFyIGdsb2JhbFNjb3BlID0gc2VsZiB8fCB3aW5kb3c7XG5cbiAgdHJ5IHtcbiAgICB0cnkge1xuICAgICAgdmFyIGJsb2I7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIE5ldyBBUElcbiAgICAgICAgYmxvYiA9IG5ldyBnbG9iYWxTY29wZS5CbG9iKFtjb250ZW50XSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIEJsb2JCdWlsZGVyID0gRGVwcmVjYXRlZCwgYnV0IHdpZGVseSBpbXBsZW1lbnRlZFxuICAgICAgICB2YXIgQmxvYkJ1aWxkZXIgPSBnbG9iYWxTY29wZS5CbG9iQnVpbGRlciB8fCBnbG9iYWxTY29wZS5XZWJLaXRCbG9iQnVpbGRlciB8fCBnbG9iYWxTY29wZS5Nb3pCbG9iQnVpbGRlciB8fCBnbG9iYWxTY29wZS5NU0Jsb2JCdWlsZGVyO1xuICAgICAgICBibG9iID0gbmV3IEJsb2JCdWlsZGVyKCk7XG4gICAgICAgIGJsb2IuYXBwZW5kKGNvbnRlbnQpO1xuICAgICAgICBibG9iID0gYmxvYi5nZXRCbG9iKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBVUkwgPSBnbG9iYWxTY29wZS5VUkwgfHwgZ2xvYmFsU2NvcGUud2Via2l0VVJMO1xuICAgICAgdmFyIG9iamVjdFVSTCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICB2YXIgd29ya2VyID0gbmV3IGdsb2JhbFNjb3BlW3dvcmtlckNvbnN0cnVjdG9yXShvYmplY3RVUkwsIHdvcmtlck9wdGlvbnMpO1xuICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChvYmplY3RVUkwpO1xuICAgICAgcmV0dXJuIHdvcmtlcjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbmV3IGdsb2JhbFNjb3BlW3dvcmtlckNvbnN0cnVjdG9yXShcImRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdCxcIi5jb25jYXQoZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQpKSwgd29ya2VyT3B0aW9ucyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHRocm93IEVycm9yKFwiSW5saW5lIHdvcmtlciBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgZ2xvYmFsU2NvcGVbd29ya2VyQ29uc3RydWN0b3JdKHVybCwgd29ya2VyT3B0aW9ucyk7XG4gIH1cbn07IiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkociwgYSkge1xuICAobnVsbCA9PSBhIHx8IGEgPiByLmxlbmd0aCkgJiYgKGEgPSByLmxlbmd0aCk7XG4gIGZvciAodmFyIGUgPSAwLCBuID0gQXJyYXkoYSk7IGUgPCBhOyBlKyspIG5bZV0gPSByW2VdO1xuICByZXR1cm4gbjtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5TGlrZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMocikge1xuICBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIHI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHIpKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShyKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aG91dEhvbGVzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7XG4gIGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgcmV0dXJuIGU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAobiwgdCwgZSwgciwgbywgYSwgYykge1xuICB0cnkge1xuICAgIHZhciBpID0gblthXShjKSxcbiAgICAgIHUgPSBpLnZhbHVlO1xuICB9IGNhdGNoIChuKSB7XG4gICAgcmV0dXJuIHZvaWQgZShuKTtcbiAgfVxuICBpLmRvbmUgPyB0KHUpIDogUHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4ociwgbyk7XG59XG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHQgPSB0aGlzLFxuICAgICAgZSA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHIsIG8pIHtcbiAgICAgIHZhciBhID0gbi5hcHBseSh0LCBlKTtcbiAgICAgIGZ1bmN0aW9uIF9uZXh0KG4pIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGEsIHIsIG8sIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCBuKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF90aHJvdyhuKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChhLCByLCBvLCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIG4pO1xuICAgICAgfVxuICAgICAgX25leHQodm9pZCAwKTtcbiAgICB9KTtcbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2FzeW5jVG9HZW5lcmF0b3IsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soYSwgbikge1xuICBpZiAoIShhIGluc3RhbmNlb2YgbikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jbGFzc0NhbGxDaGVjaywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZShcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKGUsIHIpIHtcbiAgZm9yICh2YXIgdCA9IDA7IHQgPCByLmxlbmd0aDsgdCsrKSB7XG4gICAgdmFyIG8gPSByW3RdO1xuICAgIG8uZW51bWVyYWJsZSA9IG8uZW51bWVyYWJsZSB8fCAhMSwgby5jb25maWd1cmFibGUgPSAhMCwgXCJ2YWx1ZVwiIGluIG8gJiYgKG8ud3JpdGFibGUgPSAhMCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCB0b1Byb3BlcnR5S2V5KG8ua2V5KSwgbyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhlLCByLCB0KSB7XG4gIHJldHVybiByICYmIF9kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLCByKSwgdCAmJiBfZGVmaW5lUHJvcGVydGllcyhlLCB0KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9jcmVhdGVDbGFzcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZShcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG4gIHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xuICAgIHZhbHVlOiB0LFxuICAgIGVudW1lcmFibGU6ICEwLFxuICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgd3JpdGFibGU6ICEwXG4gIH0pIDogZVtyXSA9IHQsIGU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9kZWZpbmVQcm9wZXJ0eSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZih0KSB7XG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0Ll9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgX2dldFByb3RvdHlwZU9mKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcbmZ1bmN0aW9uIF9pbmhlcml0cyh0LCBlKSB7XG4gIGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUgJiYgbnVsbCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZSAmJiBlLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogdCxcbiAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICB9XG4gIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiAhMVxuICB9KSwgZSAmJiBzZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShyKSB7XG4gIGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByW1N5bWJvbC5pdGVyYXRvcl0gfHwgbnVsbCAhPSByW1wiQEBpdGVyYXRvclwiXSkgcmV0dXJuIEFycmF5LmZyb20ocik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkge1xuICB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSB0KSB7XG4gICAgdmFyIGUsXG4gICAgICBuLFxuICAgICAgaSxcbiAgICAgIHUsXG4gICAgICBhID0gW10sXG4gICAgICBmID0gITAsXG4gICAgICBvID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHtcbiAgICAgICAgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuO1xuICAgICAgICBmID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgbyA9ICEwLCBuID0gcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmICYmIG51bGwgIT0gdFtcInJldHVyblwiXSAmJiAodSA9IHRbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG8pIHRocm93IG47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVJlc3QsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCIpO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odCwgZSkge1xuICBpZiAoZSAmJiAoXCJvYmplY3RcIiA9PSBfdHlwZW9mKGUpIHx8IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSkpIHJldHVybiBlO1xuICBpZiAodm9pZCAwICE9PSBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIHJldHVybiBhc3NlcnRUaGlzSW5pdGlhbGl6ZWQodCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xuZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7IC8qISByZWdlbmVyYXRvci1ydW50aW1lIC0tIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLiAtLSBsaWNlbnNlIChNSVQpOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL0xJQ0VOU0UgKi9cbiAgbW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lID0gZnVuY3Rpb24gX3JlZ2VuZXJhdG9yUnVudGltZSgpIHtcbiAgICByZXR1cm4gZTtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzO1xuICB2YXIgdCxcbiAgICBlID0ge30sXG4gICAgciA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgbiA9IHIuaGFzT3duUHJvcGVydHksXG4gICAgbyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBmdW5jdGlvbiAodCwgZSwgcikge1xuICAgICAgdFtlXSA9IHIudmFsdWU7XG4gICAgfSxcbiAgICBpID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgPyBTeW1ib2wgOiB7fSxcbiAgICBhID0gaS5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIixcbiAgICBjID0gaS5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCIsXG4gICAgdSA9IGkudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG4gIGZ1bmN0aW9uIGRlZmluZSh0LCBlLCByKSB7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBlLCB7XG4gICAgICB2YWx1ZTogcixcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgIHdyaXRhYmxlOiAhMFxuICAgIH0pLCB0W2VdO1xuICB9XG4gIHRyeSB7XG4gICAgZGVmaW5lKHt9LCBcIlwiKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uIGRlZmluZSh0LCBlLCByKSB7XG4gICAgICByZXR1cm4gdFtlXSA9IHI7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB3cmFwKHQsIGUsIHIsIG4pIHtcbiAgICB2YXIgaSA9IGUgJiYgZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBlIDogR2VuZXJhdG9yLFxuICAgICAgYSA9IE9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLFxuICAgICAgYyA9IG5ldyBDb250ZXh0KG4gfHwgW10pO1xuICAgIHJldHVybiBvKGEsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogbWFrZUludm9rZU1ldGhvZCh0LCByLCBjKVxuICAgIH0pLCBhO1xuICB9XG4gIGZ1bmN0aW9uIHRyeUNhdGNoKHQsIGUsIHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICAgICAgYXJnOiB0LmNhbGwoZSwgcilcbiAgICAgIH07XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ0aHJvd1wiLFxuICAgICAgICBhcmc6IHRcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGUud3JhcCA9IHdyYXA7XG4gIHZhciBoID0gXCJzdXNwZW5kZWRTdGFydFwiLFxuICAgIGwgPSBcInN1c3BlbmRlZFlpZWxkXCIsXG4gICAgZiA9IFwiZXhlY3V0aW5nXCIsXG4gICAgcyA9IFwiY29tcGxldGVkXCIsXG4gICAgeSA9IHt9O1xuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cbiAgdmFyIHAgPSB7fTtcbiAgZGVmaW5lKHAsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIHZhciBkID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLFxuICAgIHYgPSBkICYmIGQoZCh2YWx1ZXMoW10pKSk7XG4gIHYgJiYgdiAhPT0gciAmJiBuLmNhbGwodiwgYSkgJiYgKHAgPSB2KTtcbiAgdmFyIGcgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPSBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShwKTtcbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHQpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgZGVmaW5lKHQsIGUsIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UoZSwgdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKHQsIGUpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UociwgbywgaSwgYSkge1xuICAgICAgdmFyIGMgPSB0cnlDYXRjaCh0W3JdLCB0LCBvKTtcbiAgICAgIGlmIChcInRocm93XCIgIT09IGMudHlwZSkge1xuICAgICAgICB2YXIgdSA9IGMuYXJnLFxuICAgICAgICAgIGggPSB1LnZhbHVlO1xuICAgICAgICByZXR1cm4gaCAmJiBcIm9iamVjdFwiID09IF90eXBlb2YoaCkgJiYgbi5jYWxsKGgsIFwiX19hd2FpdFwiKSA/IGUucmVzb2x2ZShoLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHQsIGksIGEpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGludm9rZShcInRocm93XCIsIHQsIGksIGEpO1xuICAgICAgICB9KSA6IGUucmVzb2x2ZShoKS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgdS52YWx1ZSA9IHQsIGkodSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIHQsIGksIGEpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGEoYy5hcmcpO1xuICAgIH1cbiAgICB2YXIgcjtcbiAgICBvKHRoaXMsIFwiX2ludm9rZVwiLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodCwgbikge1xuICAgICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IGUoZnVuY3Rpb24gKGUsIHIpIHtcbiAgICAgICAgICAgIGludm9rZSh0LCBuLCBlLCByKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gciA9IHIgPyByLnRoZW4oY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChlLCByLCBuKSB7XG4gICAgdmFyIG8gPSBoO1xuICAgIHJldHVybiBmdW5jdGlvbiAoaSwgYSkge1xuICAgICAgaWYgKG8gPT09IGYpIHRocm93IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIGlmIChvID09PSBzKSB7XG4gICAgICAgIGlmIChcInRocm93XCIgPT09IGkpIHRocm93IGE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IHQsXG4gICAgICAgICAgZG9uZTogITBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZvciAobi5tZXRob2QgPSBpLCBuLmFyZyA9IGE7Oykge1xuICAgICAgICB2YXIgYyA9IG4uZGVsZWdhdGU7XG4gICAgICAgIGlmIChjKSB7XG4gICAgICAgICAgdmFyIHUgPSBtYXliZUludm9rZURlbGVnYXRlKGMsIG4pO1xuICAgICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgICBpZiAodSA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gdTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwibmV4dFwiID09PSBuLm1ldGhvZCkgbi5zZW50ID0gbi5fc2VudCA9IG4uYXJnO2Vsc2UgaWYgKFwidGhyb3dcIiA9PT0gbi5tZXRob2QpIHtcbiAgICAgICAgICBpZiAobyA9PT0gaCkgdGhyb3cgbyA9IHMsIG4uYXJnO1xuICAgICAgICAgIG4uZGlzcGF0Y2hFeGNlcHRpb24obi5hcmcpO1xuICAgICAgICB9IGVsc2UgXCJyZXR1cm5cIiA9PT0gbi5tZXRob2QgJiYgbi5hYnJ1cHQoXCJyZXR1cm5cIiwgbi5hcmcpO1xuICAgICAgICBvID0gZjtcbiAgICAgICAgdmFyIHAgPSB0cnlDYXRjaChlLCByLCBuKTtcbiAgICAgICAgaWYgKFwibm9ybWFsXCIgPT09IHAudHlwZSkge1xuICAgICAgICAgIGlmIChvID0gbi5kb25lID8gcyA6IGwsIHAuYXJnID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHAuYXJnLFxuICAgICAgICAgICAgZG9uZTogbi5kb25lXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcInRocm93XCIgPT09IHAudHlwZSAmJiAobyA9IHMsIG4ubWV0aG9kID0gXCJ0aHJvd1wiLCBuLmFyZyA9IHAuYXJnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgcikge1xuICAgIHZhciBuID0gci5tZXRob2QsXG4gICAgICBvID0gZS5pdGVyYXRvcltuXTtcbiAgICBpZiAobyA9PT0gdCkgcmV0dXJuIHIuZGVsZWdhdGUgPSBudWxsLCBcInRocm93XCIgPT09IG4gJiYgZS5pdGVyYXRvcltcInJldHVyblwiXSAmJiAoci5tZXRob2QgPSBcInJldHVyblwiLCByLmFyZyA9IHQsIG1heWJlSW52b2tlRGVsZWdhdGUoZSwgciksIFwidGhyb3dcIiA9PT0gci5tZXRob2QpIHx8IFwicmV0dXJuXCIgIT09IG4gJiYgKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICdcIiArIG4gKyBcIicgbWV0aG9kXCIpKSwgeTtcbiAgICB2YXIgaSA9IHRyeUNhdGNoKG8sIGUuaXRlcmF0b3IsIHIuYXJnKTtcbiAgICBpZiAoXCJ0aHJvd1wiID09PSBpLnR5cGUpIHJldHVybiByLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBpLmFyZywgci5kZWxlZ2F0ZSA9IG51bGwsIHk7XG4gICAgdmFyIGEgPSBpLmFyZztcbiAgICByZXR1cm4gYSA/IGEuZG9uZSA/IChyW2UucmVzdWx0TmFtZV0gPSBhLnZhbHVlLCByLm5leHQgPSBlLm5leHRMb2MsIFwicmV0dXJuXCIgIT09IHIubWV0aG9kICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCByLmRlbGVnYXRlID0gbnVsbCwgeSkgOiBhIDogKHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeSh0KSB7XG4gICAgdmFyIGUgPSB7XG4gICAgICB0cnlMb2M6IHRbMF1cbiAgICB9O1xuICAgIDEgaW4gdCAmJiAoZS5jYXRjaExvYyA9IHRbMV0pLCAyIGluIHQgJiYgKGUuZmluYWxseUxvYyA9IHRbMl0sIGUuYWZ0ZXJMb2MgPSB0WzNdKSwgdGhpcy50cnlFbnRyaWVzLnB1c2goZSk7XG4gIH1cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeSh0KSB7XG4gICAgdmFyIGUgPSB0LmNvbXBsZXRpb24gfHwge307XG4gICAgZS50eXBlID0gXCJub3JtYWxcIiwgZGVsZXRlIGUuYXJnLCB0LmNvbXBsZXRpb24gPSBlO1xuICB9XG4gIGZ1bmN0aW9uIENvbnRleHQodCkge1xuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7XG4gICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgfV0sIHQuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpLCB0aGlzLnJlc2V0KCEwKTtcbiAgfVxuICBmdW5jdGlvbiB2YWx1ZXMoZSkge1xuICAgIGlmIChlIHx8IFwiXCIgPT09IGUpIHtcbiAgICAgIHZhciByID0gZVthXTtcbiAgICAgIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZS5uZXh0KSByZXR1cm4gZTtcbiAgICAgIGlmICghaXNOYU4oZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBvID0gLTEsXG4gICAgICAgICAgaSA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICBmb3IgKDsgKytvIDwgZS5sZW5ndGg7KSBpZiAobi5jYWxsKGUsIG8pKSByZXR1cm4gbmV4dC52YWx1ZSA9IGVbb10sIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgICAgICAgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaS5uZXh0ID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihfdHlwZW9mKGUpICsgXCIgaXMgbm90IGl0ZXJhYmxlXCIpO1xuICB9XG4gIHJldHVybiBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgbyhnLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgbyhHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gZGVmaW5lKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCB1LCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpLCBlLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiB0ICYmIHQuY29uc3RydWN0b3I7XG4gICAgcmV0dXJuICEhZSAmJiAoZSA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHwgXCJHZW5lcmF0b3JGdW5jdGlvblwiID09PSAoZS5kaXNwbGF5TmFtZSB8fCBlLm5hbWUpKTtcbiAgfSwgZS5tYXJrID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHQsIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKSA6ICh0Ll9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBkZWZpbmUodCwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShnKSwgdDtcbiAgfSwgZS5hd3JhcCA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fYXdhaXQ6IHRcbiAgICB9O1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpLCBkZWZpbmUoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUsIGMsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3IsIGUuYXN5bmMgPSBmdW5jdGlvbiAodCwgciwgbiwgbywgaSkge1xuICAgIHZvaWQgMCA9PT0gaSAmJiAoaSA9IFByb21pc2UpO1xuICAgIHZhciBhID0gbmV3IEFzeW5jSXRlcmF0b3Iod3JhcCh0LCByLCBuLCBvKSwgaSk7XG4gICAgcmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKSA/IGEgOiBhLm5leHQoKS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5kb25lID8gdC52YWx1ZSA6IGEubmV4dCgpO1xuICAgIH0pO1xuICB9LCBkZWZpbmVJdGVyYXRvck1ldGhvZHMoZyksIGRlZmluZShnLCB1LCBcIkdlbmVyYXRvclwiKSwgZGVmaW5lKGcsIGEsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGRlZmluZShnLCBcInRvU3RyaW5nXCIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSksIGUua2V5cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBPYmplY3QodCksXG4gICAgICByID0gW107XG4gICAgZm9yICh2YXIgbiBpbiBlKSByLnB1c2gobik7XG4gICAgcmV0dXJuIHIucmV2ZXJzZSgpLCBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgZm9yICg7IHIubGVuZ3RoOykge1xuICAgICAgICB2YXIgdCA9IHIucG9wKCk7XG4gICAgICAgIGlmICh0IGluIGUpIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgfTtcbiAgfSwgZS52YWx1ZXMgPSB2YWx1ZXMsIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChlKSB7XG4gICAgICBpZiAodGhpcy5wcmV2ID0gMCwgdGhpcy5uZXh0ID0gMCwgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHQsIHRoaXMuZG9uZSA9ICExLCB0aGlzLmRlbGVnYXRlID0gbnVsbCwgdGhpcy5tZXRob2QgPSBcIm5leHRcIiwgdGhpcy5hcmcgPSB0LCB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KSwgIWUpIGZvciAodmFyIHIgaW4gdGhpcykgXCJ0XCIgPT09IHIuY2hhckF0KDApICYmIG4uY2FsbCh0aGlzLCByKSAmJiAhaXNOYU4oK3Iuc2xpY2UoMSkpICYmICh0aGlzW3JdID0gdCk7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgdGhpcy5kb25lID0gITA7XG4gICAgICB2YXIgdCA9IHRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO1xuICAgICAgaWYgKFwidGhyb3dcIiA9PT0gdC50eXBlKSB0aHJvdyB0LmFyZztcbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZSkge1xuICAgICAgaWYgKHRoaXMuZG9uZSkgdGhyb3cgZTtcbiAgICAgIHZhciByID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShuLCBvKSB7XG4gICAgICAgIHJldHVybiBhLnR5cGUgPSBcInRocm93XCIsIGEuYXJnID0gZSwgci5uZXh0ID0gbiwgbyAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgISFvO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgbyA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBvID49IDA7IC0tbykge1xuICAgICAgICB2YXIgaSA9IHRoaXMudHJ5RW50cmllc1tvXSxcbiAgICAgICAgICBhID0gaS5jb21wbGV0aW9uO1xuICAgICAgICBpZiAoXCJyb290XCIgPT09IGkudHJ5TG9jKSByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICBpZiAoaS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGMgPSBuLmNhbGwoaSwgXCJjYXRjaExvY1wiKSxcbiAgICAgICAgICAgIHUgPSBuLmNhbGwoaSwgXCJmaW5hbGx5TG9jXCIpO1xuICAgICAgICAgIGlmIChjICYmIHUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmNhdGNoTG9jKSByZXR1cm4gaGFuZGxlKGkuY2F0Y2hMb2MsICEwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF1KSB0aHJvdyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodCwgZSkge1xuICAgICAgZm9yICh2YXIgciA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyByID49IDA7IC0tcikge1xuICAgICAgICB2YXIgbyA9IHRoaXMudHJ5RW50cmllc1tyXTtcbiAgICAgICAgaWYgKG8udHJ5TG9jIDw9IHRoaXMucHJldiAmJiBuLmNhbGwobywgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IG8uZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBpID0gbztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaSAmJiAoXCJicmVha1wiID09PSB0IHx8IFwiY29udGludWVcIiA9PT0gdCkgJiYgaS50cnlMb2MgPD0gZSAmJiBlIDw9IGkuZmluYWxseUxvYyAmJiAoaSA9IG51bGwpO1xuICAgICAgdmFyIGEgPSBpID8gaS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gYS50eXBlID0gdCwgYS5hcmcgPSBlLCBpID8gKHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMubmV4dCA9IGkuZmluYWxseUxvYywgeSkgOiB0aGlzLmNvbXBsZXRlKGEpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHQsIGUpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gXCJicmVha1wiID09PSB0LnR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0LnR5cGUgPyB0aGlzLm5leHQgPSB0LmFyZyA6IFwicmV0dXJuXCIgPT09IHQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHQuYXJnLCB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCIsIHRoaXMubmV4dCA9IFwiZW5kXCIpIDogXCJub3JtYWxcIiA9PT0gdC50eXBlICYmIGUgJiYgKHRoaXMubmV4dCA9IGUpLCB5O1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2godCkge1xuICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMudHJ5RW50cmllc1tlXTtcbiAgICAgICAgaWYgKHIuZmluYWxseUxvYyA9PT0gdCkgcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLCByLmFmdGVyTG9jKSwgcmVzZXRUcnlFbnRyeShyKSwgeTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24gX2NhdGNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLnRyeUxvYyA9PT0gdCkge1xuICAgICAgICAgIHZhciBuID0gci5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChcInRocm93XCIgPT09IG4udHlwZSkge1xuICAgICAgICAgICAgdmFyIG8gPSBuLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkocik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoZSwgciwgbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHIsXG4gICAgICAgIG5leHRMb2M6IG5cbiAgICAgIH0sIFwibmV4dFwiID09PSB0aGlzLm1ldGhvZCAmJiAodGhpcy5hcmcgPSB0KSwgeTtcbiAgICB9XG4gIH0sIGU7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9yZWdlbmVyYXRvclJ1bnRpbWUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkge1xuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0O1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIF9zZXRQcm90b3R5cGVPZih0LCBlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlUmVzdCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiKTtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KHIsIGUpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGUpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGUpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfc2xpY2VkVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheVdpdGhvdXRIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aG91dEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWQuanNcIik7XG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocikge1xuICByZXR1cm4gYXJyYXlXaXRob3V0SG9sZXMocikgfHwgaXRlcmFibGVUb0FycmF5KHIpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIpIHx8IG5vbkl0ZXJhYmxlU3ByZWFkKCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90b0NvbnN1bWFibGVBcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJpbWl0aXZlLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZShcIi4vdG9QcmltaXRpdmUuanNcIik7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbm1vZHVsZS5leHBvcnRzID0gdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBfdHlwZW9mKG8pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5TGlrZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCIpO1xuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIsIGEpIHtcbiAgaWYgKHIpIHtcbiAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgcikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkociwgYSk7XG4gICAgdmFyIHQgPSB7fS50b1N0cmluZy5jYWxsKHIpLnNsaWNlKDgsIC0xKTtcbiAgICByZXR1cm4gXCJPYmplY3RcIiA9PT0gdCAmJiByLmNvbnN0cnVjdG9yICYmICh0ID0gci5jb25zdHJ1Y3Rvci5uYW1lKSwgXCJNYXBcIiA9PT0gdCB8fCBcIlNldFwiID09PSB0ID8gQXJyYXkuZnJvbShyKSA6IFwiQXJndW1lbnRzXCIgPT09IHQgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkgPyBhcnJheUxpa2VUb0FycmF5KHIsIGEpIDogdm9pZCAwO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIi8vIFRPRE8oQmFiZWwgOCk6IFJlbW92ZSB0aGlzIGZpbGUuXG5cbnZhciBydW50aW1lID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lXCIpKCk7XG5tb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cbi8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9ibG9iL21haW4vcGFja2FnZXMvcnVudGltZS9ydW50aW1lLmpzI0w3MzY9XG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IENoYW5uZWxzIGZyb20gJy4vQ2hhbm5lbHMnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuL0NoYW5uZWxTdGF0ZSc7XG5cbmV4cG9ydCB7XG4gIFNESyxcbiAgQ2hhbm5lbHMsXG4gIENoYW5uZWxTdGF0ZVxufTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07Il0sIm5hbWVzIjpbIkdsb2JhbFNjb3BlIiwiRGlzcG9zYWJsZSIsIkRpc3Bvc2FibGVMaXN0IiwiU3ViamVjdCIsIlJlYWRPbmx5U3ViamVjdCIsInZpc2liaWxpdHlDaGFuZ2VFdmVudCIsIkFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiRGF0ZSIsIm5vdyIsIl9pc0ZvcmVncm91bmQiLCJfcmVhZE9ubHlJc0ZvcmVncm91bmQiLCJpbml0aWFsaXplIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwiZ2V0IiwidmFsdWUiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsImRpc3Bvc2UiLCJfZGlzcG9zYWJsZXMiLCJfdGhpcyIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudElzSGlkZGVuIiwidXNlRXZlbnRDYXB0dXJlUGhhc2UiLCJhZGREb2N1bWVudEV2ZW50TGlzdGVuZXIiLCJhZGQiLCJyZW1vdmVEb2N1bWVudEV2ZW50TGlzdGVuZXIiLCJkZWZhdWx0IiwiQnJvd3NlckRldGVjdG9yIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIl9icm93c2VyTmFtZSIsIl9icm93c2VyTWFqb3JWZXJzaW9uIiwiX2lzQW5kcm9pZCIsIl9pc0Nocm9tZTY5IiwiX2lzQ2hyb21lNzAiLCJfaXNDaHJvbWU3MSIsIl9pc0Nocm9tZTcyIiwiX2lzQ2hyb21lNzQiLCJfaXNDaHJvbWU3NSIsIl9pc0Nocm9tZTc2IiwiX2lzQ2hyb21lNzciLCJpc01vYmlsZSIsIl9pc01vYmlsZSIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJfQnJvd3NlckRldGVjdG9yIiwidGVzdCIsIl9uYXZpZ2F0b3IiLCJfbmF2aWdhdG9yMiIsImluY2x1ZGVzIiwiTG9nZ2VyRGVmYXVsdHMiLCJMb2dnaW5nTGV2ZWxNYXBwaW5nIiwiVGVsZW1ldHJ5RGVmYXVsdCIsIlRlbGVtZXRyeUxldmVsTWFwcGluZyIsIkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJnZXRTdHJpbmdWYWx1ZSIsIm5hbWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImdldEJvb2xlYW5WYWx1ZSIsInZhbHVlRnJvbVVyaSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSIsImRlZmF1bHRUZWxlbWV0cnlMZXZlbCIsImNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUiLCJkZWZhdWx0TG9nZ2luZ0xldmVsIiwiZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwiLCJkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsIiwibWV0YVZhbHVlIiwiZG9jdW1lbnRRdWVyeVNlbGVjdG9yIiwiZ2V0QXR0cmlidXRlIiwidmFsdWVVUklQYXJhbWV0ZXJOYW1lIiwiVVJMU2VhcmNoUGFyYW1zIiwibG9jYXRpb25TZWFyY2giLCJ1bmRlZmluZWQiLCJGZWF0dXJlRW5hYmxlbWVudCIsIkdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIiwiRXJyb3IiLCJmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uIiwiaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkIiwiZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbiIsImlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQiLCJxdWV1ZU1pY3JvdGFzayIsIm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbiIsImJpbmQiLCJzZXRUaW1lb3V0IiwiaW1nIiwiZG9jdW1lbnRDcmVhdGVFbGVtZW50Iiwic3JjIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwib25lcnJvciIsInJldm9rZU9iamVjdFVSTCIsIk5ldHdvcmtNb25pdG9yIiwibmF2aWdhdG9yQ29ubmVjdGlvbiIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsIl9pc1N1cHBvcnRlZCIsIl9ydHQiLCJfZWZmZWN0aXZlVHlwZSIsIl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiX3JlZiIsIl9HbG9iYWxTY29wZSRuYXZpZ2F0byIsIl9HbG9iYWxTY29wZSRuYXZpZ2F0bzIiLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG8zIiwiZG93bmxpbmsiLCJkb3dubGlua01heCIsImdldEVmZmVjdGl2ZVR5cGUiLCJfcmVmMiIsIl9HbG9iYWxTY29wZSRuYXZpZ2F0bzQiLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG81IiwiX0dsb2JhbFNjb3BlJG5hdmlnYXRvNiIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwiZ2V0Um91bmRUcmlwVGltZSIsIl9HbG9iYWxTY29wZSRuYXZpZ2F0bzciLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG84IiwicnR0IiwiX0dsb2JhbFNjb3BlJG5hdmlnYXRvOSIsImxpc3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9HbG9iYWxTY29wZSRuYXZpZ2F0bzEwIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIk1ldHJpY3NUeXBlIiwiTWV0cmljVHlwZSIsIkR1cmF0aW9ucyIsIlNESyIsIkxvZ2dlckZhY3RvcnkiLCJTdHJlYW1TZXR1cExpc3RlbmVyIiwicGFnZUxvYWRUaW1lIiwiZ2V0TG9nZ2VyIiwibWV0cmljc1NlcnZpY2UiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIlNldHVwQ29tcGxldGVkIiwiZmFpbCIsIlNldHVwRmFpbGVkIiwibWV0cmljVHlwZSIsIl9tZXRyaWNTdWJtaXR0ZWQiLCJzZXR1cFRpbWUiLCJtZXRyaWNOYW1lIiwiZ2V0TmFtZSIsInB1c2giLCJydW50aW1lIiwidWludDY0IiwiX2xvZ2dlciIsImluZm8iLCJ0b0lzb1N0cmluZyIsIkVkZ2VUb2tlbiIsImVkZ2VBdXRoVG9rZW5QcmVmaXgiLCJFZGdlQXV0aFBhcnNlciIsInBhcnNlVG9rZW4iLCJ0b2tlbiIsImlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkIiwiZXJyb3IiLCJkZWNvZGVkVG9rZW4iLCJhdG9iIiwic3Vic3RyIiwibGVuZ3RoIiwiZWRnZVRva2VuIiwiSlNPTiIsInBhcnNlIiwiZSIsInN0YXJ0c1dpdGgiLCJfZWRnZVRva2VuJHRva2VuIiwiX2VkZ2VUb2tlbiR0b2tlbjIiLCJfYXBwbGljYXRpb25JZCIsImFwcGxpY2F0aW9uSWQiLCJfdG9rZW4iLCJ1cmkiLCJjYXBhYmlsaXRpZXMiLCJCdWlsZEZlYXR1cmVzIiwiX3NlbmRMb2NhbENhbmRpZGF0ZXMiLCJfc2VuZExvZ3MiLCJfc2VuZE1ldHJpY3MiLCJfbG9nVG9Db25zb2xlIiwiYXBwbHlGZWF0dXJlcyIsImZlYXR1cmVzIiwiX19GRUFUVVJFU19fIiwic2VuZExvY2FsQ2FuZGlkYXRlcyIsInNlbmRMb2dzIiwic2VuZE1ldHJpY3MiLCJsb2dUb0NvbnNvbGUiLCJpc0Nocm9tZTc0IiwiaXNDaHJvbWU3NSIsImlzQ2hyb21lNzYiLCJpc0Nocm9tZTc3IiwiYWRkVHJhbmNlaXZlckRpc2FibGVkIiwiaXNDaHJvbWU2OSIsImlzQ2hyb21lNzAiLCJpc0Nocm9tZTcxIiwiaXNDaHJvbWU3MiIsImJyb3dzZXJOYW1lIiwiYnJvd3Nlck1ham9yVmVyc2lvbiIsIk1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IiLCJNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yIiwiUlRDUnRwUmVjZWl2ZXIiLCJwcm90b3R5cGUiLCJjcmVhdGVFbmNvZGVkU3RyZWFtcyIsIlJUQ1J0cFNjcmlwdFRyYW5zZm9ybSIsIkhUTUxWaWRlb0VsZW1lbnQiLCJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrIiwiaXNSZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrU3VwcG9ydGVkIiwiaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQiLCJpc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCIsIlBhcmFtZXRlcnMiLCJfZGlzY292ZXJ5UGFyYW1ldGVycyIsImFwcGx5UGFyYW1ldGVycyIsInBhcmFtZXRlcnMiLCJfX1BBUkFNRVRFUlNfXyIsImRpc2NvdmVyeSIsImludGVudGlvbnMiLCJfZG9jdW1lbnQiLCJkb2N1bWVudCIsIl9sb2NhdGlvbiIsImxvY2F0aW9uIiwiX3dpbmRvdyIsIndpbmRvdyIsIkZvcm1EYXRhIiwiY2xlYXJJbnRlcnZhbCIsImNsZWFyVGltZW91dCIsImNyZWF0ZUVsZW1lbnQiLCJoYXNGb2N1cyIsImhpZGRlbiIsInF1ZXJ5U2VsZWN0b3IiLCJmZXRjaCIsImhvc3RuYW1lIiwic2VhcmNoIiwiY29ubmVjdGlvbiIsIm9uTGluZSIsInNldEludGVydmFsIiwiZ2V0SW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJfR2xvYmFsU2NvcGUiLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJjYWxsIiwiX2xpc3QiLCJmb3JFYWNoIiwidG9TdHJpbmciLCJtYXhEaWdpdHNJbkZsb2F0QWZ0ZXJEb3QiLCJOdW1iZXJzIiwiY291bnROdW1iZXJMZW5ndGgiLCJpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlIiwibnVtYmVyIiwiY291bnREaWdpdHNCZWZvcmVEZWNpbWFsIiwiTWF0aCIsImZsb29yIiwiY291bnREaWdpdHNBZnRlckRlY2ltYWwiLCJmaXhSb3VuZGluZyIsInByZWNpc2lvbiIsInBvd2VyIiwicG93Iiwicm91bmQiLCJkaWdpdHNCZWZvcmVEZWNpbWFsIiwib3JpZ2luYWxWYWx1ZSIsIm1vZGlmaWVkVmFsdWUiLCJjb3VudCIsIlN0cmluZ3MiLCJyYW5kb20iLCJyYW5kb20xM0NoYXJhY3RlcnMiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiVWludDhBcnJheXMiLCJpc0RhdGFBdE9mZnNldFRhcmdldEJ5dGVTZXF1ZW5jZSIsInRhcmdldEJ5dGVTZXF1ZW5jZSIsImRhdGEiLCJvZmZzZXQiLCJpZHgiLCJmaW5kVGFyZ2V0Qnl0ZVNlcXVlbmNlSW5kZXhGcm9tT2Zmc2V0IiwicmV0dXJuVmFsdWVXaGVuTm90Rm91bmQiLCJhcmd1bWVudHMiLCJjdXJyZW50SW5kZXgiLCJieXRlTGVuZ3RoIiwiZ2V0VXVpZFN0cmluZ0Zyb21VaW50OEFycmF5IiwidXVpZEJ5dGVMZW5ndGgiLCJ1dWlkIiwiYnl0ZUhleCIsInBhZFN0YXJ0Iiwiam9pbiIsImFzc2VydFVucmVhY2hhYmxlIiwieCIsIkFwcGVuZGVycyIsIl9hcHBlbmRlcnMiLCJhcHBlbmRlciIsInJlbW92ZSIsIml0ZW1zIiwiaXRlbSIsIkxvZ2dpbmdMZXZlbCIsIkNvbnNvbGVBcHBlbmRlciIsInRocmVzaG9sZCIsIl90aHJlc2hvbGQiLCJsb2ciLCJsb2dMZXZlbCIsIm1lc3NhZ2UiLCJjYXRlZ29yeSIsImRhdGUiLCJmdWxsTWVzc2FnZSIsInRvSVNPU3RyaW5nIiwiV2FybiIsImNvbnNvbGUiLCJMb2dnZXIiLCJhcHBlbmRlcnMiLCJfY2F0ZWdvcnkiLCJ0cmFjZSIsIlRyYWNlIiwiX2xlbiIsImFyZ3MiLCJfa2V5IiwiZGVidWciLCJEZWJ1ZyIsIl9sZW4yIiwiX2tleTIiLCJJbmZvIiwiX2xlbjMiLCJfa2V5MyIsIndhcm4iLCJfbGVuNCIsIl9rZXk0IiwiX2xlbjUiLCJfa2V5NSIsImZhdGFsIiwiRmF0YWwiLCJfbGVuNiIsIl9rZXk2IiwibGV2ZWwiLCJyZXBsYWNlUGxhY2Vob2xkZXJzIiwiX3RoaXMyIiwicmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyIsImluZGV4IiwicmVwbGFjZUFyZ3VtZW50Iiwic3BsaWNlIiwic3RyaW5naWZ5IiwiYWNjdW11bGF0b3IiLCJjdXJyZW50VmFsdWUiLCJhcnJheSIsImVycm9yU3RhY2tBbHNvSGFzRXJyb3JNZXNzYWdlIiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwidG9TdHJpbmdTdHIiLCJMb2dnaW5nVGhyZXNob2xkIiwiVGVsZW1ldHJ5QXBwZW5kZXIiLCJUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJhcHBseVRlbGVtZXRyeUxvZ2dlciIsInBhcmFtZXRlclZhbHVlIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsImxvZ2dpbmdMZXZlbCIsIk9mZiIsIkFsbCIsImNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwiLCJsb2dnaW5nTGV2ZWxUeXBlIiwiVGVsZW1ldHJ5TGV2ZWwiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIlRpbWVUb0ZpcnN0RnJhbWUiLCJFc3NlbnRpYWwiLCJDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiU3RhbGxlZCIsIkJ1ZmZlcmluZyIsIlJvdW5kVHJpcFRpbWUiLCJEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsIk5ldHdvcmtUeXBlIiwiUmVzb2x1dGlvbkNoYW5nZWQiLCJBcHBsaWNhdGlvbkZvcmVncm91bmQiLCJBcHBsaWNhdGlvbkJhY2tncm91bmQiLCJNZXRyaWNzQ29uZmlndXJhdGlvbiIsIl91cmwiLCJzZXQiLCJ1cmwiLCJtZXRyaWNzVXJsIiwicGF0aG5hbWUiLCJfZW52aXJvbm1lbnQiLCJlbnZpcm9ubWVudCIsIl90ZW5hbmN5IiwidGVuYW5jeSIsIl9zZXNzaW9uSWQiLCJzZXNzaW9uSWQiLCJNZXRyaWNzU2VydmljZSIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc0ZhY3RvcnkiLCJnZXRNZXRyaWNzU2VydmljZSIsIl90eXBlb2YiLCJtZXRyaWNzU2VydmljZXMiLCJfbWV0cmljc1NlcnZpY2VzIiwibWV0cmljc0NvbmZpZ3VyYXRpb24iLCJjbGllbnRTZXNzaW9uSWQiLCJnZXRUZWxlbWV0cnlVcmwiLCJnZXRFbnZpcm9ubWVudEZyb21VcmwiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsIiwic2V0VGVsZW1ldHJ5TGV2ZWwiLCJ2YWx1ZXMiLCJFeHBvbmVudGlhbEJhY2tvZmYiLCJWZXJzaW9uTWFuYWdlciIsInJlcXVlc3RTaXplTGltaXQiLCJtYXhCdWZmZXJlZFJlY29yZHMiLCJsb2NhdGlvbkhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwiX2V4cG9uZW50aWFsQmFja29mZiIsIm1ldHJpYyIsInByZXZpb3VzVmFsdWUiLCJyZXNvdXJjZSIsImtpbmQiLCJtZXRyaWNSZWNvcmQiLCJ0aW1lc3RhbXAiLCJmdWxsUXVhbGlmaWVkTmFtZSIsIl9kb21haW4iLCJzZGtWZXJzaW9uIiwiaWdub3JlZCIsInNlbmRNZXRyaWNzSWZBYmxlIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJtZXRyaWNzTWVzc2FnZXMiLCJmb3JtRGF0YSIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJhcHBlbmQiLCJyZWNvcmRzIiwibWV0aG9kIiwiYm9keSIsImFicnVwdCIsInNlbnQiLCJzdG9wIiwiX3giLCJhcHBseSIsIl9zZW5kTWV0cmljc0lmQWJsZSIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX2lzU2VuZGluZyIsInNsaWNlIiwidGhlbiIsInJlc3BvbnNlIiwiaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUiLCJfZmFpbHVyZUNvdW50IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCIsImNhdGNoIiwic3RhdHVzIiwidGVsZW1ldHJ5TGV2ZWxUeXBlIiwiUHJvbWlzZUhhbmRsZXIiLCJQcm9taXNlIiwiY2FsbGJhY2siLCJUeXBlRXJyb3IiLCJfc3RhdGUiLCJfaGFuZGxlZCIsIl92YWx1ZSIsIl9kZWZlcnJlZHMiLCJkb1Jlc29sdmUiLCJkb25lIiwicHJvbWlzZVJlc29sdmUiLCJyZWFzb24iLCJwcm9taXNlUmVqZWN0IiwibmV3VmFsdWUiLCJwcm9taXNlIiwiZmluYWxlIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhbGwiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwicmFjZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJQZWVyQ29ubmVjdGlvblNlcnZpY2UiLCJfcGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZyIsImlzUHJlY2FjaGluZ0VuYWJsZWQiLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhY2hlZCIsImRpcmVjdGlvbiIsInBlZXJDb25uZWN0aW9uIiwiY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJjb25maWd1cmF0aW9uIiwiX2FyZ3MzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyIiwidHJ1bmNhdGVJY2VTZXJ2ZXJzIiwiaWNlU2VydmVycyIsInVybHMiLCJ1c2VybmFtZSIsImNyZWRlbnRpYWwiLCJTZHBQYXJzZXIiLCJ1cGRhdGVTdGF0aXN0aWNUaW1lb3V0IiwiUnRjQ29ubmVjdGlvbk1vbml0b3IiLCJtZWRpYVN0cmVhbSIsImVzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfcGVlckNvbm5lY3Rpb24iLCJfZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl90cmFja3NUb01vbml0b3IiLCJnZXRUcmFja3MiLCJtYXAiLCJ0cmFjayIsImdldEN1cnJlbnRPZmZlckRpc2FibGVkIiwicGFyc2VkU0RQIiwiY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIiwic2RwIiwiX2VzdGltYXRlZEF1ZGlvQ29kZWMiLCJhdWRpb0NvZGVjIiwiX2VzdGltYXRlZFZpZGVvQ29kZWMiLCJ2aWRlb0NvZGVjIiwidXBkYXRlU3RhdGlzdGljIiwiX3J0Y1N0YXRpc3RpYyIsIl9pc01vbml0b3JSdW5uaW5nIiwiX3VwZGF0ZVRpbWVvdXQiLCJfdXBkYXRlU3RhdGlzdGljIiwiX2lnbm9yZWQiLCJnZXRLaW5kRm9yU2FmYXJpMTEiLCJnZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkIiwidXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiaWQiLCJnZXRTdGF0cyIsInN0YXRzIiwicnRjU3RhdGlzdGljcyIsInJvdW5kVHJpcFRpbWUiLCJsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAiLCJyZXBvcnQiLCJjdXJyZW50Um91bmRUcmlwVGltZSIsIm1lZGlhVHlwZSIsImNvZGVjIiwiY29kZWNJZCIsIm1pbWVUeXBlIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjMiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY0IiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NSIsImJ5dGVzIiwiYnl0ZXNSZWNlaXZlZCIsInByZXZpb3VzQnl0ZXNSZWNlaXZlZCIsImJ5dGVzRGVsdGEiLCJ0aW1lRGVsdGEiLCJiaXRyYXRlIiwic3NyYyIsInBhY2tldHNMb3N0IiwicGFja2V0c1JlY2VpdmVkIiwiZ2V0Q29kZWNCeVR5cGUiLCJ2aWRlbyIsImZyYW1lc0RlY29kZWQiLCJmcHMiLCJfdXBkYXRlU3RhdGlzdGljTGVnYWN5IiwiZ2V0U3RhdHNMZWdhY3kiLCJuYW1lcyIsInN0YXQiLCJfc2RwIiwic2RwU3BsaXRCeUxpbmVzIiwic2RwU3BsaXRCeVRyYWNrcyIsIl9hdWRpb0NvZGVjIiwiYXBwbHlDb2RlYyIsIl92aWRlb0NvZGVjIiwiX2lzQXVkaW9UcmFja0VuYWJsZWQiLCJpc1RyYWNrQnlUeXBlRW5hYmxlZCIsIl9pc1ZpZGVvVHJhY2tFbmFibGVkIiwic2RwU2VjdGlvbkZvclR5cGUiLCJmaW5kIiwic2RwVHJhY2siLCJ1c2VkQ29kZWNMaW5lIiwic2RwTGluZSIsInVzZWRDb2RlYyIsImNvZGVjTmFtZSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbiIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCIsIndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIiwiUlRDUGVlckNvbm5lY3Rpb24iLCJjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiIsImNvbm5lY3Rpb25TdGF0ZSIsImljZUNvbm5lY3Rpb25TdGF0ZSIsImdldENvbmZpZ3VyYXRpb24iLCJzZXRDb25maWd1cmF0aW9uIiwiZ2V0VHJhbnNjZWl2ZXJzRGlzYWJsZWQiLCJnZXRUcmFuc2NlaXZlcnMiLCJfY3JlYXRlT2ZmZXIiLCJwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCIsIl9jcmVhdGVBbnN3ZXIiLCJjcmVhdGVBbnN3ZXIiLCJfeDIiLCJfc2V0TG9jYWxEZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwic2V0TG9jYWxEZXNjcmlwdGlvbiIsIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiIsIl94MyIsIl9zZXRSZW1vdGVEZXNjcmlwdGlvbiIsIl9jYWxsZWU0IiwiX2Rlc2NyaXB0aW9uJHNkcCIsImhhc0NyeXB0byIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsInNldFJlbW90ZURlc2NyaXB0aW9uIiwiX3g0IiwiZ2V0U2VuZGVycyIsImdldFJlY2VpdmVycyIsInNlbGVjdG9yIiwiX3RoaXMzIiwiYWRkU3RyZWFtIiwiX3RoaXM0IiwiYWRkVHJhY2siLCJvbnRyYWNrIiwiaGFuZGxlciIsIm9uaWNlY2FuZGlkYXRlIiwib25jb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsImNsb3NlIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3ViamVjdCIsIl9zdWJqZWN0Iiwic3Vic2NyaWJlIiwiRGlzcG9zYWJsZUxpc3RlbmVyIiwiX0Rpc3Bvc2FibGUiLCJsaXN0ZW5lcnMiLCJfY2FsbFN1cGVyIiwiX2luaGVyaXRzIiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiYmFzZVVSTCIsIm9yaWdpbiIsIkRpc2NvdmVyeVVyaSIsIl9jbGllbnRTZXNzaW9uSWQiLCJfbG9hZGVkVGltZXN0YW1wIiwiX3JlYWRPbmx5SW5pdGlhbGl6ZWQiLCJfcmVhZE9ubHlEaXNjb3ZlcnlVcmkiLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlIiwiX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwiX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQiLCJfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiX3dlYlBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsIl9obHNKc0xvYWRlciIsIl9tZXRyaWNzU2VydmljZSIsIl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl90ZWxlbWV0cnlVcmwiLCJfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsInJldHJpZXNBbW91bnQiLCJfdGVsZW1ldHJ5TGV2ZWwiLCJhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJ0ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiaWdub3JlZEVudmlyb25tZW50IiwiaWdub3JlZERpc2NvdmVyeVVyaSIsInRlbGVtZXRyeVVybCIsInRlbGVtZXRyeUFwcGVuZGVyIiwiaWdub3JlZFRlbmFuY3kiLCJhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uIiwiaWdub3JlZFRlbGVtZXRyeUxldmVsIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImRpc2NvdmVyeVVyaSIsImNoYW5uZWxUb2tlbiIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiaW5pdCIsIl9pbml0aWFsaXplZCIsInBlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNvbnNvbGVMb2dnaW5nTGV2ZWwiLCJjb25zb2xlQXBwZW5kZXIiLCJhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJ3ZWJQbGF5ZXJMb2FkZXIiLCJzaGFrYVBsYXllckxvYWRlciIsImhsc0pzTG9hZGVyIiwiX1NESyIsImFkZFdpbmRvd0V2ZW50TGlzdGVuZXIiLCJzZWdtZW50cyIsInByb3RvY29sIiwidW5zaGlmdCIsImVuZHNXaXRoIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJEaW1lbnNpb24iLCJDaGFubmVsU3RhdGUiLCJWaWRlb1RlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJUb2tlbkNvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIkVuY29kZWRTdHJlYW1TaW5rIiwiU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiUGVlckNvbm5lY3Rpb25Db250ZXh0IiwiU3RhdGVDb250ZXh0IiwiRnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNvbnRleHQiLCJTdHJlYW1GYWN0b3J5IiwiRGlzY292ZXJ5IiwiZGVmYXVsdFN0cmVhbVRlcm1pbmF0aW9uUmVhc29uIiwiZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMiLCJzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHMiLCJDaGFubmVsIiwidmlkZW9FbGVtZW50IiwiY2hhbm5lbENvbnRleHRPcHRpb25zIiwidGFyZ2V0TGFnIiwic3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMiLCJoYXNJbnNlcnRhYmxlU3RyZWFtcyIsImhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyIsInZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiZW5jb2RlZFZpZGVvU3RyZWFtU2luayIsImVuY29kZWRBdWRpb1N0cmVhbVNpbmsiLCJfdG9rZW5Db250ZXh0IiwiX2NoYW5uZWxDb250ZXh0IiwiX3BlZXJDb25uZWN0aW9uQ29udGV4dCIsIl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiX3N0YXRlQ29udGV4dCIsIl9jaGFubmVsU3RhcnRUaW1lIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsIl9mcmFtZVRpbWluZ0luZm9ybWF0aW9uQ29udGV4dCIsImNvbmZpZ3VyZUZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJfcmVhZE9ubHlJc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25FbmFibGVkIiwiaXNFbmFibGVkIiwiX3JlYWRPbmx5RGVjb2RlZEZyYW1lVGltaW5nSW5mb3JtYXRpb24iLCJkZWNvZGVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiIsIl9yZWFkT25seVJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiIsInJlbmRlcmVkRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiU3RvcHBlZCIsInJlc3RhcnRBZnRlclN0b3AiLCJjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQiLCJQbGF5aW5nIiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsIktlZXAiLCJOb3JtYWwiLCJkZXN0cm95U3RyZWFtT25Vbm1vdW50IiwicmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lciIsInN0YXJ0IiwicGF1c2UiLCJzcmNPYmplY3QiLCJJbml0aWFsaXppbmciLCJ3aWR0aCIsInZpZGVvV2lkdGgiLCJoZWlnaHQiLCJ2aWRlb0hlaWdodCIsImVtcHR5IiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJSZXNldCIsInVwZGF0ZVRhcmdldExhZyIsIl9zdG9wIiwiaXNTdGFydGluZyIsInByb2Nlc3NTdG9wIiwiY2xlYW5VcFJlc291cmNlcyIsIl9yZXN1bWUiLCJwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsInJlc3VtZSIsIm11dGUiLCJtdXRlZCIsInVubXV0ZSIsIl9kaXNwb3NlIiwiaXNEaXNwb3NlZCIsImdldFVyaSIsIl9zdGFydCIsInByb2Nlc3NTdGFydCIsIl9wcm9jZXNzU3RhcnQiLCJfY2FsbGVlNSIsIl90aGlzNSIsImxpc3Rlbk9uU3RyZWFtU2V0dXAiLCJfU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJ2YWxpZCIsInZhbGlkYXRpb25SZXN1bHQiLCJfU3RyZWFtVHJhY2tUcmFuc2Zvcm0yIiwiX3ZhbGlkIiwiX3ZhbGlkYXRpb25SZXN1bHQiLCJfRW5jb2RlZFN0cmVhbVNpbmskdmEiLCJfdmFsaWQyIiwiX3ZhbGlkYXRpb25SZXN1bHQyIiwiX0VuY29kZWRTdHJlYW1TaW5rJHZhMiIsIl92YWxpZDMiLCJfdmFsaWRhdGlvblJlc3VsdDMiLCJoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayIsImhhc0VuY29kZWRTdHJlYW1TaW5rIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwic3RyZWFtUGxheWVyIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiU3RhcnRpbmciLCJVbmF1dGhvcml6ZWQiLCJ2YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJDb25maWd1cmF0aW9uRXJyb3IiLCJ2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rIiwiaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCIsIlVuc3VwcG9ydGVkRmVhdHVyZSIsIlJlY292ZXJpbmciLCJjbGVhckNhY2hlZENsb3Nlc3RFbmRwb2ludCIsImhhbmRsZVN0cmVhbUZhaWx1cmUiLCJjcmVhdGUiLCJDbGllbnRTdGFydEVycm9yIiwiZmluYWxseSIsImF1dG9tYXRpY1JldHJ5T25GYWlsdXJlIiwidGltZW91dElkIiwiZ2V0UmV0cnlJbnRlcnZhbCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJfcGxheSIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3IiwicGxheSIsIlN0YW5kQnkiLCJPZmZsaW5lIiwiR2VvUmVzdHJpY3RlZCIsIkdlb0Jsb2NrZWQiLCJQYXVzZWQiLCJSZWNvbm5lY3RpbmciLCJUcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3IiLCJDb25uZWN0aW9uRXJyb3IiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsIl9jYWxsZWU4IiwiX2NhbGxlZTgkIiwiX2NvbnRleHQ4IiwiX3RoaXM2IiwiZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCIsInNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyIsImRlc3Ryb3lTdHJlYW0iLCJwZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwiX3RoaXM3IiwiZnJhbWVUaW1pbmdJbmZvcm1hdGlvbkNhcGFiaWxpdHkiLCJjYXBhYmlsaXR5Iiwic2hvdWxkRXh0cmFjdFRpbWVjb2RlIiwic2hvdWxkRXh0cmFjdFRpbWVzdGFtcHMiLCJpc0NoYW5uZWxGcmFtZVRpbWluZ0luZm9ybWF0aW9uU3VwcG9ydGVkIiwib3B0aW9uIiwidHJpbSIsIl9wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsIl9jYWxsZWU5IiwiX3RoaXM4IiwicGxheVByb21pc2UiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJoYXNBdWRpb1RyYWNrIiwiZmlsdGVyIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYiLCJDaGFubmVscyIsImNyZWF0ZUNoYW5uZWwiLCJpbml0aWFsaXplZCIsImNoYW5uZWxPcHRpb25zIiwiZGVmYXVsdFRhcmdldExhZyIsIl9vcHRpb25zJHRhcmdldExhZyIsImFwcGx5U3RhdHVzIiwiYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50IiwibWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwiQml0c3RyZWFtUmVhZGVyIiwiX2RhdGEiLCJfYml0T2Zmc2V0IiwicmVhZEJpdHMiLCJiaXRzVG9SZWFkIiwiZ2V0UmVtYWluaW5nQml0cyIsImJpdHNSZW1haW5pbmciLCJieXRlT2Zmc2V0IiwiYml0UG9zaXRpb25JbkJ5dGUiLCJiaXRzQXZhaWxhYmxlSW5CeXRlIiwibWluIiwibWFzayIsImJ5dGVWYWx1ZSIsImJpdHMiLCJza2lwQml0cyIsImJpdHNUb1NraXAiLCJFbmNvZGVkTWVkaWFTdHJlYW1FdmVudCIsIkgyNjRCaXRzdHJlYW0iLCJldmVudFB1Ymxpc2hlciIsIl9ldmVudFB1Ymxpc2hlciIsInN1YnNjcmliZVRvTmFsVW5pdCIsIm5hbFVuaXRUeXBlIiwiTmFsVW5pdCIsIm5hbFVuaXRFdmVudCIsInN1YnNjcmliZVRvU2VpUGF5bG9hZFR5cGUiLCJzZWlQYXlsb2FkVHlwZSIsIlNlaVBheWxvYWQiLCJzZWlQYXlsb2FkRXZlbnQiLCJzdWJzY3JpYmVUb1BheWxvYWQiLCJjb250ZXh0IiwicGF5bG9hZFV1aWQiLCJwdWJsaXNoIiwiUGF5bG9hZFN1YnNjcmlwdGlvbiIsIlBheWxvYWQiLCJwYXlsb2FkRXZlbnQiLCJOYWxVbml0VHlwZSIsIlNlaVBheWxvYWRUeXBlIiwiRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIiwiQW5uZXhCQnl0ZVN0cmVhbVBhcnNlciIsInZjbEV4dHJhY3Rpb25TdHJhdGVneSIsIl92Y2xFeHRyYWN0aW9uU3RyYXRlZ3kiLCJzdWJzY3JpYmVUb0VuY29kZWRWaWRlb1N0cmVhbUNodW5rRXZlbnRzIiwiRW5jb2RlZFZpZGVvU3RyZWFtQ2h1bmsiLCJwYXJzZUVuY29kZWRWaWRlb1N0cmVhbUNodW5rIiwiY2h1bmsiLCJoYW5kbGVFeHRyYWN0ZWREYXRhIiwiZXh0cmFjdE5hbFVuaXRBdE9mZnNldCIsIm5vdGlmeUVuZE9mQ2h1bmsiLCJhbm5leEJTdGFydENvZGVMZW5ndGgiLCJuYWxVbml0Iiwic2VpUGF5bG9hZHMiLCJwdWJsaXNoTmFsVW5pdCIsImhhbmRsZVNlaVBheWxvYWQiLCJzZWlQYXlsb2FkIiwicHVibGlzaFNlaVBheWxvYWQiLCJVc2VyRGF0YVVucmVnaXN0ZXJlZCIsImhhbmRsZVNlaVBheWxvYWRVc2VyRGF0YVVucmVnaXN0ZXJlZCIsInN1YmFycmF5IiwicGF5bG9hZERhdGEiLCJwdWJsaXNoUGF5bG9hZCIsInBheWxvYWQiLCJFbmRPZkNodW5rIiwibmFsVW5pdEhlYWRlckluZGV4IiwiZXh0cmFjdGVkRGF0YSIsIlNsaWNlTGF5ZXJOb25JZHJEYXRhIiwiU2xpY2VEYXRhUGFydGl0aW9uQUxheWVyIiwiU2xpY2VEYXRhUGFydGl0aW9uQkxheWVyIiwiU2xpY2VEYXRhUGFydGl0aW9uQ0xheWVyIiwiU2xpY2VMYXllcklkckRhdGEiLCJleHRyYWN0VmNsTmFsVW5pdCIsIlN1cHBsZW1lbnRhbEVuaGFuY2VtZW50SW5mb3JtYXRpb24iLCJleHRyYWN0U2VpTmFsVW5pdCIsImV4dHJhY3ROb25WY2xOYWxVbml0IiwibmFsVW5pdERhdGEiLCJfc2VpUGF5bG9hZDRCeXRlRW5kQ29kZSIsIl9zZWlQYXlsb2FkM0J5dGVFbmRDb2RlIiwiZXh0cmFjdGVkU2VpUGF5bG9hZCIsImV4dHJhY3RTZWlQYXlsb2FkIiwicGF5bG9hZFR5cGUiLCJlbmRJbmRleCIsIm5leHRBbm5leEJTdGFydENvZGVJbmRleCIsImZpbmRBbm5leEJTdGFydEluZGV4RnJvbU9mZnNldCIsImZmQ291bnQiLCJwYXlsb2FkU2l6ZSIsImdldE9mZnNldFdpdGhFeHBhbmRlZEVtdWxhdGlvblByZXZlbnRpb25CeXRlcyIsImluZGV4NCIsImFubmV4QjRCeXRlU3RhcnRDb2RlIiwiYW5uZXhCM0J5dGVTdGFydENvZGUiLCJVaW50OEFycmF5IiwiYnVmZmVyIiwibnVtYmVyT2ZOb25FbXVsYXRpb25QcmV2ZW50aW9uQnl0ZXMiLCJsZWFkaW5nWmVyb0J5dGVzIiwibnVtYmVyT2ZCeXRlc1Zpc2l0ZWQiLCJudW1iZXJPZkJ5dGVzVG9TZWVrIiwicmVtb3ZlRW11bGF0aW9uUHJldmVudGlvbkJ5dGVzIiwib3V0cHV0Iiwib3V0T2Zmc2V0IiwiZWJzcE9mZnNldCIsInByZXZlbnRpb25CeXRlSWR4IiwiUGljU3RydWN0IiwiUGljdHVyZVRpbWluZ1BhcnNlciIsImNvbmZpZyIsImJpdHN0cmVhbVJlYWRlciIsInBpY3R1cmVUaW1pbmciLCJwaWNTdHJ1Y3QiLCJjcGJEcGJEZWxheXNQcmVzZW50RmxhZyIsImNwYlJlbW92YWxEZWxheUxlbmd0aE1pbnVzMSIsImRwYk91dHB1dERlbGF5TGVuZ3RoTWludXMxIiwicGljU3RydWN0UHJlc2VudEZsYWciLCJudW1DbG9ja1RTIiwiY29udmVydFBpY1N0cnVjdFRvTnVtQ2xvY2tUUyIsImNsb2NrVGltZXN0YW1wcyIsImNsb2NrVGltZXN0YW1wRmxhZyIsImNsb2NrVGltZXN0YW1wIiwiY3RUeXBlIiwibnVpdEZpZWxkQmFzZWRGbGFnIiwiY291bnRpbmdUeXBlIiwiZnVsbFRpbWVzdGFtcEZsYWciLCJkaXNjb250aW51aXR5RmxhZyIsImNudERyb3BwZWRGbGFnIiwibkZyYW1lcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJzZWNvbmRzRmxhZyIsIm1pbnV0ZXNGbGFnIiwiaG91cnNGbGFnIiwidGltZU9mZnNldCIsIlByb2dyZXNzaXZlRnJhbWUiLCJUb3BGaWVsZCIsIkJvdHRvbUZpZWxkIiwiVG9wRmllbGRCb3R0b21GaWVsZCIsIkJvdHRvbUZpZWxkVG9wRmllbGQiLCJGcmFtZURvdWJsaW5nIiwiVG9wRmllbGRCb3R0b21GaWVsZFRvcEZpZWxkUmVwZWF0ZWQiLCJCb3R0b21GaWVsZFRvcEZpZWxkQm90dG9tRmllbGRSZXBlYXRlZCIsIkZyYW1lVHJpcGxpbmciLCJQaGVuaXhFbWJlZGRlZElzb0JtZmYyMDIzVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSIsIm5leHRQb3RlbnRpYWw0Qnl0ZVN0YXJ0Q29kZUluZGV4IiwiX3RydW5jYXRlZFZjbE5hbFVuaXRCeXRlTGVuZ3RoIiwibmV4dFBvdGVudGlhbDNCeXRlU3RhcnRDb2RlSW5kZXgiLCJWYW5pbGxhVmNsTmFsVW5pdEV4dHJhY3Rpb25TdHJhdGVneSIsIkV2ZW50UHVibGlzaGVyIiwiUGhlbml4RW1iZWRkZWRJc29CbWZmMjAyMyIsIkgyNjRWaWRlb0JpdHN0cmVhbURlY29kZXIiLCJQaGVuaXhIMjY0RW1iZWRkZWRJc29CbWZmMjAyM1ZpZGVvQml0c3RyZWFtRGVjb2RlciIsIkJpdHN0cmVhbURlY29kZXJzIiwiY3JlYXRlSDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciIsImRlY29kZXJFdmVudFB1Ymxpc2hlciIsImJpdHN0cmVhbSIsInBhcnNlciIsImNyZWF0ZVBoZW5peEgyNjRFbWJlZGRlZElzb0JtZmYyMDIzVmlkZW9CaXRzdHJlYW1EZWNvZGVyIiwiaDI2NFZpZGVvQml0c3RyZWFtRGVjb2RlciIsImVuY29kaW5nIiwiX2JpdHN0cmVhbSIsIl9wYXJzZXIiLCJkZWNvZGUiLCJlbmNvZGVkTWVkaWFTdHJlYW1DaHVuayIsIl9oMjY0VmlkZW9CaXRzdHJlYW1EZWNvZGVyIiwiX2VuY29kaW5nIiwic3Vic2NyaWJlVG9FbWJlZGRlZERhdGEiLCJvbkRlY29kZWRNZWRpYUNodW5rIiwidHJhY2tJZCIsImRlY29kZWRNZWRpYUNodW5rRXZlbnQiLCJub29wIiwiU2V0IiwiTWFwIiwiZW5hYmxlV2FybmluZ0xvZ1doZW5WY2xFbWJlZGRlZERhdGFOb3RGb3VuZCIsIl9leHBlY3RlZFBheWxvYWRVdWlkIiwiX3BoZW5peFZjbEVtYmVkZGVkRGF0YVV1aWQiLCJfcGhlbml4SW5pdGlhbGl6YXRpb25TZWdtZW50VXVpZCIsInN1YnNjcmliZVRvUGF5bG9hZEV2ZW50cyIsInN1YnNjcmliZVRvUGF5bG9hZFN1YnNjcmlwdGlvbkV2ZW50cyIsInN1YnNjcmliZVRvTmFsVW5pdEV2ZW50cyIsIl9lbmFibGVXYXJuaW5nTG9nV2hlblZjbEVtYmVkZGVkRGF0YU5vdEZvdW5kIiwiX2VuZE9mQ2h1bmtIYW5kbGVyc0J5VHJhY2tJZCIsImNsZWFyIiwic3Vic2NyaWJlVG9FbmRPZkNodW5rRXZlbnRzIiwiYXJtTG9nZ2luZ05vVmNsRW1iZWRkZWREYXRhRm91bmQiLCJoYW5kbGVOYWxVbml0RXZlbnQiLCJfcmVmMyIsIl90cnVuY2F0ZWRWY2xOYWxVbml0RGF0YUJ5dGVMZW5ndGgiLCJwdWJsaXNoVmNsRW1iZWRkZWRQYXlsb2FkIiwiZXh0cmFjdFZjbEVtYmVkZGVkRGF0YSIsImRpc2FybUxvZ2dpbmdOb1ZjbEVtYmVkZGVkRGF0YUZvdW5kIiwiX3JlZjQiLCJsb2dXYXJuaW5nVmNsRW1iZWRkZWREYXRhTm90Rm91bmQiLCJjb250ZXh0SWQiLCJoYW5kbGVFbmRPZkVuY29kZWRWaWRlb1N0cmVhbUNodW5rIiwiX3JlZjUiLCJlbmRPZkNodW5rRXZlbnRIYW5kbGVyIiwiaGFuZGxlUGF5bG9hZEV2ZW50IiwiX3JlZjYiLCJoYXMiLCJsb2dXYXJuaW5nVW5leHBlY3RlZFBheWxvYWRVdWlkUmVjZWl2ZWRPbmNlIiwiRXZlbnRFbWl0dGVyIiwiZGVsZXRlIiwiZW1pdCIsImV2ZW50IiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZXJyIiwiZiIsIm9uRXZlbnRXaXRoTm9TdWJzY3JpYmVyIiwib25FdmVudFdpdGhOb1N1YnNjcmliZXJIYW5kbGVyIiwiX29uRXZlbnRXaXRoTm9TdWJzY3JpYmVySGFuZGxlcnMiLCJldmVudFR5cGUiLCJlbWl0dGVyIiwiX2V2ZW50RW1pdHRlcnMiLCJjcmVhdGVFbWl0dGVyIiwiZGlzcG9zYWJsZUxpc3RlbmVyIiwiZGVmYXVsdERpc2NvdmVyeVVyaSIsIkJpdHJhdGVNb2RlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlIiwiYml0cmF0ZU1vZGUiLCJGb3JjZSIsIkJpdHJhdGVTdGF0ZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlIiwiYml0cmF0ZVN0YXRlIiwiRGlzY292ZXJ5U2VydmljZSIsImRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwiLCJfcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwicHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJfZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyIsImRpc2NvdmVyeVNlcnZpY2UiLCJjYWNoZWRWYWx1ZSIsIl9jYWNoZSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiRW5kUG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl91cmkiLCJfZGlzY292ZXJOZWFyYnlFbmRQb2ludHMiLCJ0aW1lb3V0IiwiYXNTdHJpbmciLCJlbmRQb2ludHMiLCJvayIsInRleHQiLCJkaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsImZhaWxlZFJlcXVlc3RzIiwicHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQiLCJfYXJnczIiLCJidWlsZERpc2NvdmVyeVVybCIsInBpbmciLCJ0aW1lIiwiX2Rpc2NvdmVyeVVyaSIsImRpc2NvdmVyeVBhcmFtZXRlcnMiLCJzZWFyY2hQYXJhbXMiLCJhcGlWZXJzaW9uIiwiX3RpbWVvdXQiLCJfcm91bmRUcmlwVGltZSIsIl9waW5nIiwiZmluaXNoZWQiLCJidWlsZFBpbmdVcmwiLCJfc3Vic2NyaWJlIiwibG9jYWxTZXNzaW9uRGVzY3JpcHRpb24iLCJjbGllbnRWZXJzaW9uIiwiYm9keVdpdGhPZmZlciIsImJvZHlXaXRob3V0T2ZmZXIiLCJodHRwUmVzcG9uc2UiLCJzdWJzY3JpYmVSZXNwb25zZSIsImJ1aWxkVXJsIiwiYmVhcmVyVG9rZW4iLCJodHRwUm91bmRUcmlwVGltZSIsInNlc3Npb25EZXNjcmlwdGlvbiIsImNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbiIsIm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwiX3B1Ymxpc2giLCJtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwiX3g1IiwiX3g2IiwiX3g3Iiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl94OCIsIl94OSIsIl9saW1pdEJpdHJhdGUiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiX2FkZEljZUNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzIiwiZGlzY292ZXJ5Q29tcGxldGVkIiwiYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2FyZ3M2IiwibWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJfeDE1IiwiX3gxNiIsIl94MTciLCJfZGVzdHJveVN0cmVhbSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfeDE4IiwiX3gxOSIsIl9kZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic2VuZEJlYWNvbiIsIl94MjAiLCJfeDIxIiwicGF0aCIsInBhdGhBc0FycmF5IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwianNvbiIsInJ0Y0NvbmZpZ3VyYXRpb24iLCJjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiX3gyMiIsIl94MjMiLCJfY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwIiwicHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwJCIsIl9jb250ZXh0MTAiLCJfeDI0IiwiX3gyNSIsImJ1bmRsZVBvbGljeSIsImljZUNhbmRpZGF0ZVBvb2xTaXplIiwiaWNlVHJhbnNwb3J0UG9saWN5IiwicnRjcE11eFBvbGljeSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwiX2NhbGxlZTExIiwiX2NhbGxlZTExJCIsIl9jb250ZXh0MTEiLCJfeDI2IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9jYWxsZWUxMiIsIl9jYWxsZWUxMiQiLCJfY29udGV4dDEyIiwiX3gyNyIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfY2FsbGVlMTMiLCJfY2FsbGVlMTMkIiwiX2NvbnRleHQxMyIsIl94MjgiLCJIMjY0RnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIiLCJjaGFubmVsQ29udGV4dCIsImZyYW1lVGltaW5nSW5mb3JtYXRpb25Db250ZXh0IiwiX2JpdHN0cmVhbURlY29kZXIiLCJfZnJhbWVUaW1pbmdzQnlSdHBUaW1lc3RhbXAiLCJfdmlkZW9FbGVtZW50RGlzcG9zYWJsZXMiLCJzZXR1cFZpZGVvRXZlbnRMaXN0ZW5lcnMiLCJQaWN0dXJlVGltaW5nIiwib25QaWN0dXJlVGltaW5nRXh0cmFjdGVkIiwicHJvY2Vzc0ZyYW1lIiwibWlkIiwiZnJhbWUiLCJmcmFtZVRpbWluZyIsInJlY2VpdmVUaW1lc3RhbXAiLCJyZW1vdmVGcmFtZVRpbWluZ3NFeGNlZWRpbmdNYXhDYXBhY2l0eSIsInJ0cFRpbWVzdGFtcCIsIl9waWN0dXJlVGltaW5nJHBpY1N0ciIsIl9waWN0dXJlVGltaW5nJHBpY1N0cjIiLCJfY2xvY2tUaW1lc3RhbXAkaG91cnMiLCJfY2xvY2tUaW1lc3RhbXAkbWludXQiLCJfY2xvY2tUaW1lc3RhbXAkc2Vjb24iLCJfcmVmJGNvbnRleHQiLCJfcGljdHVyZVRpbWluZ1BhcnNlciIsIl9waWN0dXJpbmdUaW1pbmdQYXJzaW5nQ29uZmlnIiwidGltZWNvZGUiLCJmcmFtZXMiLCJpc0ZyYW1lRHJvcCIsInNvdXJjZVRpbWVzdGFtcCIsImluZ2VzdFRpbWVzdGFtcCIsImVuY29kZVRpbWVzdGFtcCIsInRyYW5zY29kZVRpbWVzdGFtcCIsInBsYXliYWNrU3RhdGUiLCJfY3VycmVudFBsYXliYWNrU3RhdGUiLCJ2aWRlb0ZyYW1lQ2FsbGJhY2siLCJtZXRhZGF0YSIsImFybVZpZGVvRnJhbWVDYWxsYmFjayIsInRpbWVzdGFtcHNUb0RlbGV0ZSIsIl9zdGVwJHZhbHVlIiwiX3NsaWNlZFRvQXJyYXkiLCJfb2JqZWN0U3ByZWFkIiwicmVuZGVyVGltZXN0YW1wIiwicGVyZm9ybWFuY2UiLCJ0aW1lT3JpZ2luIiwiX2kiLCJfdGltZXN0YW1wc1RvRGVsZXRlIiwiZWxlbWVudHNUb0RlbGV0ZSIsInNpemUiLCJNQVhfRlJBTUVfVElNSU5HX0VOVFJJRVMiLCJpdGVyYXRvciIsImtleXMiLCJrZXlUb0RlbGV0ZSIsIm9uUGxheWluZyIsIm9uUGF1c2UiLCJvblN0YWxsZWQiLCJvbldhaXRpbmciLCJvbkVuZGVkIiwib25FcnJvciIsIl9hcm1lZFZpZGVvRnJhbWVDYWxsYmFja0lkIiwiX3RoaXMyJF9jaGFubmVsQ29udGV4IiwiY2FuY2VsVmlkZW9GcmFtZUNhbGxiYWNrIiwiX3RoaXMkX2NoYW5uZWxDb250ZXh0IiwiQ2h1bmtlZFN0cmVhbWluZyIsIk5ldHdvcmtTdGF0ZXMiLCJDaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlIiwiQ2h1bmtlZFN0cmVhbSIsImNodW5rZWRTdHJlYW1QbGF5YmFja01vZGUiLCJfY2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSIsIm9mZmVyU2RwIiwib3JpZ2luU3RhcnRUaW1lIiwicGxheWVyIiwibW9uaXRvciIsIl9tb25pdG9yRGlzcG9zYWJsZXMiLCJuZXdTdHJlYW1TdGF0aXN0aWNzIiwiTGl2ZSIsIm5ldHdvcmtTdGF0ZSIsIk5ldHdvcmtOb1NvdXJjZSIsImN1cnJlbnRUaW1lIiwiZHVyYXRpb24iLCJfbW9uaXRvckZhaWx1cmVDb3VudCIsIl9zdHJlYW1TdGF0aXN0aWNzIiwicGF1c2VkIiwiZGF0YUJ1ZmZlcmVkIiwiV2ViUGxheWVyIiwiU2hha2FQbGF5ZXIiLCJIbHNQbGF5ZXIiLCJfaGxzUGxheWVyIiwiX3BoZW5peFdlYlBsYXllciIsIl9zaGFrYSIsIl9vcHRpb25zIiwibG9hZGVkIiwiX3BlbmRpbmciLCJfcGxheWVyIiwiUGxheWVyIiwiZGFzaE1hbmlmZXN0VXJsTWF0Y2giLCJobHNNYW5pZmVzdFVybE1hdGNoIiwibWFuaWZlc3RVcmwiLCJwbGF5bGlzdFVybCIsInNob3VsZFVzZU5hdGl2ZUhscyIsInByZWZlck5hdGl2ZSIsIm1hbmlmZXN0VVJJIiwiX3ZpZGVvRWxlbWVudCIsIl9raW5kIiwiX3N0cmVhbUlkIiwiX21hbmlmZXN0VVJJIiwiZW5jb2RlVVJJIiwicmVwbGFjZSIsImhsc1BsYXllciIsImVuYWJsZVdvcmtlciIsIm1heEJ1ZmZlckxlbmd0aCIsImJhY2tCdWZmZXJMZW5ndGgiLCJsaXZlU3luY0R1cmF0aW9uIiwibGl2ZUR1cmF0aW9uSW5maW5pdHkiLCJsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uIiwiSW5maW5pdHkiLCJoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2QiLCJsb2FkU291cmNlIiwiYXR0YWNoTWVkaWEiLCJjYW5QbGF5VHlwZSIsInN0YXRpc3RpY3MiLCJtZWRpYSIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiTmV0d29ya0lkbGUiLCJidWZmZXJlZCIsImVuZCIsInN0cmVhbUNvbnRyb2xsZXIiLCJOZXR3b3JrTG9hZGluZyIsIk5ldHdvcmtFbXB0eSIsInRydWVDdXJyZW50VGltZSIsIm1heCIsImRlc3Ryb3kiLCJJbnNlcnRhYmxlU3RyZWFtcyIsImljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsIiwiZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCIsIlJlYWxUaW1lU3RyZWFtIiwicGVlckNvbm5lY3Rpb25Db250ZXh0Iiwic3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsInJlcXVpcmVzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zIiwiX3JlZjMkIiwiY2xpZW50T2ZmZXJEaXNhYmxlZCIsInN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiIsInN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiIsImFwcGx5UnRjQ29uZmlndXJhdGlvbiIsInN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0IiwiY2FuY2VsRGlzY292ZXJ5IiwiY2FuZGlkYXRlIiwicmV0cnlDYWxsYmFjayIsIm5hdmlnYXRvcklzT25MaW5lIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJtZWRpYVN0cmVhbVByb21pc2UiLCJvblRyYWNrRGlzYWJsZWQiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsImFuc3dlciIsIm1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzIiwicGFyc2VkUmVtb3RlRGVzY3JpcHRpb24iLCJyZWNlaXZlcnMiLCJfSW5zZXJ0YWJsZVN0cmVhbXMkY28iLCJjb25maWd1cmVFbmNvZGVkU3RyZWFtUGlwZWxpbmUiLCJlbmNvZGVkVmlkZW9GcmFtZSIsInJlcXVpcmVzRnJhbWVUaW1pbmdJbmZvcm1hdGlvbiIsInRvVXBwZXJDYXNlIiwiZnJhbWVUaW1pbmdJbmZvcm1hdGlvbk1hbmFnZXIiLCJnZXRWaWRlb1RyYWNrcyIsIl9wZWVyQ29ubmVjdGlvbiRnZXRUciIsInJlY2VpdmVyIiwic3VwcG9ydHNHZXRUcmFuc2NlaXZlcnMiLCJ0cmFuc2NlaXZlciIsIl9JbnNlcnRhYmxlU3RyZWFtcyRjbzIiLCJjb25maWd1cmVJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24iLCJ0cmFuc2Zvcm1lZFN0cmVhbSIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjQ29ubmVjdGlvbk1vbml0b3JTdGF0aXN0aWNTdWJzY3JpcHRpb24iLCJydGNTdGF0aXN0aWMiLCJydGNWaWRlb1N0YXRpc3RpYyIsInJ0Y0F1ZGlvU3RhdGlzdGljIiwiYXVkaW8iLCJhdWRpb1RyYWNrRmFpbGVkIiwidmlkZW9UcmFja0ZhaWxlZCIsIl9hcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJvcHRpb25hbFBlZXJDb25uZWN0aW9uIiwibmV3UnRjQ29uZmlndXJhdGlvbiIsIm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfcGVlckNvbm5lY3Rpb24kY3VycmUiLCJpc0NsaWVudE9mZmVyRmxvdyIsImljZVJlc3RhcnQiLCJvZmZlciIsIl9tb25pdG9yZWRTdGF0aXN0aWNzIiwiZXN0aW1hdGVkQmFuZHdpZHRoIiwicGxheVRpbWUiLCJzaGFrYSIsInBsYXllck9wdGlvbnMiLCJhYnIiLCJkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGUiLCJtYW5pZmVzdCIsInJldHJ5UGFyYW1ldGVycyIsInN0cmVhbWluZyIsImxpdmVTeW5jUGFuaWNUaHJlc2hvbGQiLCJidWZmZXJpbmdHb2FsIiwiYnVmZmVyQmVoaW5kIiwibWF4QXR0ZW1wdHMiLCJiYWNrb2ZmRmFjdG9yIiwibG9hZFBsYXllciIsInVubG9hZCIsInBsYXllckNvbmZpZyIsImNvbmZpZ3VyZSIsImxvYWQiLCJjb2RlIiwidG9rZW5DYXBhYmlsaXRpZXMiLCJoYXNTdHJlYW1pbmciLCJoYXNPbkRlbWFuZCIsIk9uZERlbWFuZCIsImJhbmR3aWR0aFRvU3RhcnRBdCIsIm1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIiwicGhlbml4V2ViUGxheWVyIiwiZXJyb3JPYmplY3QiLCJjYW5SZWxvYWQiLCJzZXZlcml0eSIsImVycm9ycyIsIlJFQ09WRVJBQkxFIiwicmVsb2FkSWZBYmxlIiwiX3RoaXMkX3ZpZGVvRWxlbWVudCRiIiwiX3RoaXMkX3ZpZGVvRWxlbWVudCRiMiIsImlzTmF0aXZlIiwiZGVsaXZlcnlUeXBlIiwiaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQiLCJfbGFzdFJlbG9hZFRpbWUiLCJyZWxvYWQiLCJtb2RlIiwiU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciIsIlNraXBGcmFtZSIsIldvcmtlclRyYW5zZm9ybVN0cmVhbSIsImVuY29kZWRBdWRpb0ZyYW1lIiwicmVjZWl2ZSIsIm11c3RTaW5rIiwid29ya2VyIiwib25tZXNzYWdlIiwicG9zdE1lc3NhZ2UiLCJmb3JjZUludmFsaWRGcmFtZSIsInRyYW5zZm9ybSIsInRlcm1pbmF0ZSIsImVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImNvbnRyb2xsZXIiLCJzdXJyb2dhdGUiLCJnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUiLCJnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUiLCJnZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjIiwiZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyIsImVucXVldWUiLCJ0cmFuc2Zvcm1lciIsIlRyYW5zZm9ybVN0cmVhbSIsInJlY2VpdmVyU3RyZWFtcyIsInNvdXJjZSIsInJlYWRhYmxlIiwic2luayIsIndyaXRhYmxlIiwicGlwZVRocm91Z2giLCJwaXBlVG8iLCJNZWRpYVN0cmVhbSIsImF1ZGlvUHVtcGVyIiwiQXVkaW8iLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSIsImdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMiLCJpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJ2aWRlb1RyYWNrIiwicHJvY2Vzc29yIiwiZ2VuZXJhdG9yIiwicmVtb3ZlVHJhY2siLCJhdWRpb1RyYWNrIiwiU3ltYm9sIiwiX2R1bW15QXVkaW9TaWxlbnRQZXJDb2RlYyIsIk9QVVMiLCJfc2luZ2xlWmVyb0J5dGUiLCJfdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlciIsIl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyIiwiX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCIsIl9kdW1teTgyeDgySDI2NCIsIklGcmFtZSIsIl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMiLCJIMjY0IiwiVlA4IiwiVlA5IiwiX2lzQW5kcm9pZENocm9tZSIsImdldFN1cnJvZ2F0ZTgyeDgyUEZyYW1lQW5kVXBkYXRlRnJhbWVOdW1iZXIiLCJfZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjIiwic2F2ZWRTdXJyb2dhdGVGcmFtZU51bWJlciIsImJpdE1hc2sxIiwiYml0TWFzazIiLCJiaXRTaGlmdFJpZ2h0QnkxIiwiYml0U2hpZnRMZWZ0Qnk3IiwiYnl0ZTEiLCJieXRlMiIsImNvcHlPZkR1bW15UEZyYW1lcyIsIlBGcmFtZSIsImJ1ZmZlckluZGV4IiwiX2R1bW15ODJ4ODJIMjY0UEZyYW1lRnJhbWVOdW1iZXJJbmRleCIsIl9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyIiwiaXNBbmRyb2lkIiwiX2lzTW9iaWxlQ2hyb21lIiwiX2lzU2FmYXJpIiwiX19CVUlMRF9WRVJTSU9OX18iLCJfZGVmYXVsdFZlcnNpb24iLCJUZWxlbWV0cnlTZXJ2aWNlIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJ2YWx1ZU9mIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsImxvZ01lc3NhZ2VzIiwiX3NlbmRMb2dzSWZBYmxlIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldEl0ZW1TaXplIiwiZ2V0TG9nU2l6ZSIsInN1bSIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJtaWxsaXNlY29uZHMiLCJwYXJ0cyIsIlN0cmluZyIsInRhcmdldExlbmd0aCIsInBhZFN0cmluZyIsInJlcGVhdCIsImRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyIsInJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmYiLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCIsIm90aGVyIiwiYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfbmV0d29ya01vbml0b3IiLCJpc0ZvcmVncm91bmQiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJMZW5ndGgiLCJoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCIsIl9sYXN0UHJvZ3Jlc3MiLCJ0aW1lU2luY2VTdG9wIiwibmV3UmVzb2x1dGlvbiIsIl92aWRlb1Jlc29sdXRpb24iXSwic291cmNlUm9vdCI6IiJ9
|