sf-reglanegociom3 1.0.12-beta95 → 1.0.12-beta97
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/bundles/sf-reglanegociom3.umd.js +48 -3
- package/bundles/sf-reglanegociom3.umd.js.map +1 -1
- package/bundles/sf-reglanegociom3.umd.min.js +1 -1
- package/bundles/sf-reglanegociom3.umd.min.js.map +1 -1
- package/esm2015/lib/rnm3/Promociones/promociones.service.js +17 -3
- package/esm2015/lib/rnm3/Services/M3Maestro.service.js +25 -1
- package/esm5/lib/rnm3/Promociones/promociones.service.js +17 -3
- package/esm5/lib/rnm3/Services/M3Maestro.service.js +32 -1
- package/fesm2015/sf-reglanegociom3.js +41 -3
- package/fesm2015/sf-reglanegociom3.js.map +1 -1
- package/fesm5/sf-reglanegociom3.js +48 -3
- package/fesm5/sf-reglanegociom3.js.map +1 -1
- package/lib/rnm3/Services/M3Maestro.service.d.ts +1 -0
- package/package.json +1 -1
- package/sf-reglanegociom3.metadata.json +1 -1
|
@@ -2222,6 +2222,37 @@ var ServiceM3Maestro = /** @class */ (function () {
|
|
|
2222
2222
|
oFuncionResp(JSON.parse(JSON.parse(err['_body']).Message));
|
|
2223
2223
|
});
|
|
2224
2224
|
};
|
|
2225
|
+
/**
|
|
2226
|
+
* @param {?} PostServiceM3
|
|
2227
|
+
* @param {?} id_katios
|
|
2228
|
+
* @param {?} ubihub
|
|
2229
|
+
* @param {?} oFuncionResp
|
|
2230
|
+
* @return {?}
|
|
2231
|
+
*/
|
|
2232
|
+
ServiceM3Maestro.prototype.validarEfectivoEnCaja = /**
|
|
2233
|
+
* @param {?} PostServiceM3
|
|
2234
|
+
* @param {?} id_katios
|
|
2235
|
+
* @param {?} ubihub
|
|
2236
|
+
* @param {?} oFuncionResp
|
|
2237
|
+
* @return {?}
|
|
2238
|
+
*/
|
|
2239
|
+
function (PostServiceM3, id_katios, ubihub, oFuncionResp) {
|
|
2240
|
+
PostServiceM3.postServiceHttpResFullM3("M3Maestro/validarEfectivoEnCaja/" + id_katios, ubihub).subscribe(function (resp) {
|
|
2241
|
+
try {
|
|
2242
|
+
oFuncionResp(JSON.parse(JSON.parse(resp['_body']).toString()));
|
|
2243
|
+
}
|
|
2244
|
+
catch (e) {
|
|
2245
|
+
console.error(resp);
|
|
2246
|
+
console.error(e);
|
|
2247
|
+
oFuncionResp(e);
|
|
2248
|
+
}
|
|
2249
|
+
}, function (err) {
|
|
2250
|
+
//Ejecutar funcion de error
|
|
2251
|
+
console.error("Error validarEfectivoEnCaja");
|
|
2252
|
+
console.error(err);
|
|
2253
|
+
oFuncionResp(JSON.parse(JSON.parse(err['_body']).Message));
|
|
2254
|
+
});
|
|
2255
|
+
};
|
|
2225
2256
|
/**
|
|
2226
2257
|
* @param {?} PostServiceM3
|
|
2227
2258
|
* @param {?} id_katios
|
|
@@ -2388,4 +2419,4 @@ var ServiceM3Maestro = /** @class */ (function () {
|
|
|
2388
2419
|
}());
|
|
2389
2420
|
export { ServiceM3Maestro };
|
|
2390
2421
|
|
|
2391
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTTNNYWVzdHJvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9zZi1yZWdsYW5lZ29jaW9tMy8iLCJzb3VyY2VzIjpbImxpYi9ybm0zL1NlcnZpY2VzL00zTWFlc3Ryby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUs3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztJQU9yQztLQUFpQjs7Ozs7Ozs7O0lBR1Ysa0RBQXVCOzs7Ozs7OztjQUFDLGFBQTRCLEVBQUUsU0FBaUIsRUFBRSxTQUFpQixFQUM3RixVQUFvQixFQUFFLFdBQXFCOztRQUMzQyxJQUFJLElBQUksQ0FBQztRQUNULElBQUksR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQTtRQUNqQyxhQUFhLENBQUMsYUFBYSxDQUFDLDZCQUE2QixHQUFHLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBQSxJQUFJO1lBRXZGLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDM0MsRUFDRyxVQUFBLEdBQUc7O1lBRUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbEMsQ0FBQyxDQUFDOzs7Ozs7Ozs7O0lBSUosbURBQXdCOzs7Ozs7OztjQUFDLGFBQTRCLEVBQUUsU0FBaUIsRUFBRSxXQUFtQixFQUNoRyxVQUFvQixFQUFFLFdBQXFCO1FBQzNDLGFBQWEsQ0FBQyxLQUFLLENBQUMsOEJBQThCLEdBQUcsU0FB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USxFQUFlLFFBQVE7O2lFQW9COUM7SUF1QkQ7UUFDa0QsbUJBQUEsUUFBUSxFQUFFLENBQUE7O2lEQUQxQixhQUFhLGtDQUMvQixRQUFRLEVBQWUsUUFBUTs7OERBWTlDO0lBRUQ7UUFDa0QsbUJBQUEsUUFBUSxFQUFFLENBQUE7O2lEQUR0QixhQUFhLGtDQUNuQyxRQUFRLEVBQWUsUUFBUTs7a0VBWTlDOzJCQXhMTDs7U0FhYSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb3N0U2VydmljZU0zIH0gZnJvbSBcIi4uLy4uL0NvbmV4aW9uU1FML3Bvc3RzLnNlcnZpY2VcIjtcclxuLy9pbXBvcnQgeyBzZXNzaW9uV0U4IH0gZnJvbSBcIi4uLy4uLy4uL1Nlc3Npb24vc2Vzc2lvbi5jbGFzc1wiO1xyXG5pbXBvcnQgeyBGaWx0cm9zIH0gZnJvbSBcIi4uL01hZXN0cm8vZmlsdHJvc1wiO1xyXG5pbXBvcnQgeyBNM0NvdWNoTWFlc3RybyB9IGZyb20gXCIuLi9EYXRhL20zLWNvdWNoLW1hZXN0cm9cIjtcclxuaW1wb3J0IHsgVHlwZU0zUHJkR3JwIH0gZnJvbSBcIi4uL01hZXN0cm8vTTNQcmRHcnAudHlwZVwiO1xyXG5pbXBvcnQgeyBNM1ViaWNhY2lvbiB9IGZyb20gXCIuLi9NYWVzdHJvL1ViaWNhY2lvbi9NM1ViaWNhY2lvbi50eXBlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VMaXN0YVByZWNpbyB9IGZyb20gXCIuL20zLWxpc3RhLXByZWNpby5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VMb2FkTGlzdGFQcmVjaW8gfSBmcm9tIFwiLi9tMy1sb2FkLWwtcHJlY2lvLnNlcnZpY2VcIjtcclxuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgybVhbmd1bGFyX3BhY2thZ2VzX3BsYXRmb3JtX2Jyb3dzZXJfcGxhdGZvcm1fYnJvd3Nlcl9hIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgTTNQcm9jZXNvcyB9IGZyb20gXCIuLi9SZWdpc3Ryby9tMy1wcm9jZXNvc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlcnZpY2VNM01hZXN0cm8ge1xyXG5cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAgIC8vVHJhZSBlbCBtM3Byb2Nlc29zIHNlZ3B1biBlbCBpZHByZXN0YW1vXHJcbiAgICBwdWJsaWMgZ2V0TTNQcm9jZXNvc1BvckNyZWRpdG8oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIGlkUHJvY2Vzbzogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICB2YXIgZGF0YTtcclxuICAgICAgICBkYXRhID0geyAnaWRQcm9jZXNvJzogaWRQcm9jZXNvIH1cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zL2dldE0zUHJvY2Vzb3NQb3JDcmVkaXRvLycgKyBzSURLYXRpb3MsIGRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soSlNPTi5wYXJzZShyZXNwLnRvU3RyaW5nKCkpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIuZXJyb3IuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIFxyXG5cclxuICAgIC8vVHJhZSBlbCBtM3Byb2Nlc29zIHNlZ3B1biBlbCBpZHByZXN0YW1vXHJcbiAgICBwdWJsaWMgZ2V0TTNQcm9jZXNvQnlJZFByZXN0YW1vKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBzSWRQcmVzdGFtbzogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNMy9nZXRNM1Byb2Nlc29CeUlkUHJlc3RhbW8vJyArIHNJREthdGlvcyArICcvJyArIHNJZFByZXN0YW1vKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIHZhciBvTTNQcm9jZXNvczogYW55O1xyXG4gICAgICAgICAgICBvTTNQcm9jZXNvcyA9IHJlc3A7XHJcblxyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKG9NM1Byb2Nlc29zKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBcclxuXHJcbiAgICAvL3JhZSBlbCBUSVBPLCBTS1AxLCBOT01CUkUgZGUgbGEgdGFibGEgcHJkZ3JwXHJcbiAgICBwdWJsaWMgbTNHZXRQUkRHUlAoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9nZXRNM1BSREdSUC8nICsgc0lES2F0aW9zKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcblxyXG4gICAgICAgICAgICB2YXIgb0RhdGEgPSBKU09OLnBhcnNlKHJlc3ApO1xyXG5cclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhvRGF0YSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgXHJcblxyXG5cclxuICAgIC8vT2J0ZW5lciBsYSBjYW50aWRhZCBkaXNwb25pYmxlIGRlIHByb2R1Y3RvLCB0ZW5pZW5kbyBlbiBjdWVudGEgZWwgU0tQMSB5IGxhIHViaWNhY2nDs24uXHJcbiAgICAvL0xhIGRhdGEgZGViZSB0ZW5lciB1bmEgZXN0cnVjdHVyYToge1wiVUJJQ0FDSU9OXCI6XCIxMTExXCIsIFwiU0tQMVwiOlwiOTk5OWFcIn1cclxuICAgIHB1YmxpYyBNM0dldENhbnRpZGFkQnlTS1AxKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBvRGF0YVNlbmQ6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vTTNHZXRDYW50aWRhZEJ5U0tQMS8nICsgc0lES2F0aW9zLCBvRGF0YVNlbmQpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuXHJcbiAgICAgICAgICAgIHZhciBvRGF0YSA9IEpTT04ucGFyc2UocmVzcC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgdmFyIGdvRGF0YURpc3A6IEFycmF5PGFueT47XHJcbiAgICAgICAgICAgIGlmIChvRGF0YS5SRVNQVUVTVEEuRElTUE9OSUJJTElEQUQubGVuZ3RoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vTm8gZXMgYXJyYXlcclxuICAgICAgICAgICAgICAgIGdvRGF0YURpc3AgPSBuZXcgQXJyYXk8YW55PihvRGF0YS5SRVNQVUVTVEEuRElTUE9OSUJJTElEQUQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZ29EYXRhRGlzcCA9IG9EYXRhLlJFU1BVRVNUQS5ESVNQT05JQklMSURBRDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhnb0RhdGFEaXNwKTtcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhnb0RhdGFEaXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIuZXJyb3IuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIFxyXG5cclxuXHJcblxyXG4gICAgLy9PYnRlbmVyIGxhIGxpc3RhIGRlIHByb2R1Y3RvLCB0ZW5pZW5kbyBlbiBjdWVudGEsIHVuIGFycmF5IGRlIGZpbHRyb3MuXHJcbiAgICBHZXRMaXN0YVByZFhGaWx0cm9zKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIG9sRmlsdHJvczogQXJyYXk8RmlsdHJvcz4sIHNJRExpc3RhOiBzdHJpbmcsIHNJREthdGlvczogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24sIEBPcHRpb25hbCgpIGlkVWJpY2FjaW9uID0gXCItMVwiLCBAT3B0aW9uYWwoKSBhcGxVbHRpbW9GaWx0cm8gPSB0cnVlLCBAT3B0aW9uYWwoKSB0b3BMaW1pdCA9IFwiMFwiLCBAT3B0aW9uYWwoKSBmaWx0cmFySW52VWJpYyA9IFwiMFwiKSB7XHJcbiAgICAgICAgdmFyIG9EYXRhU2VuZDtcclxuICAgICAgICBvRGF0YVNlbmQgPSB7IFwiRmlsdHJvc1wiOiBKU09OLnN0cmluZ2lmeShvbEZpbHRyb3MpLCBcIklkTGlzdGFcIjogc0lETGlzdGEsIFwiSWRVYmljYWNpb25cIjogaWRVYmljYWNpb24sIFwiYXBsVWx0aW1vRmlsdHJvXCI6IGFwbFVsdGltb0ZpbHRybywgXCJ0b3BMaW1pdFwiOiB0b3BMaW1pdCwgXCJmaWx0cmFySW52VWJpY1wiOiBmaWx0cmFySW52VWJpYyB9O1xyXG4gICAgICAgIGlmIChvbEZpbHRyb3MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9HZXRfTGlzdFBSREZpbHRyb3MvJyArIHNJREthdGlvcywgb0RhdGFTZW5kKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwLCBvbEZpbHRyb3MpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIuZXJyb3IuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvRnVuY2lvbkVycihcIk5vIGhheSBmaWx0cm9zIHBhcmEgbGEgYnVzcXVlZGFcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL09idGVuZXIgbGlzdGEgZGUgcHJvZHVjdG9zLCBzZWd1biBsYSBjYXRlZ29yaWEuXHJcbiAgICBHZXRMaXN0YVByZFhDYXRlZ29yaWEoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0NhdGVnb3JpYTogc3RyaW5nLCBvRGF0YUNsYXNpZmljYWNpb24sIElkTGlzdGE6IHN0cmluZywgc0lES2F0aW9zOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbiwgQE9wdGlvbmFsKCkgaWRVYmljYWNpb24gPSBcIi0xXCIsIEBPcHRpb25hbCgpIGZpbHRyYXJJbnZVYmljOiBzdHJpbmcgPSBcIjBcIikge1xyXG4gICAgICAgIHZhciBvbEZpbHRyb3M6IEFycmF5PEZpbHRyb3M+O1xyXG4gICAgICAgIHZhciBvRGF0YVNlbmQ7XHJcbiAgICAgICAgb2xGaWx0cm9zID0gdGhpcy5GaW5kRmlsdGVySW5DbGFzaWZpY2FjaW9uKHNDYXRlZ29yaWEsIHNJREthdGlvcywgb0RhdGFDbGFzaWZpY2FjaW9uKTtcclxuXHJcbiAgICAgICAgb0RhdGFTZW5kID0geyBcIkZpbHRyb3NcIjogSlNPTi5zdHJpbmdpZnkob2xGaWx0cm9zKSwgXCJJZExpc3RhXCI6IElkTGlzdGEsIFwiSWRVYmljYWNpb25cIjogaWRVYmljYWNpb24sIFwiZmlsdHJhckludlViaWNcIjogZmlsdHJhckludlViaWMgfTtcclxuICAgICAgICBpZiAob2xGaWx0cm9zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vR2V0X0xpc3RQUkRGaWx0cm9zLycgKyBzSURLYXRpb3MsIG9EYXRhU2VuZCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCwgb2xGaWx0cm9zKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyLmVycm9yLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVyci5lcnJvci5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uRXJyKFwiTm8gaGF5IGZpbHRyb3MgcGFyYSBsYSBidXNxdWVkYVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfS8vRW5kIEdldExpc3RhUHJkWENhdGVnb3JpYVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICAvL09idGVuZXIgbGlzdGEgZGUgcHJvZHVjdG9zLCBzZWd1biBsYSBjYXRlZ29yaWEuXHJcbiAgICBHZXRMaXN0YVByZFhDYXRlZ29yaWFXaXRoT3V0RmlsdGVycyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzQ2F0ZWdvcmlhOiBzdHJpbmcsIHNJREthdGlvczogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL00zR2V0TGlzdGFQcm9kQnlDbGFzaWZpY2FjaW9uLycgKyBzSURLYXRpb3MgKyAnLycgKyBzQ2F0ZWdvcmlhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCwgbnVsbCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgR2V0TGlzdGFQcmRYQ2F0ZWdvcmlhXHJcblxyXG5cclxuXHJcbiAgICAvL09idGVuZXIgbGlzdGEgZGUgcHJvZHVjdG9zLCBzZWd1biBlbCBub21icmUgbyBkZXNjcmlwY2nDs24uXHJcbiAgICBHZXRMaXN0YVByZFhOb21icmUoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc05vbWJyZTogc3RyaW5nLCBpZFViaWNhY2lvbjogc3RyaW5nLCBzSURLYXRpb3M6IHN0cmluZywgc0lETGlzdGE6IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uLCBAT3B0aW9uYWwoKSBmaWx0cmFySW52VWJpYzogc3RyaW5nID0gXCIwXCIpIHtcclxuXHJcbiAgICAgICAgdmFyIG9EYXRhID0geyBcIklkTGlzdGFcIjogc0lETGlzdGEsIFwiaWRVYmljYWNpb25cIjogaWRVYmljYWNpb24sIFwiZmlsdHJhckludlViaWNcIjogZmlsdHJhckludlViaWMgfTtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9NM0dldExpc3RhUHJvZEJ5Tm9tYnJlLycgKyBzSURLYXRpb3MgKyAnLycgKyBzTm9tYnJlLCBvRGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihKU09OLnBhcnNlKGVyci5fYm9keSkuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNhcmdhckxpc3RQcmRCeUdlbmVyaWMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc05vbWJyZTogc3RyaW5nLCBpZFViaWNhY2lvbjogc3RyaW5nLCBzSURLYXRpb3M6IHN0cmluZywgc0lETGlzdGE6IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uLCBAT3B0aW9uYWwoKSBmaWx0cmFySW52VWJpYzogc3RyaW5nID0gXCIwXCIpIHtcclxuXHJcbiAgICAgICAgdmFyIG9EYXRhID0geyBcIklkTGlzdGFcIjogc0lETGlzdGEsIFwiaWRVYmljYWNpb25cIjogaWRVYmljYWNpb24sIFwiZmlsdHJhckludlViaWNcIjogZmlsdHJhckludlViaWMgfTtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9jYXJnYXJMaXN0UHJkQnlHZW5lcmljLycgKyBzSURLYXRpb3MgKyAnLycgKyBzTm9tYnJlLCBvRGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIuZXJyb3IpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL2NhcmdhciBpbmZvcm1hY2lvbiBkZSBjbGFzaWZpY2FjaW9uXHJcbiAgICBjYXJnYXJJbmZvQ2xhc2lmaWNhY2lvbihQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywganNvblJlc3AsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICAvL3ZhciBvc2Vzc2lvbldFOCA9IG5ldyBzZXNzaW9uV0U4KCk7XHJcblxyXG4gICAgICAgIC8vanNvblJlc3AgPSBvc2Vzc2lvbldFOC5HZXREYXRhQ0xBU0lGSUNBQ0lPTihzSURLYXRpb3MpO1xyXG4gICAgICAgIGlmIChqc29uUmVzcCA9PT0gdW5kZWZpbmVkIHx8IGpzb25SZXNwID09IG51bGwpIHtcclxuICAgICAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMyhcIk0zTWFlc3Ryby9NM0dldENsYXNpZmljYWNpb24vXCIgKyBzSURLYXRpb3MpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgICAgIGpzb25SZXNwID0gSlNPTi5wYXJzZShyZXNwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuVmFsaWRhckFycmF5Q2xhc2lmaWNhY2lvbihqc29uUmVzcCk7XHJcbiAgICAgICAgICAgICAgICAvL29zZXNzaW9uV0U4LlNldERhdGFDTEFTSUZJQ0FDSU9OKGpzb25SZXNwLCBzSURLYXRpb3MpO1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uT0soanNvblJlc3ApO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soanNvblJlc3ApO1xyXG4gICAgICAgIH1cclxuICAgIH0vL0VuZCBjYXJnYXJJbmZvQ2xhc2lmaWNhY2lvblxyXG5cclxuICAgIC8vVmFsaWRhciBxdWUgbGEgY2xhc2lmaWNhY2lvbiwgZXN0ZW4gY29tbyBhcnJheS5cclxuICAgIFZhbGlkYXJBcnJheUNsYXNpZmljYWNpb24ob0RhdGFDbGFzKSB7XHJcbiAgICAgICAgdGhpcy5SZWN1cnNpdmVDb252ZXJ0QXJyYXkob0RhdGFDbGFzLlJFU1BVRVNUQS5DTEFTSUZJQ0FDSU9ORVMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL0FwbGljYXIgZmlsdHJvcyBhIGxhIGNhdGVnb3JpYSBlbnRyYW50ZS5cclxuICAgIEZpbmRGaWx0ZXJJbkNsYXNpZmljYWNpb24oc0NsYXNGaW5kOiBzdHJpbmcsIHNJREthdGlvczogc3RyaW5nLCBvRGF0YUNsYXNpZmljYWNpb24pIHtcclxuICAgICAgICB2YXIgc0NsYXNpZmljYWNpb246IHN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgdmFyIG9EYXRhRmlsdHJhZGE7XHJcbiAgICAgICAgLy92YXIgb3Nlc3Npb25XRTggPSBuZXcgc2Vzc2lvbldFOCgpO1xyXG4gICAgICAgIHZhciBvbEZpbHRyb3MgPSBuZXcgQXJyYXk8RmlsdHJvcz4oKTtcclxuICAgICAgICB2YXIgb0ZpbHRyb3M6IEZpbHRyb3M7XHJcbiAgICAgICAgdmFyIGZpbHRyb0F0cmlidXRvOiBzdHJpbmc7XHJcblxyXG4gICAgICAgIC8vY29uc29sZS5sb2coc0NsYXNGaW5kKTtcclxuICAgICAgICAvL29EYXRhQ2xhc2lmaWNhY2lvbiA9IG9zZXNzaW9uV0U4LkdldERhdGFDTEFTSUZJQ0FDSU9OKHNJREthdGlvcyk7XHJcblxyXG4gICAgICAgIG9EYXRhRmlsdHJhZGEgPSBvRGF0YUNsYXNpZmljYWNpb24uUkVTUFVFU1RBLkNMQVNJRklDQUNJT05FUztcclxuXHJcbiAgICAgICAgaWYgKHNDbGFzRmluZC5sZW5ndGggJSAzID09IDApIHtcclxuICAgICAgICAgICAgd2hpbGUgKHNDbGFzRmluZCAhPSBcIlwiKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgc0NsYXNpZmljYWNpb24gPSBzQ2xhc2lmaWNhY2lvbiArIHNDbGFzRmluZC5zdWJzdHJpbmcoMCwgMyk7XHJcbiAgICAgICAgICAgICAgICBzQ2xhc0ZpbmQgPSBzQ2xhc0ZpbmQuc3Vic3RyaW5nKDMpO1xyXG4gICAgICAgICAgICAgICAgb0RhdGFGaWx0cmFkYSA9IG9EYXRhRmlsdHJhZGEuQ0FURUdPUklBLmZpbmQoZmlsdHJvID0+IGZpbHRyby5DTEFTSUZJQ0FDSU9OLnRvU3RyaW5nKCkgPT0gc0NsYXNpZmljYWNpb24udG9TdHJpbmcoKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZmlsdHJvQXRyaWJ1dG8gPSBvRGF0YUZpbHRyYWRhLkFUUklCVVRPO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0cm9BdHJpYnV0by50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKFwiUk9PVFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9GaWx0cm9zID0gbmV3IEZpbHRyb3Mob0RhdGFGaWx0cmFkYS5BVFJJQlVUTywgb0RhdGFGaWx0cmFkYS5EZXNjcmlwY2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgb2xGaWx0cm9zLnB1c2gob0ZpbHRyb3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvL29EYXRhUmVzcENsYSA9IHRoaXMuUmVjdXJzaXZlQ2xhc2lmaWNhY2lvbihvRGF0YUNsYXNpZmljYWNpb24uUkVTUFVFU1RBLkNMQVNJRklDQUNJT05FUy5DQVRFR09SSUEsIHNDbGFzRmluZCk7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKG9EYXRhUmVzcENsYSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9sRmlsdHJvcztcclxuICAgIH1cclxuXHJcbiAgICAvL1JlY3Vyc2l2aWRhZCwgcGFyYSB2YWxpZGFyIHF1ZSB0b2RvcyBsb3Mgbm9kb3MsIHNlYW4gdGlwbyBhcnJheVxyXG4gICAgUmVjdXJzaXZlQ29udmVydEFycmF5KG9EYXRhQ2xhcykge1xyXG4gICAgICAgIGlmIChvRGF0YUNsYXMuQ0FURUdPUklBICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKG9EYXRhQ2xhcy5DQVRFR09SSUEubGVuZ3RoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIG9EYXRhQ2xhcy5DQVRFR09SSUEgPSBuZXcgQXJyYXkob0RhdGFDbGFzLkNBVEVHT1JJQSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlJlY3Vyc2l2ZUNvbnZlcnRBcnJheShvRGF0YUNsYXMuQ0FURUdPUklBWzBdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9EYXRhQ2xhcy5DQVRFR09SSUEuZm9yRWFjaChjbGFzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlJlY3Vyc2l2ZUNvbnZlcnRBcnJheShjbGFzKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vQWRpY2lvbmEgdW4gcHJvZHVjdG9cclxuICAgIG0zQWRkUHJvZHVjdG8oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIHRkb2NVQWN0aXZvOiBzdHJpbmcsIG5kb2NVQWN0aXZvOiBzdHJpbmcsIG9NM1ByZEdycDogVHlwZU0zUHJkR3JwLCBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uLCBkaXNhYmxlZFdlYjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIGRhdGE7XHJcbiAgICAgICAgZGF0YSA9IHsgJ3NUZG9jVXN1YXJpbyc6IHRkb2NVQWN0aXZvLCAnc05kb2NVc3VhcmlvJzogbmRvY1VBY3Rpdm8sICdvTTNQcmRHcnAnOiBvTTNQcmRHcnAsICdkaXNhYmxlZFdlYic6IGRpc2FibGVkV2ViIH07XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKFwiTTNNYWVzdHJvL2FkZFByb2R1Y3RvL1wiICsgc0lES2F0aW9zLnRyaW0oKSwgZGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9PYnRlbmVyIHByb2R1Y3RvIHBvciBTS1AxLlxyXG4gICAgTTNHZXRQcm9kdWN0b0J5U0tQMShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgZGF0YTogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24sIG9EYXRhVXNlcjogYW55KSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKFwiTTNNYWVzdHJvL00zR2V0UHJvZHVjdG9CeVNLUDEvXCIgKyBzSURLYXRpb3MsIGRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgdmFyIHByb2R1Y3RvOiBhbnkgPSByZXNwO1xyXG4gICAgICAgICAgICB2YXIgb1NlcnZpY2VMb2FkTGlzdGFQcmVjaW8gPSBuZXcgU2VydmljZUxvYWRMaXN0YVByZWNpbyhzSURLYXRpb3MpO1xyXG4gICAgICAgICAgICBvU2VydmljZUxvYWRMaXN0YVByZWNpby5Bc2lnbmFyTGlzdGFQcmVjaW8ocHJvZHVjdG8sIG9EYXRhVXNlciwgUG9zdFNlcnZpY2VNMykudGhlbih4ID0+IHtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uT0socHJvZHVjdG8pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vT2J0ZW5lciBwcm9kdWN0byByYW5kb20gcG9yIFNLUDEuXHJcbiAgICBNM0dldFByb2R1Y3RvUmFuZG9tQnlTS1AxKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBkYXRhOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbiwgb0RhdGFVc2VyOiBhbnkpIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoXCJNM01hZXN0cm8vTTNHZXRQcm9kdWN0b1JhbmRvbUJ5U0tQMS9cIiArIHNJREthdGlvcywgZGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvL09idGVuZXIgcHJvZHVjdG8gcG9yIFNLUDEuXHJcbiAgICBNM0dldENhdEFzb2NpYWRhc0J5U0tQMShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgc2twMTogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKFwiTTNNYWVzdHJvL00zR2V0Q2F0QXNvY2lhZGFzQnlTS1AxL1wiICsgc0lES2F0aW9zICsgJy8nICsgc2twMSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vL0dldCBJbWFnZW5lcyBlbnZpYW5kbyBlbiBsYSBvRGF0YToge1wiUGF0aFwiOlwieHh4XCIsIFwiU0tVXCI6XCJTS1V4eHhcIn1cclxuICAgIHB1YmxpYyBNM0dldEltYWdlbmVzQnlQYXRoKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBvRGF0YTogYW55LCBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vR2V0X00zTXVsdGltZWRpYUJ5UGF0aC8nICsgc0lES2F0aW9zLCBvRGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIuZXJyb3IuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vb2J0ZW5lciBpbmZvcm1hY2lvbiBkZSBwbGFudGlsbGFzLCBkZXNkZSBzZXJ2aWRvci4uLiBcclxuICAgIEdldF9NM1NLUGxhbnRpbGxhQnlTS1VJRChQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgU0tVSUQ6IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMyhcIk0zTWFlc3Ryby9HZXRfTTNTS1BsYW50aWxsYUJ5U0tVSUQvXCIgKyBzSURLYXRpb3MgKyBcIi9cIiArIFNLVUlEKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcblxyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9PYnRlbmVyIGluZm9ybWFjacOzbiBkZSBwcm9kdWN0b3MsIGRlc2RlIGNvZGlnbyBkZSBiYXJyYXNcclxuICAgIEdldEluZm9CeUZpbHRlckNvZGUoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIHNGaWx0ZXJDb2RlOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIHZhciBvRGF0YSA9IHsgXCJGSUxURVJDT0RFXCI6IHNGaWx0ZXJDb2RlIH07XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL00zR2V0U0tQMVByZHNCeUZpbHRlcnNDb2RlLycgKyBzSURLYXRpb3MsIG9EYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soSlNPTi5wYXJzZShyZXNwLnRvU3RyaW5nKCkpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyLmVycm9yLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBHZXRJbmZvQnlGaWx0ZXJDb2RlIFxyXG5cclxuICAgIC8vT2J0aWVuZSBlbCBvYmpldG8gTTNVYmljYWNpb25lcyBwYXJhIGxhIHViaWNhY2lvbiB5IGlka2F0aW9zIGRhZG9zXHJcbiAgICBnZXRfTTNVYmljYWNpb25lcyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgc0lkVWJpY2FjaW9uOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vZ2V0X00zVWJpY2FjaW9uZXMvJyArIHNJREthdGlvcyArICcvJyArIHNJZFViaWNhY2lvbikuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBnZXRfTTNVYmljYWNpb25lc1xyXG5cclxuICAgIC8vT2J0aWVuZSBlbCBvYmpldG8gTTNVYmljYWNpb25lcyBwYXJhIGxhIHViaWNhY2lvbiB5IGlka2F0aW9zIGRhZG9zXHJcbiAgICBnZXRfTTNVYmljYWNpb25lc0NvbXBsZXRhKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBzSWRVYmljYWNpb246IHN0cmluZywgc0lkSHViOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTNXaXRoVGltZU91dCgnTTNNYWVzdHJvL2dldF9NM1ViaWNhY2lvbmVzQ29tcGxldGEvJyArIHNJREthdGlvcyArICcvJyArIHNJZFViaWNhY2lvbiArICcvJyArIHNJZEh1YiwgMTAwMDApLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgZ2V0X00zVWJpY2FjaW9uZXNDb21wbGV0YVxyXG5cclxuXHJcbiAgICAvL3JhZSBlbCBwcm9kdWN0byBkZSBhY3VlcmRvIGFsIFNLVVxyXG4gICAgcHVibGljIE0zR2V0UHJvZHVjdG9CeVNLVShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgZGF0YTogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24sIG9EYXRhVXNlcjogYW55KSB7XHJcbiAgICAgICAgdmFyIG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvID0gbmV3IFNlcnZpY2VMb2FkTGlzdGFQcmVjaW8oc0lES2F0aW9zKTtcclxuXHJcbiAgICAgICAgaWYgKG9EYXRhVXNlci5Vc3VhcmlvU2lzdGVtYS5GZWNoYVByZWNpbykgZGF0YS5mZWNoYUxQcmVjaW8gPSBvRGF0YVVzZXIuVXN1YXJpb1Npc3RlbWEuRmVjaGFQcmVjaW87XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKFBvc3RTZXJ2aWNlTTMpO1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL00zR2V0UHJvZHVjdG9CeVNLVS8nICsgc0lES2F0aW9zLCBkYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIHZhciBvUHJvZHVjdG86IGFueSA9IHJlc3A7XHJcbiAgICAgICAgICAgIG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvLkFzaWduYXJMaXN0YVByZWNpbyhvUHJvZHVjdG8sIG9EYXRhVXNlciwgUG9zdFNlcnZpY2VNMykudGhlbih4ID0+IHtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uT0sob1Byb2R1Y3RvKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihKU09OLnBhcnNlKGVyci5fYm9keSkuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL3JhZSBlbCBwcm9kdWN0byBkZSBhY3VlcmRvIGFsIFNLVVxyXG4gICAgYXN5bmMgTTNHZXRQcm9kdWN0b0J5U0tVQXN5bmMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIHNTS1U6IHN0cmluZyxcclxuICAgICAgICBvRGF0YVVzZXI6IGFueSwgVWJpY2FjaW9uOiBzdHJpbmcgPSBcIi0xXCIsIHNBcGxFeGM6IHN0cmluZyA9IFwiMVwiKSB7XHJcbiAgICAgICAgdmFyIGRhdGE7XHJcbiAgICAgICAgdmFyIHJlc3A7XHJcbiAgICAgICAgdmFyIG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvID0gbmV3IFNlcnZpY2VMb2FkTGlzdGFQcmVjaW8oc0lES2F0aW9zKTtcclxuXHJcbiAgICAgICAgZGF0YSA9IHsgJ1NLVSc6IHNTS1UsIFwiVUJJQ0FDSU9OXCI6IFViaWNhY2lvbiA9PSBcIi0xXCIgPyBvRGF0YVVzZXIuVXN1YXJpb1Npc3RlbWEuVUJJQ0FDSU9OIDogVWJpY2FjaW9uLCAnQXBsRXhjJzogc0FwbEV4YyB9O1xyXG4gICAgICAgIGlmIChvRGF0YVVzZXIuVXN1YXJpb1Npc3RlbWEuRmVjaGFQcmVjaW8pIGRhdGEuZmVjaGFMUHJlY2lvID0gb0RhdGFVc2VyLlVzdWFyaW9TaXN0ZW1hLkZlY2hhUHJlY2lvO1xyXG5cclxuICAgICAgICByZXNwID0gYXdhaXQgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vTTNHZXRQcm9kdWN0b0J5U0tVLycgKyBzSURLYXRpb3MsIGRhdGEpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGF3YWl0IG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvLkFzaWduYXJMaXN0YVByZWNpbyhyZXNwLCBvRGF0YVVzZXIsIFBvc3RTZXJ2aWNlTTMpO1xyXG4gICAgICAgIHJldHVybiByZXNwO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL09idGVuZXIgcHJvZHVjdG8gZXNwZWNmaWNvIHRlbmllbmRvIGVuIGN1ZW50YSBjb2RpZ28uXHJcbiAgICBhc3luYyBHZXRfTTNQcm9kdWN0b0VzcGVjQnlDb2RlQXN5bmMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIGRhdGE6IGFueSwgb0RhdGFVc2VyOiBhbnkpIHtcclxuICAgICAgICB2YXIgb1NlcnZpY2VMb2FkTGlzdGFQcmVjaW8gPSBuZXcgU2VydmljZUxvYWRMaXN0YVByZWNpbyhzSURLYXRpb3MpO1xyXG4gICAgICAgIHZhciBvUHJvZHVjdG86IGFueTtcclxuXHJcbiAgICAgICAgaWYgKG9EYXRhVXNlci5Vc3VhcmlvU2lzdGVtYS5GZWNoYVByZWNpbykgZGF0YS5mZWNoYUxQcmVjaW8gPSBvRGF0YVVzZXIuVXN1YXJpb1Npc3RlbWEuRmVjaGFQcmVjaW87XHJcblxyXG4gICAgICAgIG9Qcm9kdWN0byA9IGF3YWl0IFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMyhcIk0zTWFlc3Ryby9HZXRfTTNQcm9kdWN0b0VzcGVjQnlDb2RlL1wiICsgc0lES2F0aW9zLCBkYXRhKS50b1Byb21pc2UoKTtcclxuICAgICAgICBhd2FpdCBvU2VydmljZUxvYWRMaXN0YVByZWNpby5Bc2lnbmFyTGlzdGFQcmVjaW8ob1Byb2R1Y3RvLCBvRGF0YVVzZXIsIFBvc3RTZXJ2aWNlTTMpO1xyXG4gICAgICAgIHJldHVybiBvUHJvZHVjdG87XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vVHJhZSBsb3MgcmVnaXN0cm9zIHF1ZSBzZSBlbmN1ZW50cmVuIGVuIE0zUHJvY2Vzb3MgcXVlIHNlIGVuY3VlbnRyZW4gY29uIGVzdGFkb2dlbmVyYWwgcHJvY2Vzb1xyXG4gICAgTTNnZXRSZWdpc3Ryb3NFblByb2Nlc28oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIGlkUHJvY2Vzbzogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICB2YXIgZGF0YTtcclxuICAgICAgICBkYXRhID0geyAnaWRQcm9jZXNvJzogaWRQcm9jZXNvIH1cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zL2dldF9SZWdpc3Ryb3NFblByb2Nlc28vJyArIHNJREthdGlvcywgZGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKEpTT04ucGFyc2UocmVzcC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVyci5fYlNvZHkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL09idGllbmUgZWwgdG9wIDIwIGRlIHByb2R1Y3RvcyBxdWUgY29pbmNpZGFkIGNvbiBlbCBzTm9tYnJlIGluZ3Jlc2Fkb1xyXG4gICAgZ2V0X00zUHJkR3JwQnlOb21icmUoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIHNOb21icmU6IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9nZXRfTTNQcmRHcnBCeU5vbWJyZS8nICsgc0lES2F0aW9zICsgJy8nICsgc05vbWJyZSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG5cclxuICAgICAgICAgICAgdmFyIGpSZXNwID0gSlNPTi5wYXJzZShyZXNwKS5SRVNQVUVTVEEuTTNHUlA7XHJcbiAgICAgICAgICAgIGlmIChqUmVzcC5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzcCA9IG5ldyBBcnJheShqUmVzcCk7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25PSyhqUmVzcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoSlNPTi5wYXJzZShlcnIuX2JvZHkpLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBnZXRfTTNQcmRHcnBCeU5vbWJyZVxyXG5cclxuICAgIC8vT2J0aWVuZSBlbCB0b3AgMjAgZGUgcHJvZHVjdG9zIGFncnVwYWRvcyBxdWUgY29pbmNpZGFkIGNvbiBlbCBzTm9tYnJlIGluZ3Jlc2Fkb1xyXG4gICAgcHVibGljIEdldE0zUHJkQWdydXBhZG9CeU5vbWJyZShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgc05vbWJyZTogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL2dldF9tM19wcmRfYnlfbm9tYnJlX2FncnVwYWRvLycgKyBzSURLYXRpb3MgKyAnLycgKyBzTm9tYnJlKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcblxyXG4gICAgICAgICAgICB2YXIgalJlc3AgPSBKU09OLnBhcnNlKHJlc3ApLlJFU1BVRVNUQS5NM0dSUDtcclxuICAgICAgICAgICAgaWYgKGpSZXNwLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwID0gbmV3IEFycmF5KGpSZXNwKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbk9LKGpSZXNwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihKU09OLnBhcnNlKGVyci5fYm9keSkuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vT2J0aWVuZSBlbCB0b3AgMjAgZGUgcHJvZHVjdG9zIGFncnVwYWRvcyBxdWUgY29pbmNpZGFkIGNvbiBlbCBzTm9tYnJlIGluZ3Jlc2FkbyB5IHF1ZSBubyBlc3RlbiBleGxjdWlkb3MgKE0zRXhjUHJkWFViaWMpXHJcbiAgICBwdWJsaWMgZ2V0X20zX3ByZF9ieV9ub21icmVfYWdydXBhZG8oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIGRhdGE6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIC8vZGF0YSA9IHtub21icmU6J2FzZGFzZCcsIGlkVWJpY2FjaW9uOicxJ31cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9nZXRfbTNfcHJkX2J5X25vbWJyZV9hZ3J1cGFkby8nICsgc0lES2F0aW9zLCBkYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcblxyXG4gICAgICAgICAgICB2YXIgalJlc3AgPSBKU09OLnBhcnNlKFN0cmluZyhyZXNwKSkuUkVTUFVFU1RBLk0zR1JQO1xyXG4gICAgICAgICAgICBpZiAoalJlc3AubGVuZ3RoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3AgPSBuZXcgQXJyYXkoalJlc3ApO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uT0soalJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuX2JvZHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihKU09OLnBhcnNlKGVyci5fYm9keSkuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuZXJyb3IgJiYgZXJyLmVycm9yLk1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyLmVycm9yLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vL09idGllbmUgZWwgcGF0aCBiYXNlIGRvbmRlIHNlIGVuY3VlbnRyYSBhbG9qYWRhcyBsYXMgaW1hZ2VuZXMgZW4gZWwgc2Vydmlkb3JcclxuICAgIHB1YmxpYyBnZXRfUGF0aFNlcnZpZG9ySW1hZ2VuZXMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vZ2V0X1BhdGhTZXJ2aWRvckltYWdlbmVzLycgKyBzSURLYXRpb3MpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3ApXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgZ2V0X1BhdGhTZXJ2aWRvckltYWdlbmVzXHJcblxyXG5cclxuICAgIC8vT2J0ZW5lciBwcm9kdWN0byBlc3BlY2ZpY28gdGVuaWVuZG8gZW4gY3VlbnRhIGNvZGlnby5cclxuICAgIEdldF9NM1Byb2R1Y3RvRXNwZWNCeUNvZGUoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIGRhdGE6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uLCBvRGF0YVVzZXI6IGFueSkge1xyXG4gICAgICAgIHZhciBvU2VydmljZUxvYWRMaXN0YVByZWNpbyA9IG5ldyBTZXJ2aWNlTG9hZExpc3RhUHJlY2lvKHNJREthdGlvcyk7XHJcblxyXG4gICAgICAgIGlmIChvRGF0YVVzZXIuVXN1YXJpb1Npc3RlbWEuRmVjaGFQcmVjaW8pIGRhdGEuZmVjaGFMUHJlY2lvID0gb0RhdGFVc2VyLlVzdWFyaW9TaXN0ZW1hLkZlY2hhUHJlY2lvO1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMyhcIk0zTWFlc3Ryby9HZXRfTTNQcm9kdWN0b0VzcGVjQnlDb2RlL1wiICsgc0lES2F0aW9zLCBkYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIHZhciBvUHJvZHVjdG86IGFueSA9IHJlc3A7XHJcbiAgICAgICAgICAgIG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvLkFzaWduYXJMaXN0YVByZWNpbyhvUHJvZHVjdG8sIG9EYXRhVXNlciwgUG9zdFNlcnZpY2VNMykudGhlbih4ID0+IHtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycm9yLmVycm9yLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBHZXRfTTNQcm9kdWN0b0VzcGVjQnlDb2RlVGltZU91dChQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgZGF0YTogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24sIG9EYXRhVXNlcjogYW55LCB0aW1lb3V0VGltZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdmFyIG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvID0gbmV3IFNlcnZpY2VMb2FkTGlzdGFQcmVjaW8oc0lES2F0aW9zKTtcclxuXHJcbiAgICAgICAgaWYgKHRpbWVvdXRUaW1lICE9IDApIHtcclxuICAgICAgICAgICAgaWYgKG9EYXRhVXNlciAmJiBvRGF0YVVzZXIuVXN1YXJpb1Npc3RlbWEgJiYgb0RhdGFVc2VyLlVzdWFyaW9TaXN0ZW1hLkZlY2hhUHJlY2lvKSBkYXRhLmZlY2hhTFByZWNpbyA9IG9EYXRhVXNlci5Vc3VhcmlvU2lzdGVtYS5GZWNoYVByZWNpbztcclxuICAgICAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zVGltZU91dChcIk0zTWFlc3Ryby9HZXRfTTNQcm9kdWN0b0VzcGVjQnlDb2RlL1wiICsgc0lES2F0aW9zLCBkYXRhLCB0aW1lb3V0VGltZSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgICAgIHZhciBvUHJvZHVjdG86IGFueSA9IHJlc3A7XHJcbiAgICAgICAgICAgICAgICBvU2VydmljZUxvYWRMaXN0YVByZWNpby5Bc2lnbmFyTGlzdGFQcmVjaW8ob1Byb2R1Y3RvLCBvRGF0YVVzZXIsIFBvc3RTZXJ2aWNlTTMpLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycm9yLmVycm9yLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoXCI0MDRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb0Z1bmNpb25FcnIoXCI0MDRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldF9Eb2NzRnJvbUNvdWNoTWFlc3RybyhvTTNDb3VjaE1hZXN0cm86IE0zQ291Y2hNYWVzdHJvLCBzSWRLYXRpb3M6IHN0cmluZywgc0RvYzogc3RyaW5nLCBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJnZXRfRG9jc0Zyb21Db3VjaE1hZXN0cm9cIilcclxuICAgICAgICB2YXIgc0lkS2V5RG9jID0gb00zQ291Y2hNYWVzdHJvLkdldEtleURvY3VtZW50b0RCKHNJZEthdGlvcywgc0RvYyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coc0lkS2V5RG9jKVxyXG4gICAgICAgIG9NM0NvdWNoTWFlc3Ryby5HZXREYXRhUG91Y2hCRChzSWRLZXlEb2MpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXN1bHQpO1xyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEdldFByb2R1Y3RvRXNwZWNCeUNvZGVGcm9tQ291Y2goalByb2R1Y3RzQ291Y2g6IGFueSwgc0NvZGU6IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnJvcjogRnVuY3Rpb24pIHtcclxuICAgICAgICB2YXIgalByb2R1Y3RzRmlsID0galByb2R1Y3RzQ291Y2guZmluZCh4ID0+IHguTG9NM1ByZEdlbmVyYWwgIT0gdW5kZWZpbmVkICYmIHguTG9NM1ByZEdlbmVyYWwuZmluZCh3ID0+IHcuTTNDb2RzICE9IHVuZGVmaW5lZCAmJiB3Lk0zQ29kcy5maW5kKHkgPT4gU3RyaW5nKHkuVmFsb3IpID09IFN0cmluZyhzQ29kZSkpICE9IHVuZGVmaW5lZCkgIT0gdW5kZWZpbmVkKTtcclxuICAgICAgICB2YXIgcHJvZHVjdF9jbG9uZSA9IF8uY2xvbmVEZWVwKGpQcm9kdWN0c0ZpbCk7XHJcblxyXG4gICAgICAgIGlmIChqUHJvZHVjdHNGaWwgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhciBqUHJkRXNwID0galByb2R1Y3RzRmlsLkxvTTNQcmRHZW5lcmFsLmZpbmQodyA9PiB3Lk0zQ29kcy5maW5kKHkgPT4gU3RyaW5nKHkuVmFsb3IpID09IFN0cmluZyhzQ29kZSkpICE9IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcHJvZHVjdF9jbG9uZS5Mb00zUHJkR2VuZXJhbCA9IFtdO1xyXG4gICAgICAgICAgICBwcm9kdWN0X2Nsb25lLkxvTTNQcmRHZW5lcmFsLnB1c2goalByZEVzcCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicHJvZHVjdF9jbG9uZVwiKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhwcm9kdWN0X2Nsb25lKVxyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHByb2R1Y3RfY2xvbmUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvRnVuY2lvbkVycm9yKFwiTm8gc2UgZW5jb250csOzIG51bmfDum4gcmVnaXN0cm8uXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8vT2J0aWVuZSBsb3MgVGlwb3MgZGUgcHJvY2Vzb3MgZGVzZGUgZWwgc2Vydmlkb3JcclxuICAgIHB1YmxpYyBnZXRfVGlwb3NQcm9jZXNvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24sIGFjdGl2aWRhZDogc3RyaW5nID0gJ1ZlbnRhcycpIHtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL2dldF9UaXBvc1Byb2Nlc28vJyArIHNJREthdGlvcyArICcvJyArIGFjdGl2aWRhZCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKEpTT04ucGFyc2UocmVzcCkuUkVTUFVFU1RBKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBnZXRfVGlwb3NQcm9jZXNvXHJcblxyXG4gICAgLy8vT2J0aWVuZSBsYSBJbmZvIGRlIHVuIHByb2Nlc28gYSBwYXJ0aXIgZGUgdW4gaWRQcm9jZXNvIHkgdW4gSWRNM1xyXG4gICAgcHVibGljIGdldF9JbmZvUGVyc29uYV9Qcm9jZXNvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBqRGF0YTogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vZ2V0X0luZm9QZXJzb25hX1Byb2Nlc28vJyArIHNJREthdGlvcywgakRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhKU09OLnBhcnNlKFN0cmluZyhyZXNwKSkuUkVTUFVFU1RBKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBnZXRfSW5mb1Byb2Nlc29cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9idGllbmUgbGEgSW5mbyBkZSB1biBwcm9jZXNvIGEgcGFydGlyIGRlIHVuIGlkUHJvY2VzbyB5IHVuIElkTTMgZGUgbWFuZXJhIHNpbmNyw7NuaWNhXHJcbiAgICAgKiBAcGFyYW0gUG9zdFNlcnZpY2VNMyBcclxuICAgICAqIEBwYXJhbSBzSURLYXRpb3MgXHJcbiAgICAgKiBAcGFyYW0gakRhdGEgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBnZXRfSW5mb1BlcnNvbmFfUHJvY2Vzb19hc3luYyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgakRhdGE6IGFueSkge1xyXG4gICAgICAgIHZhciBqc29uO1xyXG4gICAgICAgIHZhciByZXNwO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXNwID0gYXdhaXQgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vZ2V0X0luZm9QZXJzb25hX1Byb2Nlc28vJyArIHNJREthdGlvcywgakRhdGEpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICBqc29uID0gSlNPTi5wYXJzZShyZXNwKVxyXG4gICAgICAgICAgICByZXR1cm4ganNvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vT2J0ZW5lciB1biBwcm9kdWN0byBhZ3J1cGFkbywgdGVuaWVuZG8gdW5hIGxpc3RhIGRlIHByb2R1Y3RvIGFncnVwYWRvcyB5IHVuIHNrdVxyXG4gICAgcHVibGljIEdldE0zUHJkR3JwRnJvbUxpc3QoTGlzdFByZDogQXJyYXk8VHlwZU0zUHJkR3JwPiwgc2t1KTogVHlwZU0zUHJkR3JwIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgb1R5cGVNM1ByZEdycFJlc3VsdDogVHlwZU0zUHJkR3JwO1xyXG4gICAgICAgICAgICBvVHlwZU0zUHJkR3JwUmVzdWx0ID0gTGlzdFByZC5maW5kKHByZCA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYlJlc3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHByZC5Mb00zUHJkR2VuZXJhbC5mb3JFYWNoKHByZCA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmQuU0tVID09PSBza3UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYlJlc3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJSZXNwO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgb1R5cGVNM1ByZEdycFJlc3VsdC5Mb00zUHJkR2VuZXJhbCA9IG9UeXBlTTNQcmRHcnBSZXN1bHQuTG9NM1ByZEdlbmVyYWwuZmlsdGVyKGdlbiA9PiBnZW4uU0tVID09IHNrdSk7XHJcbiAgICAgICAgICAgIHJldHVybiBvVHlwZU0zUHJkR3JwUmVzdWx0O1xyXG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy9PYnRlbmVyIGRlIHVuYSBsaXN0YSBkZSB1YmljYWNpb25lcywgdW5hIHViaWNhY2lvbiBlbiBwYXJ0aWN1bGFyLCB0ZW5pZW5kbyBlbiBjdWVudGEgZWwgSWRVYmljYWNpb25cclxuICAgIHB1YmxpYyBHZXRVYmljYWNpb25Gcm9tTGlzdChMaXN0VWJpYzogQXJyYXk8TTNVYmljYWNpb24+LCBzSWRVYmljKSB7XHJcbiAgICAgICAgdmFyIG9NM1ViaWNhY2lvbjogTTNVYmljYWNpb247XHJcbiAgICAgICAgb00zVWJpY2FjaW9uID0gTGlzdFViaWMuZmluZCh1YmljID0+IHViaWMuSURVYmljYWNpb24gPT0gc0lkVWJpYyk7XHJcbiAgICAgICAgcmV0dXJuIG9NM1ViaWNhY2lvbjtcclxuICAgIH1cclxuXHJcbiAgICAvLy9PYnRpZW5lIGxvcyBkYXRvcyBkZSBmYWN0dXJhY2lvbiB0YWwgY29tbyBlbCBjb2RpZ28gcG9zdGFsIHkgZWwgcmVnaW1lbiBmaXNjYWwgYXNvY2lhZG8gYSB1biBSRkNcclxuICAgIHB1YmxpYyBnZXREYXRvc0ZhY3R1cmFjaW9uRnJvbVJGQyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgb0RhdGE6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL2dldERhdG9zRmFjdHVyYWNpb25Gcm9tUkZDLycgKyBzSURLYXRpb3MsIG9EYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soSlNPTi5wYXJzZShyZXNwLnRvU3RyaW5nKCkpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBnZXREYXRvc0ZhY3R1cmFjaW9uRnJvbVJGQ1xyXG5cclxuICAgIHB1YmxpYyBhY3R1YWxpemFyUkZDKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIElkS2F0aW9zOiBzdHJpbmcsIG9EYXRhLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoJ00zTWFlc3Ryby9hY3R1YWxpemFyUkZDLycgKyBJZEthdGlvcywgb0RhdGEpLnN1YnNjcmliZShwb3N0cyA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socG9zdHMpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKEpTT04ucGFyc2UoZXJyLl9ib2R5KS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vL09idGllbmUgZWwgWG1sIGRlIGNvbmZpZ3VyYWNpb24gZGUgbGEgZW1wcmVzYSBhIHBhcnRpciBkZWwgaWR1YmljYWNpb25cclxuICAgIHB1YmxpYyBnZXRfWG1sQ29uZmlnX3hfSWRVYmljYWNpb24oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIG9EYXRhOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9nZXRfWG1sQ29uZmlnX3hfSWRVYmljYWNpb24vJyArIHNJREthdGlvcywgb0RhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhKU09OLnBhcnNlKHJlc3AudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIGdldF9YbWxDb25maWdfeF9JZFViaWNhY2lvblxyXG5cclxuICAgIC8vL09idGllbmUgZWwgWG1sIGRlIGNvbmZpZ3VyYWNpb24gZGUgbGEgZW1wcmVzYSBhIHBhcnRpciBkZWwgaWR1YmljYWNpb25cclxuICAgIHB1YmxpYyBnZXRDRkRJc1hQcm9jZXNvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBvRGF0YTogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vZ2V0Q0ZESXNYUHJvY2Vzby8nICsgc0lES2F0aW9zLCBvRGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKEpTT04ucGFyc2UocmVzcC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgZ2V0X1htbENvbmZpZ194X0lkVWJpY2FjaW9uXHJcblxyXG4gICAgLy8vT2J0aWVuZSBsb3MgYXRyaWJ1dG9zIGVuIG0zY2xhc2lmaWNhIGEgcGFydGlyIGRlIHVuIGlka2F0aW9zXHJcbiAgICBnZXRfY2xhc2lmaWNhdGlvbl9hdHRyaWJ1dGVzKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL2dldF9jbGFzaWZpY2F0aW9uX2F0dHJpYnV0ZXMvJyArIGlkX2thdGlvcykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICB2YXIgalJlc3AgPSBKU09OLnBhcnNlKHJlc3ApLlJFU1BVRVNUQS5BVFRSSUJVVEVTO1xyXG4gICAgICAgICAgICBpZiAoalJlc3AubGVuZ3RoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGpSZXNwID0gbmV3IEFycmF5KGpSZXNwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhqUmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLy9PYnRpZW5lIGxhcyBjYXRlZ29yaWFzIGVuIG0zY2xhc2lmaWNhIGEgcGFydGlyIGRlIHVuIGlka2F0aW9zIHkgdW4gYXRyaWJ1dG9cclxuICAgIGdldF9jbGFzaWZpY2F0aW9uX2NhdGVnb3JpZXMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIGF0dHJpYnV0ZTogc3RyaW5nLCBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL2dldF9jbGFzaWZpY2F0aW9uX2NhdGVnb3JpZXMvJyArIGlkX2thdGlvcyArIFwiL1wiICsgYXR0cmlidXRlKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIHZhciBqUmVzcCA9IEpTT04ucGFyc2UocmVzcCkuUkVTUFVFU1RBLkNBVEVHT1JJRVM7XHJcbiAgICAgICAgICAgIGlmIChqUmVzcC5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgalJlc3AgPSBuZXcgQXJyYXkoalJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKGpSZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3BjaW9uZXNBZGljaW9uYWxlcyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9nZXRPcGNpb25lc0FkaWNpb25hbGVzLycgKyBpZF9rYXRpb3MpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgdmFyIGpSZXNwID0gSlNPTi5wYXJzZShyZXNwKS5SRVNQVUVTVEEuQVRUUklCVVRFUztcclxuICAgICAgICAgICAgaWYgKGpSZXNwLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBqUmVzcCA9IG5ldyBBcnJheShqUmVzcCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soalJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF0cmlidXRvc0FkaWNpb25hbGVzKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBhdHRyaWJ1dGU6IHN0cmluZywgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9nZXRBdHJpYnV0b3NBZGljaW9uYWxlcy8nICsgaWRfa2F0aW9zICsgXCIvXCIgKyBhdHRyaWJ1dGUpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgdmFyIGpSZXNwID0gSlNPTi5wYXJzZShyZXNwKS5SRVNQVUVTVEEuQ0FURUdPUklFUztcclxuICAgICAgICAgICAgaWYgKGpSZXNwLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBqUmVzcCA9IG5ldyBBcnJheShqUmVzcCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soalJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy9PYnRpZW5lIGxhIGluZm9ybWFjaW9uIGRlIHRpcG9zIGRlIGVudmlvLlxyXG4gICAgTTNHZXRGb3JtYXNFbnZpbyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9NM0dldEZvcm1hc0VudmlvLycgKyBpZF9rYXRpb3MpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgdmFyIGpzUmVzcDtcclxuICAgICAgICAgICAganNSZXNwID0gSlNPTi5wYXJzZShyZXNwKTtcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhqc1Jlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLy9PYnRpbmllIHRvZGFzIGxhcyBNM1ViaWNhY2lvbmVzIGFzb2NpYWRhcyBhIHVuIGlkX2thdGlvc1xyXG4gICAgcHVibGljIGdldF91YmljYWNpb25lc19jb21wbGV0ZShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9nZXRfdWJpY2FjaW9uZXNfY29tcGxldGUvJyArIGlkX2thdGlvcykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLy9PYnRpbmllIHRvZGFzIGxhcyBNM1ViaWNhY2lvbmVzIGFzb2NpYWRhcyBhIHVuIGlkX2thdGlvc1xyXG4gICAgcHVibGljIGdldF91YmljYWNpb25lc19zaW1wbGUoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vZ2V0X3ViaWNhY2lvbmVzX3NpbXBsZS8nICsgaWRfa2F0aW9zKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy9PYnRpbmllIHRvZGFzIGxhcyBNM1ViaWNhY2lvbmVzIGFzb2NpYWRhcyBhIHVuIGlkX2thdGlvc1xyXG4gICAgcHVibGljIGFzeW5jIE0zR0VUX0xJU1RBUFJFQ0lPU19BU3luYyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBvUmVjTGlzdGFQcmVjOiBhbnk7XHJcblxyXG4gICAgICAgIG9SZWNMaXN0YVByZWMgPSBhd2FpdCBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vTTNHRVRfTElTVEFQUkVDSU9TLycgKyBpZF9rYXRpb3MpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHJldHVybiBvUmVjTGlzdGFQcmVjWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBHZXRFbmNhYmV6YWRvTGlzdGFzUHJlY2lvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHJlc3A7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3AgPSBhd2FpdCBQb3N0U2VydmljZU0zLmdldE0zKCdNMy9HZXRDb25maWdMUC8nICsgc0lES2F0aW9zKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3A7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3RyYXJDb2xvbmlhKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIElkS2F0aW9zOiBzdHJpbmcsIHNDb2xvbmlhOiBzdHJpbmcsIHNDb2RQb3N0YWwsIHNUZWxlZm9ubzogc3RyaW5nLCBuZG9jOiBzdHJpbmcsIHNMaW5lYTE6IHN0cmluZywgc0NvZGVzdGFkbzogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgdmFyIG9EYXRhU2VuZDtcclxuICAgICAgICBvRGF0YVNlbmQgPSB7IFwic0NvbG9uaWFcIjogc0NvbG9uaWEsIFwic0NvZFBvc3RhbFwiOiBzQ29kUG9zdGFsLCBcInNUZWxlZm9ub1wiOiBzVGVsZWZvbm8sIFwibmRvY1wiOiBuZG9jLCBcInNMaW5lYTFcIjogc0xpbmVhMSwgXCJzQ29kZXN0YWRvXCI6IHNDb2Rlc3RhZG8gfTtcclxuICAgICAgICBQb3N0U2VydmljZU0zLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMygnTTNNYWVzdHJvL3JlZ2lzdHJhckNvbG9uaWEvJyArIElkS2F0aW9zLCBvRGF0YVNlbmQpLnN1YnNjcmliZShwb3N0cyA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihKU09OLnBhcnNlKGVyci5fYm9keSkuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLy9PYnRlbmVyIHByb21vY2lvbmVzIFxyXG4gICAgcHVibGljIGFzeW5jIE0zX0dldFByb21vY2lvbmVzTWFlc3Ryb0FzeW5jKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIG9SZWNMaXN0YVByZWM6IGFueTtcclxuXHJcbiAgICAgICAgb1JlY0xpc3RhUHJlYyA9IGF3YWl0IFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9NM19HZXRQcm9tb2Npb25lc01hZXN0cm8vJyArIGlkX2thdGlvcykudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgcmV0dXJuIG9SZWNMaXN0YVByZWM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vL09idGVuZXIgRGluYW1pY2FzIHBvciBhY3RpdmlkYWQgXHJcbiAgICBwdWJsaWMgYXN5bmMgTTNHZXREaW5CeUFjdGl2aWRhZChQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgb0RhdGE6IGFueSwgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9NM0dldERpbkJ5QWN0aXZpZGFkLycgKyBpZF9rYXRpb3MsIG9EYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vdmFyIGpzUmVzcDphbnkgPSByZXNwO1xyXG4gICAgICAgICAgICAvL2pzUmVzcCA9IEpTT04ucGFyc2UoanNSZXNwKTtcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICAvLyB2YXIgb1JlY0xpc3RhUHJlYzogYW55O1xyXG5cclxuICAgICAgICAvLyBvUmVjTGlzdGFQcmVjID0gYXdhaXQgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vTTNHZXREaW5CeUFjdGl2aWRhZC8nICsgaWRfa2F0aW9zLCBvRGF0YSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgLy8gcmV0dXJuIG9SZWNMaXN0YVByZWM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRvcm5hIGxhIGluZm8gYmFzaWNhIGRlIGxhcyB1YmljYWNpb25lcyBjb24gSHViIHRpcG8gV0VCIGFjdGl2b3MgZW4gZWwgbW9tZW50b1xyXG4gICAgICogQHBhcmFtIFBvc3RTZXJ2aWNlTTMgXHJcbiAgICAgKiBAcGFyYW0gaWRLYXRpb3MgXHJcbiAgICAgKiBAcGFyYW0gb0Z1bmNpb25PSyBcclxuICAgICAqIEBwYXJhbSBvRnVuY2lvbkVyciBcclxuICAgICAqL1xyXG4gICAgZ2V0VWJpY2FjaW9uZXNXZWIoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRLYXRpb3M6IHN0cmluZywgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9nZXRVYmljYWNpb25lc1dlYi8nICsgaWRLYXRpb3MpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhKU09OLnBhcnNlKHJlc3ApKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAgUmV0b3JuYSBsYSBpbmZvIGJhc2ljYSBkZSBsYXMgdWJpY2FjaW9uZXMgY29uIEh1YiB0aXBvIFdFQiBhY3Rpdm9zIGVuIGVsIG1vbWVudG8gcXVlIGFiYXJxdWVuIHVuIGNvZHBvc3RhbCBlbiBjb25jcmV0b1xyXG4gICAgICogQHBhcmFtIFBvc3RTZXJ2aWNlTTMgXHJcbiAgICAgKiBAcGFyYW0gaWRLYXRpb3MgXHJcbiAgICAgKiBAcGFyYW0gZGF0YSBcclxuICAgICAqIEBwYXJhbSBvRnVuY2lvbk9LIFxyXG4gICAgICogQHBhcmFtIG9GdW5jaW9uRXJyIFxyXG4gICAgICovXHJcbiAgICBnZXRVYmljYWNpb25lc0J5Q29kUG9zdGFsKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkS2F0aW9zOiBzdHJpbmcsIGRhdGE6IGFueSwgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIC8vZGF0YSA9IHsgXCJjb2RQb3N0YWxcIjogc3RyaW5nIH07XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vZ2V0VWJpY2FjaW9uZXNCeUNvZFBvc3RhbC8nICsgaWRLYXRpb3MsIGRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhKU09OLnBhcnNlKHJlc3AudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgZWwgcGF0aCBkZSBsYSBmYWN0dXJhIGVsZWN0csOzbmljYSBhIHBhcnRpciBkZSB1biBJZERpYXJpbyBhc29jaWFkbyBhbCBwcm9jZXNvIFxyXG4gICAgICogQHBhcmFtIFBvc3RTZXJ2aWNlTTMgXHJcbiAgICAgKiBAcGFyYW0gaWRLYXRpb3MgXHJcbiAgICAgKiBAcGFyYW0gZGF0YSBcclxuICAgICAqIEBwYXJhbSBvRnVuY2lvbk9LIFxyXG4gICAgICogQHBhcmFtIG9GdW5jaW9uRXJyIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0UGF0aEZFRnJvbURpYXJpbyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZEthdGlvczogc3RyaW5nLCB0aXBvR2VuZXJhY2lvbjogc3RyaW5nLCBkYXRhOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTMvZ2V0UGF0aEZFRnJvbURpYXJpby8nICsgaWRLYXRpb3MgKyAnLycgKyB0aXBvR2VuZXJhY2lvbiwgZGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICB2YXIgcmVzcHVlc3RhOiBhbnkgPSBKU09OLnBhcnNlKHJlc3AudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcHVlc3RhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERpYXJpb0FkaWNpb25hbGVzeERpYXJpbyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZEthdGlvczogc3RyaW5nLCBkYXRhOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlHZW5lcmFsZXMoJ0RpYXJpby9nZXREaWFyaW9BZGljaW9uYWxlc3hEaWFyaW8vJyArIGlkS2F0aW9zLCBkYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIHZhciByZXNwdWVzdGE6IGFueSA9IEpTT04ucGFyc2UocmVzcC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwdWVzdGEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihKU09OLnBhcnNlKGVyci5fYm9keSkuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhc3luYyBJVV9IdWIoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIG9IdWI6IGFueSwgdVRBY3Rpdm86IHN0cmluZywgdU5BY3Rpdm86IHN0cmluZykge1xyXG4gICAgICAgIHZhciBJbmZvO1xyXG4gICAgICAgIHZhciBkYXRhID0geyAnaWRLYXRpb3MnOiBpZF9rYXRpb3MudHJpbSgpLCAnb0h1Yic6IG9IdWIsICd1VEFjdGl2byc6IHVUQWN0aXZvLCAndU5BY3Rpdm8nOiB1TkFjdGl2byB9O1xyXG4gICAgICAgIEluZm8gPSBhd2FpdCBQb3N0U2VydmljZU0zLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMygnTTNNYWVzdHJvL0lVX0h1YicsIGRhdGEpLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgcmV0dXJuIEluZm9cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2J0ZW5lciBlbCBjdGl2byBkZXNkZSBzZXJ2aWRvclxyXG4gICAgICogQHBhcmFtIFBvc3RTZXJ2aWNlTTMgXHJcbiAgICAgKiBAcGFyYW0gaWRfa2F0aW9zIFxyXG4gICAgICogQHBhcmFtIGlkcHJvY2VzbyBcclxuICAgICAqIEBwYXJhbSB1YmljYWNpb24gXHJcbiAgICAgKiBAcGFyYW0gaHViIFxyXG4gICAgICovXHJcbiAgICBhc3luYyBHZXRDdGl2b0JZUHJvY2VzbyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgaWRwcm9jZXNvOiBzdHJpbmcsIHViaWNhY2lvbjogc3RyaW5nLCBodWI6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBJbmZvO1xyXG4gICAgICAgIHZhciBkYXRhID0geyAnaWRwcm9jZXNvJzogaWRwcm9jZXNvLCAndWJpY2FjaW9uJzogdWJpY2FjaW9uLCAnaHViJzogaHViIH07XHJcbiAgICAgICAgSW5mbyA9IGF3YWl0IFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTMvR2V0Q3Rpdm9CWVByb2Nlc28vJyArIGlkX2thdGlvcy50cmltKCksIGRhdGEpLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgcmV0dXJuIEluZm9cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGFzeW5jIFZhbGlkYXJDdGl2b3NWU0xvY2FsKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLFxyXG4gICAgICAgIGluZlByb2Nlc286IHN0cmluZywgdWJpY2FjaW9uOiBzdHJpbmcsIGh1Yjogc3RyaW5nLCBmdW5jaW9uUmVzcDogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMygnTTMvVmFsaWRhckN0aXZvc1ZTTG9jYWwvJyArIGlkX2thdGlvcyArICcvJyArIHViaWNhY2lvbiArICcvJyArIGh1YiwgaW5mUHJvY2Vzbykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBmdW5jaW9uUmVzcChyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGZ1bmNpb25SZXNwKHsgXCJlcnJvclwiOiBlcnJvciB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgR2VuZXJhckF1dG9yaXphY2lvbkN1ZW50YXMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgZGF0YSkge1xyXG4gICAgICAgIHZhciBJbmZvO1xyXG5cclxuICAgICAgICBJbmZvID0gYXdhaXQgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoJ00zL0dlbmVyYXJBdXRvcml6YWNpb25DdWVudGFzJywgZGF0YSkudG9Qcm9taXNlKClcclxuICAgICAgICByZXR1cm4gSW5mb1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhIHNpIGVsIGNvZGlnbyBpbmdyZXNhZG8gY29ycmVzcG9uZGUgYWwgZG9jdW1lbnRvIHkgc2kgZWwgY29kaWdvIGVzdGEgZW4gZXN0YWRvIGFjdGl2b1xyXG4gICAgICogQHBhcmFtIFBvc3RTZXJ2aWNlTTMgXHJcbiAgICAgKiBAcGFyYW0gZGF0YSBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgdmFsaWRhY2lvbkF1dG9yaXphY2lvbk0zQ3VlbnRhcyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBkYXRhKSB7XHJcbiAgICAgICAgdmFyIEluZm87XHJcblxyXG4gICAgICAgIEluZm8gPSBhd2FpdCBQb3N0U2VydmljZU0zLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMygnTTMvdmFsaWRhY2lvbkF1dG9yaXphY2lvbk0zQ3VlbnRhcycsIGRhdGEpLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgcmV0dXJuIEluZm9cclxuICAgIH1cclxuXHJcblxyXG4gICAgYXN5bmMgVmVyaWZpY2FyUGFnb1RhcmpldGFCQlZBKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBzSWRLZXk6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBqRGF0YSA9IHsgXCJJZGthdGlvc1wiOiBzSURLYXRpb3MsIFwiaWRLZXlcIjogc0lkS2V5IH1cclxuICAgICAgICB2YXIgSW5mbztcclxuICAgICAgICBJbmZvID0gYXdhaXQgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNMy9WZXJpZmljYXJQYWdvVGFyamV0YUJCVkEnLCBqRGF0YSkudG9Qcm9taXNlKClcclxuICAgICAgICByZXR1cm4gSW5mbztcclxuICAgIH0vL0VuZCBnZXRfSW5mb1Byb2Nlc29cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZTIDIwMTkwODEzOiBSZXRvcm5hIGxvcyBjb2RpZ29zIGRlIGxvcyBTS1Aoc2twVG9GaW5kKSB5IHN1IHJlc3BlY3Rpdm8gc2lnbmlmaWNhZG8gcGFyYSB1biBwcm9kdWN0byBkYWRvXHJcbiAgICAgKiBAcGFyYW0gaWRLYXRpb3MgXHJcbiAgICAgKiBAcGFyYW0gUG9zdFNlcnZpY2VNMyBcclxuICAgICAqIEBwYXJhbSBkYXRhIFxyXG4gICAgICogQHBhcmFtIGZ1bmNpb25PSyBcclxuICAgICAqIEBwYXJhbSBmdW5jaW9uRXJyb3IgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXREZXNjcmlwY2lvblNLUHMoaWRLYXRpb3M6IHN0cmluZywgUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMyxcclxuICAgICAgICBkYXRhOiBhbnksIGZ1bmNpb25PSzogRnVuY3Rpb24sIGZ1bmNpb25FcnJvcjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgLy9sZXQgZGF0YSA9IHtcIlNLUDFcIjpcIlNLUDFcIiwgU0tQVG9GaW5kOiAyIH19O1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoXCJNM0NvbnN1bHRhcy9nZXREZXNjcmlwY2lvblNLUHMvXCIgKyBpZEthdGlvcywgZGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICBmdW5jaW9uT0soZGF0YS5TS1AxLCBKU09OLnBhcnNlKHJlc3AudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBmdW5jaW9uRXJyb3IoZXJyLmVycm9yLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgYXN5bmMgZ2V0VG90YWxlc0NpZXJyZUNhamEocG9zdFNlcnZpY2U6IFBvc3RTZXJ2aWNlTTMsIHNJZEthdGlvczogc3RyaW5nLCBzdWJpY2FjaW9uOiBzdHJpbmcsIHNodWI6IHN0cmluZywgc3VzdWFyaW86IHN0cmluZywgc0ZlY2hhSTogc3RyaW5nLCBzRmVjaGFGOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgc2Vjb3BjaW9uZXM6IGFueTtcclxuICAgICAgICB2YXIgZGF0YSA9IHsgJ2lkS2F0aW9zJzogc0lkS2F0aW9zLCAndWJpY2FjaW9uJzogc3ViaWNhY2lvbiwgJ2h1Yic6IHNodWIsICd1c3VhcmlvJzogc3VzdWFyaW8sICdGZWNoYUknOiBzRmVjaGFJLCAnRmVjaGFGJzogc0ZlY2hhRiB9XHJcbiAgICAgICAgc2Vjb3BjaW9uZXMgPSBhd2FpdCBwb3N0U2VydmljZS5nZXRXaXRoQm9keU0zKCdNMy9nZXRUb3RhbGVzQ2llcnJlQ2FqYScsIGRhdGEpLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgc2Vjb3BjaW9uZXMgPSBKU09OLnBhcnNlKHNlY29wY2lvbmVzKVxyXG4gICAgICAgIHJldHVybiBzZWNvcGNpb25lc1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldENpZXJyZXN4VWJpY2FjaW9uKHBvc3RTZXJ2aWNlOiBQb3N0U2VydmljZU0zLCBzSWRLYXRpb3M6IHN0cmluZywgc3ViaWNhY2lvbjogc3RyaW5nLCBzSWRQcm9jZXNvOiBzdHJpbmcsIHNGZWNoYTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHNlY29wY2lvbmVzOiBhbnk7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7ICdpZEthdGlvcyc6IHNJZEthdGlvcywgJ3ViaWNhY2lvbic6IHN1YmljYWNpb24sICdpZFByb2Nlc28nOiBzSWRQcm9jZXNvLCAnRmVjaGEnOiBzRmVjaGEgfVxyXG4gICAgICAgIHNlY29wY2lvbmVzID0gYXdhaXQgcG9zdFNlcnZpY2UuZ2V0V2l0aEJvZHlNMygnTTMvZ2V0Q2llcnJlc3hVYmljYWNpb24nLCBkYXRhKS50b1Byb21pc2UoKVxyXG4gICAgICAgIHNlY29wY2lvbmVzID0gSlNPTi5wYXJzZShzZWNvcGNpb25lcylcclxuICAgICAgICByZXR1cm4gc2Vjb3BjaW9uZXNcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRDaWVycmVzeEVtcHJlc2EocG9zdFNlcnZpY2U6IFBvc3RTZXJ2aWNlTTMsIHNJZEthdGlvczogc3RyaW5nLCBzSWRQcm9jZXNvOiBzdHJpbmcsIHNGZWNoYTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHNlY29wY2lvbmVzOiBhbnk7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7ICdpZEthdGlvcyc6IHNJZEthdGlvcywgJ2lkUHJvY2Vzbyc6IHNJZFByb2Nlc28sICdGZWNoYSc6IHNGZWNoYSB9XHJcbiAgICAgICAgc2Vjb3BjaW9uZXMgPSBhd2FpdCBwb3N0U2VydmljZS5nZXRXaXRoQm9keU0zKCdNMy9nZXRDaWVycmVzeEVtcHJlc2EnLCBkYXRhKS50b1Byb21pc2UoKVxyXG4gICAgICAgIHNlY29wY2lvbmVzID0gSlNPTi5wYXJzZShzZWNvcGNpb25lcylcclxuICAgICAgICByZXR1cm4gc2Vjb3BjaW9uZXNcclxuICAgIH1cclxuXHJcbiAgICAvL1RyYWUgZWwgbTNwcm9jZXNvcyBzZWdwdW4gZWwgaWRwcmVzdGFtb1xyXG4gICAgcHVibGljIHNpbXVsYXJwYWdvRW5saW5lYShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgc0lkTTM6IHN0cmluZywgc0lkUHJvY2Vzbzogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNMy9WYWxpZGFjaW9uUGFnb0ludGVncmFjaW9uVGVzdC8nICsgc0lES2F0aW9zICsgJy8nICsgc0lkTTMgKyAnLycgKyBzSWRQcm9jZXNvKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRhclByZHNNaXNtb1Byb3ZlZWRvcihQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgbm9tYnJlQWRpY2lvbmFsUHJvdmVlZG9yOiBzdHJpbmcsIG9NM1Byb2Nlc29zOiBNM1Byb2Nlc29zLCBvRnVuY2lvblJlc3A6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoXCJNM01hZXN0cm8vdmFsaWRhclByZHNNaXNtb1Byb3ZlZWRvci9cIiArIGlkX2thdGlvcyArIFwiL1wiICsgbm9tYnJlQWRpY2lvbmFsUHJvdmVlZG9yLCBvTTNQcm9jZXNvcykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICBvRnVuY2lvblJlc3AoSlNPTi5wYXJzZShKU09OLnBhcnNlKHJlc3BbJ19ib2R5J10pLnRvU3RyaW5nKCkpKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3IgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHZhbGlkYXJQcmRzTWlzbW9Qcm92ZWVkb3JcIilcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25SZXNwKEpTT04ucGFyc2UoSlNPTi5wYXJzZShlcnJbJ19ib2R5J10pLk1lc3NhZ2UpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZhbGlkYXJSZXN0cmljY2lvbkludk5lZ2F0aXZvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBvTTNQcm9jZXNvczogTTNQcm9jZXNvcywgb0Z1bmNpb25SZXNwOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKFwiTTNNYWVzdHJvL3ZhbGlkYXJSZXN0cmljY2lvbkludk5lZ2F0aXZvL1wiICsgaWRfa2F0aW9zLCBvTTNQcm9jZXNvcykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICBvRnVuY2lvblJlc3AoSlNPTi5wYXJzZShKU09OLnBhcnNlKHJlc3BbJ19ib2R5J10pLnRvU3RyaW5nKCkpKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3IgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHZhbGlkYXJSZXN0cmljY2lvbkludk5lZ2F0aXZvXCIpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uUmVzcChKU09OLnBhcnNlKEpTT04ucGFyc2UoZXJyWydfYm9keSddKS5NZXNzYWdlKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGFyUmVzdHJpY2Npb25JbnZOZWdhdGl2b1YyKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBwcmRzOiBhbnksIG9GdW5jaW9uUmVzcDogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMyhcIk0zTWFlc3Ryby92YWxpZGFyUmVzdHJpY2Npb25JbnZOZWdhdGl2b1YyL1wiICsgaWRfa2F0aW9zLCBwcmRzKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvblJlc3AoSlNPTi5wYXJzZShKU09OLnBhcnNlKHJlc3BbJ19ib2R5J10pLnRvU3RyaW5nKCkpKVxyXG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzcClcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uUmVzcChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3IgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHZhbGlkYXJSZXN0cmljY2lvbkludk5lZ2F0aXZvVjJcIilcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25SZXNwKEpTT04ucGFyc2UoSlNPTi5wYXJzZShlcnJbJ19ib2R5J10pLk1lc3NhZ2UpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldEluZm9QcmRHYXN0b3NFbnZpbyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgb00zUHJvY2Vzb3M6IE0zUHJvY2Vzb3MpIHtcclxuXHJcbiAgICAgICAgbGV0IHJlc3AgPSBhd2FpdCBQb3N0U2VydmljZU0zLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMyhcIk0zTWFlc3Ryby9nZXRJbmZvUHJkR2FzdG9zRW52aW8vXCIgKyBpZF9rYXRpb3MsIG9NM1Byb2Nlc29zKS50b1Byb21pc2UoKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnBhcnNlKHJlc3BbJ19ib2R5J10pLnRvU3RyaW5nKCkpLlJFU1BVRVNUQVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhIHVuYSBzYWxkb3hjdWVudGEgYWxlYXRvcmlvIHBvciBlbCB2YWxvciBkYWRvXHJcbiAgICAgKiBAcGFyYW0gUG9zdFNlcnZpY2VNMyBcclxuICAgICAqIEBwYXJhbSBpZGthdGlvcyBcclxuICAgICAqIEBwYXJhbSBkYXRhID0ge1wicHJvY2Vzb1wiLHByb2Nlc28sXCJ2YWxvclwiOnZhbG9yLFwibm9tYnJlRG9jXCI6IG5vbWJyZURvY31cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG0zX2dlbmVyYXJfTTNTWENfYWxlYXRvcmlvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlka2F0aW9zOiBzdHJpbmcsIGRhdGE6IGFueSkge1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmVzcCA9IGF3YWl0IFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKFwiTTMvbTNfZ2VuZXJhcl9NM1NYQ19hbGVhdG9yaW8vXCIgKyBpZGthdGlvcywgZGF0YSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04ucGFyc2UocmVzcFsnX2JvZHknXSkudG9TdHJpbmcoKSkuUkVTUFVFU1RBO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBY3R1YWxpemEgdW4gY29uY2VwdG8gZGVsIE0zX3NhbGRvc0l0ZW1VYlxyXG4gICAgICogQHBhcmFtIFBvc3RTZXJ2aWNlTTMgXHJcbiAgICAgKiBAcGFyYW0gaWRrYXRpb3MgXHJcbiAgICAgKiBAcGFyYW0gZGF0YSBcclxuICAgICAqIEBwYXJhbSBmdW5jaW9uT0sgXHJcbiAgICAgKiBAcGFyYW0gZnVuY2lvbkVycm9yIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgTTNfYWN0dWFsaXphckNvbmNlcHRvU0lVKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlka2F0aW9zOiBzdHJpbmcsIGRhdGE6IGFueSxcclxuICAgICAgICBmdW5jaW9uT0s6IEZ1bmN0aW9uLCBmdW5jaW9uRXJyb3I6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoXCJNMy9NM19hY3R1YWxpemFyQ29uY2VwdG9TSVUvXCIgKyBpZGthdGlvcywgZGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICBmdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGZ1bmNpb25FcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJvY2Vzb0FsQ2llcnJlVWJpYyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgakRhdGE6IGFueSwgZnVuY2lvbk9LOiBGdW5jdGlvbiwgZnVuY2lvbkVycm9yOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKFwiTTMvcHJvY2Vzb0FsQ2llcnJlVWJpYy9cIiArIGlkX2thdGlvcywgakRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgZnVuY2lvbk9LKHJlc3ApXHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvciAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcHJvY2Vzb0FsQ2llcnJlVWJpY1wiKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICBmdW5jaW9uRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldF9Qcm9jZXNvc0FiaWVydG9zKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBqRGF0YTogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vZ2V0X1Byb2Nlc29zQWJpZXJ0b3MvJyArIHNJREthdGlvcywgakRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhKU09OLnBhcnNlKFN0cmluZyhyZXNwKSkuUkVTUFVFU1RBKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBnZXRfUHJvY2Vzb3NBYmllcnRvc1wiKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBnZXRfSW5mb1Byb2Nlc29cclxuXHJcbn1cclxuIl19
|
|
2422
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTTNNYWVzdHJvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9zZi1yZWdsYW5lZ29jaW9tMy8iLCJzb3VyY2VzIjpbImxpYi9ybm0zL1NlcnZpY2VzL00zTWFlc3Ryby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUs3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztJQU9yQztLQUFpQjs7Ozs7Ozs7O0lBR1Ysa0RBQXVCOzs7Ozs7OztjQUFDLGFBQTRCLEVBQUUsU0FBaUIsRUFBRSxTQUFpQixFQUM3RixVQUFvQixFQUFFLFdBQXFCOztRQUMzQyxJQUFJLElBQUksQ0FBQztRQUNULElBQUksR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQTtRQUNqQyxhQUFhLENBQUMsYUFBYSxDQUFDLDZCQUE2QixHQUFHLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBQSxJQUFJO1lBRXZGLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDM0MsRUFDRyxVQUFBLEdBQUc7O1lBRUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbEMsQ0FBQyxDQUFDOzs7Ozs7Ozs7O0lBSUosbURBQXdCOzs7Ozs7OztjQUFDLGFBQTRCLEVBQUUsU0FBaUIsRUFBRSxXQUFtQixFQUNoRyxVQUFvQixFQUFFLFdBQXFCO1FBQzNDLGFBQWEsQ0FBQyxLQUFLLENBQUMsOEJBQThCLEdBQUcsU0FB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b25leGlvblNRTC9wb3N0cy5zZXJ2aWNlXCI7XHJcbi8vaW1wb3J0IHsgc2Vzc2lvbldFOCB9IGZyb20gXCIuLi8uLi8uLi9TZXNzaW9uL3Nlc3Npb24uY2xhc3NcIjtcclxuaW1wb3J0IHsgRmlsdHJvcyB9IGZyb20gXCIuLi9NYWVzdHJvL2ZpbHRyb3NcIjtcclxuaW1wb3J0IHsgTTNDb3VjaE1hZXN0cm8gfSBmcm9tIFwiLi4vRGF0YS9tMy1jb3VjaC1tYWVzdHJvXCI7XHJcbmltcG9ydCB7IFR5cGVNM1ByZEdycCB9IGZyb20gXCIuLi9NYWVzdHJvL00zUHJkR3JwLnR5cGVcIjtcclxuaW1wb3J0IHsgTTNVYmljYWNpb24gfSBmcm9tIFwiLi4vTWFlc3Ryby9VYmljYWNpb24vTTNVYmljYWNpb24udHlwZVwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlTGlzdGFQcmVjaW8gfSBmcm9tIFwiLi9tMy1saXN0YS1wcmVjaW8uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlTG9hZExpc3RhUHJlY2lvIH0gZnJvbSBcIi4vbTMtbG9hZC1sLXByZWNpby5zZXJ2aWNlXCI7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgeyBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IMm1YW5ndWxhcl9wYWNrYWdlc19wbGF0Zm9ybV9icm93c2VyX3BsYXRmb3JtX2Jyb3dzZXJfYSB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7IE0zUHJvY2Vzb3MgfSBmcm9tIFwiLi4vUmVnaXN0cm8vbTMtcHJvY2Vzb3NcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlTTNNYWVzdHJvIHtcclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgICAvL1RyYWUgZWwgbTNwcm9jZXNvcyBzZWdwdW4gZWwgaWRwcmVzdGFtb1xyXG4gICAgcHVibGljIGdldE0zUHJvY2Vzb3NQb3JDcmVkaXRvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBpZFByb2Nlc286IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdmFyIGRhdGE7XHJcbiAgICAgICAgZGF0YSA9IHsgJ2lkUHJvY2Vzbyc6IGlkUHJvY2VzbyB9XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNMy9nZXRNM1Byb2Nlc29zUG9yQ3JlZGl0by8nICsgc0lES2F0aW9zLCBkYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcblxyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKEpTT04ucGFyc2UocmVzcC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyLmVycm9yLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBcclxuXHJcbiAgICAvL1RyYWUgZWwgbTNwcm9jZXNvcyBzZWdwdW4gZWwgaWRwcmVzdGFtb1xyXG4gICAgcHVibGljIGdldE0zUHJvY2Vzb0J5SWRQcmVzdGFtbyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgc0lkUHJlc3RhbW86IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTMvZ2V0TTNQcm9jZXNvQnlJZFByZXN0YW1vLycgKyBzSURLYXRpb3MgKyAnLycgKyBzSWRQcmVzdGFtbykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICB2YXIgb00zUHJvY2Vzb3M6IGFueTtcclxuICAgICAgICAgICAgb00zUHJvY2Vzb3MgPSByZXNwO1xyXG5cclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhvTTNQcm9jZXNvcyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgXHJcblxyXG4gICAgLy9yYWUgZWwgVElQTywgU0tQMSwgTk9NQlJFIGRlIGxhIHRhYmxhIHByZGdycFxyXG4gICAgcHVibGljIG0zR2V0UFJER1JQKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vZ2V0TTNQUkRHUlAvJyArIHNJREthdGlvcykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG5cclxuICAgICAgICAgICAgdmFyIG9EYXRhID0gSlNPTi5wYXJzZShyZXNwKTtcclxuXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0sob0RhdGEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIFxyXG5cclxuXHJcbiAgICAvL09idGVuZXIgbGEgY2FudGlkYWQgZGlzcG9uaWJsZSBkZSBwcm9kdWN0bywgdGVuaWVuZG8gZW4gY3VlbnRhIGVsIFNLUDEgeSBsYSB1YmljYWNpw7NuLlxyXG4gICAgLy9MYSBkYXRhIGRlYmUgdGVuZXIgdW5hIGVzdHJ1Y3R1cmE6IHtcIlVCSUNBQ0lPTlwiOlwiMTExMVwiLCBcIlNLUDFcIjpcIjk5OTlhXCJ9XHJcbiAgICBwdWJsaWMgTTNHZXRDYW50aWRhZEJ5U0tQMShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgb0RhdGFTZW5kOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL00zR2V0Q2FudGlkYWRCeVNLUDEvJyArIHNJREthdGlvcywgb0RhdGFTZW5kKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcblxyXG4gICAgICAgICAgICB2YXIgb0RhdGEgPSBKU09OLnBhcnNlKHJlc3AudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIHZhciBnb0RhdGFEaXNwOiBBcnJheTxhbnk+O1xyXG4gICAgICAgICAgICBpZiAob0RhdGEuUkVTUFVFU1RBLkRJU1BPTklCSUxJREFELmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAvL05vIGVzIGFycmF5XHJcbiAgICAgICAgICAgICAgICBnb0RhdGFEaXNwID0gbmV3IEFycmF5PGFueT4ob0RhdGEuUkVTUFVFU1RBLkRJU1BPTklCSUxJREFEKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGdvRGF0YURpc3AgPSBvRGF0YS5SRVNQVUVTVEEuRElTUE9OSUJJTElEQUQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coZ29EYXRhRGlzcCk7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soZ29EYXRhRGlzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyLmVycm9yLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBcclxuXHJcblxyXG5cclxuICAgIC8vT2J0ZW5lciBsYSBsaXN0YSBkZSBwcm9kdWN0bywgdGVuaWVuZG8gZW4gY3VlbnRhLCB1biBhcnJheSBkZSBmaWx0cm9zLlxyXG4gICAgR2V0TGlzdGFQcmRYRmlsdHJvcyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBvbEZpbHRyb3M6IEFycmF5PEZpbHRyb3M+LCBzSURMaXN0YTogc3RyaW5nLCBzSURLYXRpb3M6IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uLCBAT3B0aW9uYWwoKSBpZFViaWNhY2lvbiA9IFwiLTFcIiwgQE9wdGlvbmFsKCkgYXBsVWx0aW1vRmlsdHJvID0gdHJ1ZSwgQE9wdGlvbmFsKCkgdG9wTGltaXQgPSBcIjBcIiwgQE9wdGlvbmFsKCkgZmlsdHJhckludlViaWMgPSBcIjBcIikge1xyXG4gICAgICAgIHZhciBvRGF0YVNlbmQ7XHJcbiAgICAgICAgb0RhdGFTZW5kID0geyBcIkZpbHRyb3NcIjogSlNPTi5zdHJpbmdpZnkob2xGaWx0cm9zKSwgXCJJZExpc3RhXCI6IHNJRExpc3RhLCBcIklkVWJpY2FjaW9uXCI6IGlkVWJpY2FjaW9uLCBcImFwbFVsdGltb0ZpbHRyb1wiOiBhcGxVbHRpbW9GaWx0cm8sIFwidG9wTGltaXRcIjogdG9wTGltaXQsIFwiZmlsdHJhckludlViaWNcIjogZmlsdHJhckludlViaWMgfTtcclxuICAgICAgICBpZiAob2xGaWx0cm9zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vR2V0X0xpc3RQUkRGaWx0cm9zLycgKyBzSURLYXRpb3MsIG9EYXRhU2VuZCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCwgb2xGaWx0cm9zKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyLmVycm9yLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb0Z1bmNpb25FcnIoXCJObyBoYXkgZmlsdHJvcyBwYXJhIGxhIGJ1c3F1ZWRhXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9PYnRlbmVyIGxpc3RhIGRlIHByb2R1Y3Rvcywgc2VndW4gbGEgY2F0ZWdvcmlhLlxyXG4gICAgR2V0TGlzdGFQcmRYQ2F0ZWdvcmlhKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNDYXRlZ29yaWE6IHN0cmluZywgb0RhdGFDbGFzaWZpY2FjaW9uLCBJZExpc3RhOiBzdHJpbmcsIHNJREthdGlvczogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24sIEBPcHRpb25hbCgpIGlkVWJpY2FjaW9uID0gXCItMVwiLCBAT3B0aW9uYWwoKSBmaWx0cmFySW52VWJpYzogc3RyaW5nID0gXCIwXCIpIHtcclxuICAgICAgICB2YXIgb2xGaWx0cm9zOiBBcnJheTxGaWx0cm9zPjtcclxuICAgICAgICB2YXIgb0RhdGFTZW5kO1xyXG4gICAgICAgIG9sRmlsdHJvcyA9IHRoaXMuRmluZEZpbHRlckluQ2xhc2lmaWNhY2lvbihzQ2F0ZWdvcmlhLCBzSURLYXRpb3MsIG9EYXRhQ2xhc2lmaWNhY2lvbik7XHJcblxyXG4gICAgICAgIG9EYXRhU2VuZCA9IHsgXCJGaWx0cm9zXCI6IEpTT04uc3RyaW5naWZ5KG9sRmlsdHJvcyksIFwiSWRMaXN0YVwiOiBJZExpc3RhLCBcIklkVWJpY2FjaW9uXCI6IGlkVWJpY2FjaW9uLCBcImZpbHRyYXJJbnZVYmljXCI6IGZpbHRyYXJJbnZVYmljIH07XHJcbiAgICAgICAgaWYgKG9sRmlsdHJvcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL0dldF9MaXN0UFJERmlsdHJvcy8nICsgc0lES2F0aW9zLCBvRGF0YVNlbmQpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3AsIG9sRmlsdHJvcyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVyci5lcnJvci5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIuZXJyb3IuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvRnVuY2lvbkVycihcIk5vIGhheSBmaWx0cm9zIHBhcmEgbGEgYnVzcXVlZGFcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0vL0VuZCBHZXRMaXN0YVByZFhDYXRlZ29yaWFcclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgLy9PYnRlbmVyIGxpc3RhIGRlIHByb2R1Y3Rvcywgc2VndW4gbGEgY2F0ZWdvcmlhLlxyXG4gICAgR2V0TGlzdGFQcmRYQ2F0ZWdvcmlhV2l0aE91dEZpbHRlcnMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0NhdGVnb3JpYTogc3RyaW5nLCBzSURLYXRpb3M6IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9NM0dldExpc3RhUHJvZEJ5Q2xhc2lmaWNhY2lvbi8nICsgc0lES2F0aW9zICsgJy8nICsgc0NhdGVnb3JpYSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3AsIG51bGwpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIEdldExpc3RhUHJkWENhdGVnb3JpYVxyXG5cclxuXHJcblxyXG4gICAgLy9PYnRlbmVyIGxpc3RhIGRlIHByb2R1Y3Rvcywgc2VndW4gZWwgbm9tYnJlIG8gZGVzY3JpcGNpw7NuLlxyXG4gICAgR2V0TGlzdGFQcmRYTm9tYnJlKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNOb21icmU6IHN0cmluZywgaWRVYmljYWNpb246IHN0cmluZywgc0lES2F0aW9zOiBzdHJpbmcsIHNJRExpc3RhOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbiwgQE9wdGlvbmFsKCkgZmlsdHJhckludlViaWM6IHN0cmluZyA9IFwiMFwiKSB7XHJcblxyXG4gICAgICAgIHZhciBvRGF0YSA9IHsgXCJJZExpc3RhXCI6IHNJRExpc3RhLCBcImlkVWJpY2FjaW9uXCI6IGlkVWJpY2FjaW9uLCBcImZpbHRyYXJJbnZVYmljXCI6IGZpbHRyYXJJbnZVYmljIH07XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vTTNHZXRMaXN0YVByb2RCeU5vbWJyZS8nICsgc0lES2F0aW9zICsgJy8nICsgc05vbWJyZSwgb0RhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoSlNPTi5wYXJzZShlcnIuX2JvZHkpLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjYXJnYXJMaXN0UHJkQnlHZW5lcmljKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNOb21icmU6IHN0cmluZywgaWRVYmljYWNpb246IHN0cmluZywgc0lES2F0aW9zOiBzdHJpbmcsIHNJRExpc3RhOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbiwgQE9wdGlvbmFsKCkgZmlsdHJhckludlViaWM6IHN0cmluZyA9IFwiMFwiKSB7XHJcblxyXG4gICAgICAgIHZhciBvRGF0YSA9IHsgXCJJZExpc3RhXCI6IHNJRExpc3RhLCBcImlkVWJpY2FjaW9uXCI6IGlkVWJpY2FjaW9uLCBcImZpbHRyYXJJbnZVYmljXCI6IGZpbHRyYXJJbnZVYmljIH07XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vY2FyZ2FyTGlzdFByZEJ5R2VuZXJpYy8nICsgc0lES2F0aW9zICsgJy8nICsgc05vbWJyZSwgb0RhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyLmVycm9yKTtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyLmVycm9yKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9jYXJnYXIgaW5mb3JtYWNpb24gZGUgY2xhc2lmaWNhY2lvblxyXG4gICAgY2FyZ2FySW5mb0NsYXNpZmljYWNpb24oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIGpzb25SZXNwLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgLy92YXIgb3Nlc3Npb25XRTggPSBuZXcgc2Vzc2lvbldFOCgpO1xyXG5cclxuICAgICAgICAvL2pzb25SZXNwID0gb3Nlc3Npb25XRTguR2V0RGF0YUNMQVNJRklDQUNJT04oc0lES2F0aW9zKTtcclxuICAgICAgICBpZiAoanNvblJlc3AgPT09IHVuZGVmaW5lZCB8fCBqc29uUmVzcCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoXCJNM01hZXN0cm8vTTNHZXRDbGFzaWZpY2FjaW9uL1wiICsgc0lES2F0aW9zKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgICAgICBqc29uUmVzcCA9IEpTT04ucGFyc2UocmVzcCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlZhbGlkYXJBcnJheUNsYXNpZmljYWNpb24oanNvblJlc3ApO1xyXG4gICAgICAgICAgICAgICAgLy9vc2Vzc2lvbldFOC5TZXREYXRhQ0xBU0lGSUNBQ0lPTihqc29uUmVzcCwgc0lES2F0aW9zKTtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbk9LKGpzb25SZXNwKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKGpzb25SZXNwKTtcclxuICAgICAgICB9XHJcbiAgICB9Ly9FbmQgY2FyZ2FySW5mb0NsYXNpZmljYWNpb25cclxuXHJcbiAgICAvL1ZhbGlkYXIgcXVlIGxhIGNsYXNpZmljYWNpb24sIGVzdGVuIGNvbW8gYXJyYXkuXHJcbiAgICBWYWxpZGFyQXJyYXlDbGFzaWZpY2FjaW9uKG9EYXRhQ2xhcykge1xyXG4gICAgICAgIHRoaXMuUmVjdXJzaXZlQ29udmVydEFycmF5KG9EYXRhQ2xhcy5SRVNQVUVTVEEuQ0xBU0lGSUNBQ0lPTkVTKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9BcGxpY2FyIGZpbHRyb3MgYSBsYSBjYXRlZ29yaWEgZW50cmFudGUuXHJcbiAgICBGaW5kRmlsdGVySW5DbGFzaWZpY2FjaW9uKHNDbGFzRmluZDogc3RyaW5nLCBzSURLYXRpb3M6IHN0cmluZywgb0RhdGFDbGFzaWZpY2FjaW9uKSB7XHJcbiAgICAgICAgdmFyIHNDbGFzaWZpY2FjaW9uOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIHZhciBvRGF0YUZpbHRyYWRhO1xyXG4gICAgICAgIC8vdmFyIG9zZXNzaW9uV0U4ID0gbmV3IHNlc3Npb25XRTgoKTtcclxuICAgICAgICB2YXIgb2xGaWx0cm9zID0gbmV3IEFycmF5PEZpbHRyb3M+KCk7XHJcbiAgICAgICAgdmFyIG9GaWx0cm9zOiBGaWx0cm9zO1xyXG4gICAgICAgIHZhciBmaWx0cm9BdHJpYnV0bzogc3RyaW5nO1xyXG5cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHNDbGFzRmluZCk7XHJcbiAgICAgICAgLy9vRGF0YUNsYXNpZmljYWNpb24gPSBvc2Vzc2lvbldFOC5HZXREYXRhQ0xBU0lGSUNBQ0lPTihzSURLYXRpb3MpO1xyXG5cclxuICAgICAgICBvRGF0YUZpbHRyYWRhID0gb0RhdGFDbGFzaWZpY2FjaW9uLlJFU1BVRVNUQS5DTEFTSUZJQ0FDSU9ORVM7XHJcblxyXG4gICAgICAgIGlmIChzQ2xhc0ZpbmQubGVuZ3RoICUgMyA9PSAwKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChzQ2xhc0ZpbmQgIT0gXCJcIikge1xyXG5cclxuICAgICAgICAgICAgICAgIHNDbGFzaWZpY2FjaW9uID0gc0NsYXNpZmljYWNpb24gKyBzQ2xhc0ZpbmQuc3Vic3RyaW5nKDAsIDMpO1xyXG4gICAgICAgICAgICAgICAgc0NsYXNGaW5kID0gc0NsYXNGaW5kLnN1YnN0cmluZygzKTtcclxuICAgICAgICAgICAgICAgIG9EYXRhRmlsdHJhZGEgPSBvRGF0YUZpbHRyYWRhLkNBVEVHT1JJQS5maW5kKGZpbHRybyA9PiBmaWx0cm8uQ0xBU0lGSUNBQ0lPTi50b1N0cmluZygpID09IHNDbGFzaWZpY2FjaW9uLnRvU3RyaW5nKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZpbHRyb0F0cmlidXRvID0gb0RhdGFGaWx0cmFkYS5BVFJJQlVUTztcclxuICAgICAgICAgICAgICAgIGlmICghZmlsdHJvQXRyaWJ1dG8udG9VcHBlckNhc2UoKS5pbmNsdWRlcyhcIlJPT1RcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBvRmlsdHJvcyA9IG5ldyBGaWx0cm9zKG9EYXRhRmlsdHJhZGEuQVRSSUJVVE8sIG9EYXRhRmlsdHJhZGEuRGVzY3JpcGNpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIG9sRmlsdHJvcy5wdXNoKG9GaWx0cm9zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLy9vRGF0YVJlc3BDbGEgPSB0aGlzLlJlY3Vyc2l2ZUNsYXNpZmljYWNpb24ob0RhdGFDbGFzaWZpY2FjaW9uLlJFU1BVRVNUQS5DTEFTSUZJQ0FDSU9ORVMuQ0FURUdPUklBLCBzQ2xhc0ZpbmQpO1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhvRGF0YVJlc3BDbGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvbEZpbHRyb3M7XHJcbiAgICB9XHJcblxyXG4gICAgLy9SZWN1cnNpdmlkYWQsIHBhcmEgdmFsaWRhciBxdWUgdG9kb3MgbG9zIG5vZG9zLCBzZWFuIHRpcG8gYXJyYXlcclxuICAgIFJlY3Vyc2l2ZUNvbnZlcnRBcnJheShvRGF0YUNsYXMpIHtcclxuICAgICAgICBpZiAob0RhdGFDbGFzLkNBVEVHT1JJQSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChvRGF0YUNsYXMuQ0FURUdPUklBLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBvRGF0YUNsYXMuQ0FURUdPUklBID0gbmV3IEFycmF5KG9EYXRhQ2xhcy5DQVRFR09SSUEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5SZWN1cnNpdmVDb252ZXJ0QXJyYXkob0RhdGFDbGFzLkNBVEVHT1JJQVswXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvRGF0YUNsYXMuQ0FURUdPUklBLmZvckVhY2goY2xhcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5SZWN1cnNpdmVDb252ZXJ0QXJyYXkoY2xhcyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL0FkaWNpb25hIHVuIHByb2R1Y3RvXHJcbiAgICBtM0FkZFByb2R1Y3RvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCB0ZG9jVUFjdGl2bzogc3RyaW5nLCBuZG9jVUFjdGl2bzogc3RyaW5nLCBvTTNQcmRHcnA6IFR5cGVNM1ByZEdycCwgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbiwgZGlzYWJsZWRXZWI6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIHZhciBkYXRhO1xyXG4gICAgICAgIGRhdGEgPSB7ICdzVGRvY1VzdWFyaW8nOiB0ZG9jVUFjdGl2bywgJ3NOZG9jVXN1YXJpbyc6IG5kb2NVQWN0aXZvLCAnb00zUHJkR3JwJzogb00zUHJkR3JwLCAnZGlzYWJsZWRXZWInOiBkaXNhYmxlZFdlYiB9O1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMyhcIk0zTWFlc3Ryby9hZGRQcm9kdWN0by9cIiArIHNJREthdGlvcy50cmltKCksIGRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vT2J0ZW5lciBwcm9kdWN0byBwb3IgU0tQMS5cclxuICAgIE0zR2V0UHJvZHVjdG9CeVNLUDEoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIGRhdGE6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uLCBvRGF0YVVzZXI6IGFueSkge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMyhcIk0zTWFlc3Ryby9NM0dldFByb2R1Y3RvQnlTS1AxL1wiICsgc0lES2F0aW9zLCBkYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIHZhciBwcm9kdWN0bzogYW55ID0gcmVzcDtcclxuICAgICAgICAgICAgdmFyIG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvID0gbmV3IFNlcnZpY2VMb2FkTGlzdGFQcmVjaW8oc0lES2F0aW9zKTtcclxuICAgICAgICAgICAgb1NlcnZpY2VMb2FkTGlzdGFQcmVjaW8uQXNpZ25hckxpc3RhUHJlY2lvKHByb2R1Y3RvLCBvRGF0YVVzZXIsIFBvc3RTZXJ2aWNlTTMpLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbk9LKHByb2R1Y3RvKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvL09idGVuZXIgcHJvZHVjdG8gcmFuZG9tIHBvciBTS1AxLlxyXG4gICAgTTNHZXRQcm9kdWN0b1JhbmRvbUJ5U0tQMShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgZGF0YTogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24sIG9EYXRhVXNlcjogYW55KSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKFwiTTNNYWVzdHJvL00zR2V0UHJvZHVjdG9SYW5kb21CeVNLUDEvXCIgKyBzSURLYXRpb3MsIGRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy9PYnRlbmVyIHByb2R1Y3RvIHBvciBTS1AxLlxyXG4gICAgTTNHZXRDYXRBc29jaWFkYXNCeVNLUDEoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIHNrcDE6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMyhcIk0zTWFlc3Ryby9NM0dldENhdEFzb2NpYWRhc0J5U0tQMS9cIiArIHNJREthdGlvcyArICcvJyArIHNrcDEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLy9HZXQgSW1hZ2VuZXMgZW52aWFuZG8gZW4gbGEgb0RhdGE6IHtcIlBhdGhcIjpcInh4eFwiLCBcIlNLVVwiOlwiU0tVeHh4XCJ9XHJcbiAgICBwdWJsaWMgTTNHZXRJbWFnZW5lc0J5UGF0aChQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgb0RhdGE6IGFueSwgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL0dldF9NM011bHRpbWVkaWFCeVBhdGgvJyArIHNJREthdGlvcywgb0RhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyLmVycm9yLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL29idGVuZXIgaW5mb3JtYWNpb24gZGUgcGxhbnRpbGxhcywgZGVzZGUgc2Vydmlkb3IuLi4gXHJcbiAgICBHZXRfTTNTS1BsYW50aWxsYUJ5U0tVSUQoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIFNLVUlEOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoXCJNM01hZXN0cm8vR2V0X00zU0tQbGFudGlsbGFCeVNLVUlEL1wiICsgc0lES2F0aW9zICsgXCIvXCIgKyBTS1VJRCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG5cclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vT2J0ZW5lciBpbmZvcm1hY2nDs24gZGUgcHJvZHVjdG9zLCBkZXNkZSBjb2RpZ28gZGUgYmFycmFzXHJcbiAgICBHZXRJbmZvQnlGaWx0ZXJDb2RlKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBzRmlsdGVyQ29kZTogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICB2YXIgb0RhdGEgPSB7IFwiRklMVEVSQ09ERVwiOiBzRmlsdGVyQ29kZSB9O1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9NM0dldFNLUDFQcmRzQnlGaWx0ZXJzQ29kZS8nICsgc0lES2F0aW9zLCBvRGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKEpTT04ucGFyc2UocmVzcC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVyci5lcnJvci5NZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgR2V0SW5mb0J5RmlsdGVyQ29kZSBcclxuXHJcbiAgICAvL09idGllbmUgZWwgb2JqZXRvIE0zVWJpY2FjaW9uZXMgcGFyYSBsYSB1YmljYWNpb24geSBpZGthdGlvcyBkYWRvc1xyXG4gICAgZ2V0X00zVWJpY2FjaW9uZXMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIHNJZFViaWNhY2lvbjogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL2dldF9NM1ViaWNhY2lvbmVzLycgKyBzSURLYXRpb3MgKyAnLycgKyBzSWRVYmljYWNpb24pLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgZ2V0X00zVWJpY2FjaW9uZXNcclxuXHJcbiAgICAvL09idGllbmUgZWwgb2JqZXRvIE0zVWJpY2FjaW9uZXMgcGFyYSBsYSB1YmljYWNpb24geSBpZGthdGlvcyBkYWRvc1xyXG4gICAgZ2V0X00zVWJpY2FjaW9uZXNDb21wbGV0YShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgc0lkVWJpY2FjaW9uOiBzdHJpbmcsIHNJZEh1Yjogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zV2l0aFRpbWVPdXQoJ00zTWFlc3Ryby9nZXRfTTNVYmljYWNpb25lc0NvbXBsZXRhLycgKyBzSURLYXRpb3MgKyAnLycgKyBzSWRVYmljYWNpb24gKyAnLycgKyBzSWRIdWIsIDEwMDAwKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIGdldF9NM1ViaWNhY2lvbmVzQ29tcGxldGFcclxuXHJcblxyXG4gICAgLy9yYWUgZWwgcHJvZHVjdG8gZGUgYWN1ZXJkbyBhbCBTS1VcclxuICAgIHB1YmxpYyBNM0dldFByb2R1Y3RvQnlTS1UoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIGRhdGE6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uLCBvRGF0YVVzZXI6IGFueSkge1xyXG4gICAgICAgIHZhciBvU2VydmljZUxvYWRMaXN0YVByZWNpbyA9IG5ldyBTZXJ2aWNlTG9hZExpc3RhUHJlY2lvKHNJREthdGlvcyk7XHJcblxyXG4gICAgICAgIGlmIChvRGF0YVVzZXIuVXN1YXJpb1Npc3RlbWEuRmVjaGFQcmVjaW8pIGRhdGEuZmVjaGFMUHJlY2lvID0gb0RhdGFVc2VyLlVzdWFyaW9TaXN0ZW1hLkZlY2hhUHJlY2lvO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhQb3N0U2VydmljZU0zKTtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9NM0dldFByb2R1Y3RvQnlTS1UvJyArIHNJREthdGlvcywgZGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICB2YXIgb1Byb2R1Y3RvOiBhbnkgPSByZXNwO1xyXG4gICAgICAgICAgICBvU2VydmljZUxvYWRMaXN0YVByZWNpby5Bc2lnbmFyTGlzdGFQcmVjaW8ob1Byb2R1Y3RvLCBvRGF0YVVzZXIsIFBvc3RTZXJ2aWNlTTMpLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbk9LKG9Qcm9kdWN0byk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoSlNPTi5wYXJzZShlcnIuX2JvZHkpLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9yYWUgZWwgcHJvZHVjdG8gZGUgYWN1ZXJkbyBhbCBTS1VcclxuICAgIGFzeW5jIE0zR2V0UHJvZHVjdG9CeVNLVUFzeW5jKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBzU0tVOiBzdHJpbmcsXHJcbiAgICAgICAgb0RhdGFVc2VyOiBhbnksIFViaWNhY2lvbjogc3RyaW5nID0gXCItMVwiLCBzQXBsRXhjOiBzdHJpbmcgPSBcIjFcIikge1xyXG4gICAgICAgIHZhciBkYXRhO1xyXG4gICAgICAgIHZhciByZXNwO1xyXG4gICAgICAgIHZhciBvU2VydmljZUxvYWRMaXN0YVByZWNpbyA9IG5ldyBTZXJ2aWNlTG9hZExpc3RhUHJlY2lvKHNJREthdGlvcyk7XHJcblxyXG4gICAgICAgIGRhdGEgPSB7ICdTS1UnOiBzU0tVLCBcIlVCSUNBQ0lPTlwiOiBVYmljYWNpb24gPT0gXCItMVwiID8gb0RhdGFVc2VyLlVzdWFyaW9TaXN0ZW1hLlVCSUNBQ0lPTiA6IFViaWNhY2lvbiwgJ0FwbEV4Yyc6IHNBcGxFeGMgfTtcclxuICAgICAgICBpZiAob0RhdGFVc2VyLlVzdWFyaW9TaXN0ZW1hLkZlY2hhUHJlY2lvKSBkYXRhLmZlY2hhTFByZWNpbyA9IG9EYXRhVXNlci5Vc3VhcmlvU2lzdGVtYS5GZWNoYVByZWNpbztcclxuXHJcbiAgICAgICAgcmVzcCA9IGF3YWl0IFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL00zR2V0UHJvZHVjdG9CeVNLVS8nICsgc0lES2F0aW9zLCBkYXRhKS50b1Byb21pc2UoKTtcclxuICAgICAgICBhd2FpdCBvU2VydmljZUxvYWRMaXN0YVByZWNpby5Bc2lnbmFyTGlzdGFQcmVjaW8ocmVzcCwgb0RhdGFVc2VyLCBQb3N0U2VydmljZU0zKTtcclxuICAgICAgICByZXR1cm4gcmVzcDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9PYnRlbmVyIHByb2R1Y3RvIGVzcGVjZmljbyB0ZW5pZW5kbyBlbiBjdWVudGEgY29kaWdvLlxyXG4gICAgYXN5bmMgR2V0X00zUHJvZHVjdG9Fc3BlY0J5Q29kZUFzeW5jKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBkYXRhOiBhbnksIG9EYXRhVXNlcjogYW55KSB7XHJcbiAgICAgICAgdmFyIG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvID0gbmV3IFNlcnZpY2VMb2FkTGlzdGFQcmVjaW8oc0lES2F0aW9zKTtcclxuICAgICAgICB2YXIgb1Byb2R1Y3RvOiBhbnk7XHJcblxyXG4gICAgICAgIGlmIChvRGF0YVVzZXIuVXN1YXJpb1Npc3RlbWEuRmVjaGFQcmVjaW8pIGRhdGEuZmVjaGFMUHJlY2lvID0gb0RhdGFVc2VyLlVzdWFyaW9TaXN0ZW1hLkZlY2hhUHJlY2lvO1xyXG5cclxuICAgICAgICBvUHJvZHVjdG8gPSBhd2FpdCBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoXCJNM01hZXN0cm8vR2V0X00zUHJvZHVjdG9Fc3BlY0J5Q29kZS9cIiArIHNJREthdGlvcywgZGF0YSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgYXdhaXQgb1NlcnZpY2VMb2FkTGlzdGFQcmVjaW8uQXNpZ25hckxpc3RhUHJlY2lvKG9Qcm9kdWN0bywgb0RhdGFVc2VyLCBQb3N0U2VydmljZU0zKTtcclxuICAgICAgICByZXR1cm4gb1Byb2R1Y3RvO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL1RyYWUgbG9zIHJlZ2lzdHJvcyBxdWUgc2UgZW5jdWVudHJlbiBlbiBNM1Byb2Nlc29zIHF1ZSBzZSBlbmN1ZW50cmVuIGNvbiBlc3RhZG9nZW5lcmFsIHByb2Nlc29cclxuICAgIE0zZ2V0UmVnaXN0cm9zRW5Qcm9jZXNvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBpZFByb2Nlc286IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdmFyIGRhdGE7XHJcbiAgICAgICAgZGF0YSA9IHsgJ2lkUHJvY2Vzbyc6IGlkUHJvY2VzbyB9XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNMy9nZXRfUmVnaXN0cm9zRW5Qcm9jZXNvLycgKyBzSURLYXRpb3MsIGRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhKU09OLnBhcnNlKHJlc3AudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIuX2JTb2R5KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9PYnRpZW5lIGVsIHRvcCAyMCBkZSBwcm9kdWN0b3MgcXVlIGNvaW5jaWRhZCBjb24gZWwgc05vbWJyZSBpbmdyZXNhZG9cclxuICAgIGdldF9NM1ByZEdycEJ5Tm9tYnJlKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBzTm9tYnJlOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vZ2V0X00zUHJkR3JwQnlOb21icmUvJyArIHNJREthdGlvcyArICcvJyArIHNOb21icmUpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuXHJcbiAgICAgICAgICAgIHZhciBqUmVzcCA9IEpTT04ucGFyc2UocmVzcCkuUkVTUFVFU1RBLk0zR1JQO1xyXG4gICAgICAgICAgICBpZiAoalJlc3AubGVuZ3RoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3AgPSBuZXcgQXJyYXkoalJlc3ApO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uT0soalJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKEpTT04ucGFyc2UoZXJyLl9ib2R5KS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgZ2V0X00zUHJkR3JwQnlOb21icmVcclxuXHJcbiAgICAvL09idGllbmUgZWwgdG9wIDIwIGRlIHByb2R1Y3RvcyBhZ3J1cGFkb3MgcXVlIGNvaW5jaWRhZCBjb24gZWwgc05vbWJyZSBpbmdyZXNhZG9cclxuICAgIHB1YmxpYyBHZXRNM1ByZEFncnVwYWRvQnlOb21icmUoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIHNOb21icmU6IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9nZXRfbTNfcHJkX2J5X25vbWJyZV9hZ3J1cGFkby8nICsgc0lES2F0aW9zICsgJy8nICsgc05vbWJyZSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG5cclxuICAgICAgICAgICAgdmFyIGpSZXNwID0gSlNPTi5wYXJzZShyZXNwKS5SRVNQVUVTVEEuTTNHUlA7XHJcbiAgICAgICAgICAgIGlmIChqUmVzcC5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzcCA9IG5ldyBBcnJheShqUmVzcCk7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25PSyhqUmVzcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoSlNPTi5wYXJzZShlcnIuX2JvZHkpLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL09idGllbmUgZWwgdG9wIDIwIGRlIHByb2R1Y3RvcyBhZ3J1cGFkb3MgcXVlIGNvaW5jaWRhZCBjb24gZWwgc05vbWJyZSBpbmdyZXNhZG8geSBxdWUgbm8gZXN0ZW4gZXhsY3VpZG9zIChNM0V4Y1ByZFhVYmljKVxyXG4gICAgcHVibGljIGdldF9tM19wcmRfYnlfbm9tYnJlX2FncnVwYWRvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBkYXRhOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICAvL2RhdGEgPSB7bm9tYnJlOidhc2Rhc2QnLCBpZFViaWNhY2lvbjonMSd9XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vZ2V0X20zX3ByZF9ieV9ub21icmVfYWdydXBhZG8vJyArIHNJREthdGlvcywgZGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG5cclxuICAgICAgICAgICAgdmFyIGpSZXNwID0gSlNPTi5wYXJzZShTdHJpbmcocmVzcCkpLlJFU1BVRVNUQS5NM0dSUDtcclxuICAgICAgICAgICAgaWYgKGpSZXNwLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwID0gbmV3IEFycmF5KGpSZXNwKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbk9LKGpSZXNwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLl9ib2R5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoSlNPTi5wYXJzZShlcnIuX2JvZHkpLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmVycm9yICYmIGVyci5lcnJvci5NZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVyci5lcnJvci5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLy9PYnRpZW5lIGVsIHBhdGggYmFzZSBkb25kZSBzZSBlbmN1ZW50cmEgYWxvamFkYXMgbGFzIGltYWdlbmVzIGVuIGVsIHNlcnZpZG9yXHJcbiAgICBwdWJsaWMgZ2V0X1BhdGhTZXJ2aWRvckltYWdlbmVzKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL2dldF9QYXRoU2Vydmlkb3JJbWFnZW5lcy8nICsgc0lES2F0aW9zKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwKVxyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIGdldF9QYXRoU2Vydmlkb3JJbWFnZW5lc1xyXG5cclxuXHJcbiAgICAvL09idGVuZXIgcHJvZHVjdG8gZXNwZWNmaWNvIHRlbmllbmRvIGVuIGN1ZW50YSBjb2RpZ28uXHJcbiAgICBHZXRfTTNQcm9kdWN0b0VzcGVjQnlDb2RlKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBkYXRhOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbiwgb0RhdGFVc2VyOiBhbnkpIHtcclxuICAgICAgICB2YXIgb1NlcnZpY2VMb2FkTGlzdGFQcmVjaW8gPSBuZXcgU2VydmljZUxvYWRMaXN0YVByZWNpbyhzSURLYXRpb3MpO1xyXG5cclxuICAgICAgICBpZiAob0RhdGFVc2VyLlVzdWFyaW9TaXN0ZW1hLkZlY2hhUHJlY2lvKSBkYXRhLmZlY2hhTFByZWNpbyA9IG9EYXRhVXNlci5Vc3VhcmlvU2lzdGVtYS5GZWNoYVByZWNpbztcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoXCJNM01hZXN0cm8vR2V0X00zUHJvZHVjdG9Fc3BlY0J5Q29kZS9cIiArIHNJREthdGlvcywgZGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICB2YXIgb1Byb2R1Y3RvOiBhbnkgPSByZXNwO1xyXG4gICAgICAgICAgICBvU2VydmljZUxvYWRMaXN0YVByZWNpby5Bc2lnbmFyTGlzdGFQcmVjaW8ob1Byb2R1Y3RvLCBvRGF0YVVzZXIsIFBvc3RTZXJ2aWNlTTMpLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnJvci5lcnJvci5NZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgR2V0X00zUHJvZHVjdG9Fc3BlY0J5Q29kZVRpbWVPdXQoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIGRhdGE6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uLCBvRGF0YVVzZXI6IGFueSwgdGltZW91dFRpbWU6IG51bWJlcikge1xyXG4gICAgICAgIHZhciBvU2VydmljZUxvYWRMaXN0YVByZWNpbyA9IG5ldyBTZXJ2aWNlTG9hZExpc3RhUHJlY2lvKHNJREthdGlvcyk7XHJcblxyXG4gICAgICAgIGlmICh0aW1lb3V0VGltZSAhPSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChvRGF0YVVzZXIgJiYgb0RhdGFVc2VyLlVzdWFyaW9TaXN0ZW1hICYmIG9EYXRhVXNlci5Vc3VhcmlvU2lzdGVtYS5GZWNoYVByZWNpbykgZGF0YS5mZWNoYUxQcmVjaW8gPSBvRGF0YVVzZXIuVXN1YXJpb1Npc3RlbWEuRmVjaGFQcmVjaW87XHJcbiAgICAgICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNM1RpbWVPdXQoXCJNM01hZXN0cm8vR2V0X00zUHJvZHVjdG9Fc3BlY0J5Q29kZS9cIiArIHNJREthdGlvcywgZGF0YSwgdGltZW91dFRpbWUpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgICAgICB2YXIgb1Byb2R1Y3RvOiBhbnkgPSByZXNwO1xyXG4gICAgICAgICAgICAgICAgb1NlcnZpY2VMb2FkTGlzdGFQcmVjaW8uQXNpZ25hckxpc3RhUHJlY2lvKG9Qcm9kdWN0bywgb0RhdGFVc2VyLCBQb3N0U2VydmljZU0zKS50aGVuKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnJvci5lcnJvci5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKFwiNDA0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uRXJyKFwiNDA0XCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRfRG9jc0Zyb21Db3VjaE1hZXN0cm8ob00zQ291Y2hNYWVzdHJvOiBNM0NvdWNoTWFlc3Rybywgc0lkS2F0aW9zOiBzdHJpbmcsIHNEb2M6IHN0cmluZywgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZ2V0X0RvY3NGcm9tQ291Y2hNYWVzdHJvXCIpXHJcbiAgICAgICAgdmFyIHNJZEtleURvYyA9IG9NM0NvdWNoTWFlc3Ryby5HZXRLZXlEb2N1bWVudG9EQihzSWRLYXRpb3MsIHNEb2MpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHNJZEtleURvYylcclxuICAgICAgICBvTTNDb3VjaE1hZXN0cm8uR2V0RGF0YVBvdWNoQkQoc0lkS2V5RG9jKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzdWx0KTtcclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycm9yKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBHZXRQcm9kdWN0b0VzcGVjQnlDb2RlRnJvbUNvdWNoKGpQcm9kdWN0c0NvdWNoOiBhbnksIHNDb2RlOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyb3I6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdmFyIGpQcm9kdWN0c0ZpbCA9IGpQcm9kdWN0c0NvdWNoLmZpbmQoeCA9PiB4LkxvTTNQcmRHZW5lcmFsICE9IHVuZGVmaW5lZCAmJiB4LkxvTTNQcmRHZW5lcmFsLmZpbmQodyA9PiB3Lk0zQ29kcyAhPSB1bmRlZmluZWQgJiYgdy5NM0NvZHMuZmluZCh5ID0+IFN0cmluZyh5LlZhbG9yKSA9PSBTdHJpbmcoc0NvZGUpKSAhPSB1bmRlZmluZWQpICE9IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgdmFyIHByb2R1Y3RfY2xvbmUgPSBfLmNsb25lRGVlcChqUHJvZHVjdHNGaWwpO1xyXG5cclxuICAgICAgICBpZiAoalByb2R1Y3RzRmlsICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YXIgalByZEVzcCA9IGpQcm9kdWN0c0ZpbC5Mb00zUHJkR2VuZXJhbC5maW5kKHcgPT4gdy5NM0NvZHMuZmluZCh5ID0+IFN0cmluZyh5LlZhbG9yKSA9PSBTdHJpbmcoc0NvZGUpKSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHByb2R1Y3RfY2xvbmUuTG9NM1ByZEdlbmVyYWwgPSBbXTtcclxuICAgICAgICAgICAgcHJvZHVjdF9jbG9uZS5Mb00zUHJkR2VuZXJhbC5wdXNoKGpQcmRFc3ApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInByb2R1Y3RfY2xvbmVcIilcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocHJvZHVjdF9jbG9uZSlcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhwcm9kdWN0X2Nsb25lKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb0Z1bmNpb25FcnJvcihcIk5vIHNlIGVuY29udHLDsyBudW5nw7puIHJlZ2lzdHJvLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vL09idGllbmUgbG9zIFRpcG9zIGRlIHByb2Nlc29zIGRlc2RlIGVsIHNlcnZpZG9yXHJcbiAgICBwdWJsaWMgZ2V0X1RpcG9zUHJvY2VzbyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uLCBhY3RpdmlkYWQ6IHN0cmluZyA9ICdWZW50YXMnKSB7XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9nZXRfVGlwb3NQcm9jZXNvLycgKyBzSURLYXRpb3MgKyAnLycgKyBhY3RpdmlkYWQpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhKU09OLnBhcnNlKHJlc3ApLlJFU1BVRVNUQSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgZ2V0X1RpcG9zUHJvY2Vzb1xyXG5cclxuICAgIC8vL09idGllbmUgbGEgSW5mbyBkZSB1biBwcm9jZXNvIGEgcGFydGlyIGRlIHVuIGlkUHJvY2VzbyB5IHVuIElkTTNcclxuICAgIHB1YmxpYyBnZXRfSW5mb1BlcnNvbmFfUHJvY2VzbyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgakRhdGE6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL2dldF9JbmZvUGVyc29uYV9Qcm9jZXNvLycgKyBzSURLYXRpb3MsIGpEYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soSlNPTi5wYXJzZShTdHJpbmcocmVzcCkpLlJFU1BVRVNUQSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgZ2V0X0luZm9Qcm9jZXNvXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPYnRpZW5lIGxhIEluZm8gZGUgdW4gcHJvY2VzbyBhIHBhcnRpciBkZSB1biBpZFByb2Nlc28geSB1biBJZE0zIGRlIG1hbmVyYSBzaW5jcsOzbmljYVxyXG4gICAgICogQHBhcmFtIFBvc3RTZXJ2aWNlTTMgXHJcbiAgICAgKiBAcGFyYW0gc0lES2F0aW9zIFxyXG4gICAgICogQHBhcmFtIGpEYXRhIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0X0luZm9QZXJzb25hX1Byb2Nlc29fYXN5bmMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIGpEYXRhOiBhbnkpIHtcclxuICAgICAgICB2YXIganNvbjtcclxuICAgICAgICB2YXIgcmVzcDtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmVzcCA9IGF3YWl0IFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL2dldF9JbmZvUGVyc29uYV9Qcm9jZXNvLycgKyBzSURLYXRpb3MsIGpEYXRhKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAganNvbiA9IEpTT04ucGFyc2UocmVzcClcclxuICAgICAgICAgICAgcmV0dXJuIGpzb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL09idGVuZXIgdW4gcHJvZHVjdG8gYWdydXBhZG8sIHRlbmllbmRvIHVuYSBsaXN0YSBkZSBwcm9kdWN0byBhZ3J1cGFkb3MgeSB1biBza3VcclxuICAgIHB1YmxpYyBHZXRNM1ByZEdycEZyb21MaXN0KExpc3RQcmQ6IEFycmF5PFR5cGVNM1ByZEdycD4sIHNrdSk6IFR5cGVNM1ByZEdycCB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIG9UeXBlTTNQcmRHcnBSZXN1bHQ6IFR5cGVNM1ByZEdycDtcclxuICAgICAgICAgICAgb1R5cGVNM1ByZEdycFJlc3VsdCA9IExpc3RQcmQuZmluZChwcmQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJSZXNwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBwcmQuTG9NM1ByZEdlbmVyYWwuZm9yRWFjaChwcmQgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJkLlNLVSA9PT0gc2t1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJSZXNwID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBiUmVzcDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG9UeXBlTTNQcmRHcnBSZXN1bHQuTG9NM1ByZEdlbmVyYWwgPSBvVHlwZU0zUHJkR3JwUmVzdWx0LkxvTTNQcmRHZW5lcmFsLmZpbHRlcihnZW4gPT4gZ2VuLlNLVSA9PSBza3UpO1xyXG4gICAgICAgICAgICByZXR1cm4gb1R5cGVNM1ByZEdycFJlc3VsdDtcclxuICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vT2J0ZW5lciBkZSB1bmEgbGlzdGEgZGUgdWJpY2FjaW9uZXMsIHVuYSB1YmljYWNpb24gZW4gcGFydGljdWxhciwgdGVuaWVuZG8gZW4gY3VlbnRhIGVsIElkVWJpY2FjaW9uXHJcbiAgICBwdWJsaWMgR2V0VWJpY2FjaW9uRnJvbUxpc3QoTGlzdFViaWM6IEFycmF5PE0zVWJpY2FjaW9uPiwgc0lkVWJpYykge1xyXG4gICAgICAgIHZhciBvTTNVYmljYWNpb246IE0zVWJpY2FjaW9uO1xyXG4gICAgICAgIG9NM1ViaWNhY2lvbiA9IExpc3RVYmljLmZpbmQodWJpYyA9PiB1YmljLklEVWJpY2FjaW9uID09IHNJZFViaWMpO1xyXG4gICAgICAgIHJldHVybiBvTTNVYmljYWNpb247XHJcbiAgICB9XHJcblxyXG4gICAgLy8vT2J0aWVuZSBsb3MgZGF0b3MgZGUgZmFjdHVyYWNpb24gdGFsIGNvbW8gZWwgY29kaWdvIHBvc3RhbCB5IGVsIHJlZ2ltZW4gZmlzY2FsIGFzb2NpYWRvIGEgdW4gUkZDXHJcbiAgICBwdWJsaWMgZ2V0RGF0b3NGYWN0dXJhY2lvbkZyb21SRkMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIG9EYXRhOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9nZXREYXRvc0ZhY3R1cmFjaW9uRnJvbVJGQy8nICsgc0lES2F0aW9zLCBvRGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKEpTT04ucGFyc2UocmVzcC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgZ2V0RGF0b3NGYWN0dXJhY2lvbkZyb21SRkNcclxuXHJcbiAgICBwdWJsaWMgYWN0dWFsaXphclJGQyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBJZEthdGlvczogc3RyaW5nLCBvRGF0YSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKCdNM01hZXN0cm8vYWN0dWFsaXphclJGQy8nICsgSWRLYXRpb3MsIG9EYXRhKS5zdWJzY3JpYmUocG9zdHMgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHBvc3RzKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihKU09OLnBhcnNlKGVyci5fYm9keSkuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLy9PYnRpZW5lIGVsIFhtbCBkZSBjb25maWd1cmFjaW9uIGRlIGxhIGVtcHJlc2EgYSBwYXJ0aXIgZGVsIGlkdWJpY2FjaW9uXHJcbiAgICBwdWJsaWMgZ2V0X1htbENvbmZpZ194X0lkVWJpY2FjaW9uKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBvRGF0YTogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vZ2V0X1htbENvbmZpZ194X0lkVWJpY2FjaW9uLycgKyBzSURLYXRpb3MsIG9EYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soSlNPTi5wYXJzZShyZXNwLnRvU3RyaW5nKCkpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBnZXRfWG1sQ29uZmlnX3hfSWRVYmljYWNpb25cclxuXHJcbiAgICAvLy9PYnRpZW5lIGVsIFhtbCBkZSBjb25maWd1cmFjaW9uIGRlIGxhIGVtcHJlc2EgYSBwYXJ0aXIgZGVsIGlkdWJpY2FjaW9uXHJcbiAgICBwdWJsaWMgZ2V0Q0ZESXNYUHJvY2VzbyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgb0RhdGE6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL2dldENGRElzWFByb2Nlc28vJyArIHNJREthdGlvcywgb0RhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhKU09OLnBhcnNlKHJlc3AudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIGdldF9YbWxDb25maWdfeF9JZFViaWNhY2lvblxyXG5cclxuICAgIC8vL09idGllbmUgbG9zIGF0cmlidXRvcyBlbiBtM2NsYXNpZmljYSBhIHBhcnRpciBkZSB1biBpZGthdGlvc1xyXG4gICAgZ2V0X2NsYXNpZmljYXRpb25fYXR0cmlidXRlcyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9nZXRfY2xhc2lmaWNhdGlvbl9hdHRyaWJ1dGVzLycgKyBpZF9rYXRpb3MpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgdmFyIGpSZXNwID0gSlNPTi5wYXJzZShyZXNwKS5SRVNQVUVTVEEuQVRUUklCVVRFUztcclxuICAgICAgICAgICAgaWYgKGpSZXNwLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBqUmVzcCA9IG5ldyBBcnJheShqUmVzcCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soalJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLy8vT2J0aWVuZSBsYXMgY2F0ZWdvcmlhcyBlbiBtM2NsYXNpZmljYSBhIHBhcnRpciBkZSB1biBpZGthdGlvcyB5IHVuIGF0cmlidXRvXHJcbiAgICBnZXRfY2xhc2lmaWNhdGlvbl9jYXRlZ29yaWVzKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBhdHRyaWJ1dGU6IHN0cmluZywgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9nZXRfY2xhc2lmaWNhdGlvbl9jYXRlZ29yaWVzLycgKyBpZF9rYXRpb3MgKyBcIi9cIiArIGF0dHJpYnV0ZSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICB2YXIgalJlc3AgPSBKU09OLnBhcnNlKHJlc3ApLlJFU1BVRVNUQS5DQVRFR09SSUVTO1xyXG4gICAgICAgICAgICBpZiAoalJlc3AubGVuZ3RoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGpSZXNwID0gbmV3IEFycmF5KGpSZXNwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhqUmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9wY2lvbmVzQWRpY2lvbmFsZXMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vZ2V0T3BjaW9uZXNBZGljaW9uYWxlcy8nICsgaWRfa2F0aW9zKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIHZhciBqUmVzcCA9IEpTT04ucGFyc2UocmVzcCkuUkVTUFVFU1RBLkFUVFJJQlVURVM7XHJcbiAgICAgICAgICAgIGlmIChqUmVzcC5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgalJlc3AgPSBuZXcgQXJyYXkoalJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKGpSZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdHJpYnV0b3NBZGljaW9uYWxlcyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgYXR0cmlidXRlOiBzdHJpbmcsIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vZ2V0QXRyaWJ1dG9zQWRpY2lvbmFsZXMvJyArIGlkX2thdGlvcyArIFwiL1wiICsgYXR0cmlidXRlKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIHZhciBqUmVzcCA9IEpTT04ucGFyc2UocmVzcCkuUkVTUFVFU1RBLkNBVEVHT1JJRVM7XHJcbiAgICAgICAgICAgIGlmIChqUmVzcC5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgalJlc3AgPSBuZXcgQXJyYXkoalJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKGpSZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vT2J0aWVuZSBsYSBpbmZvcm1hY2lvbiBkZSB0aXBvcyBkZSBlbnZpby5cclxuICAgIE0zR2V0Rm9ybWFzRW52aW8oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vTTNHZXRGb3JtYXNFbnZpby8nICsgaWRfa2F0aW9zKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIHZhciBqc1Jlc3A7XHJcbiAgICAgICAgICAgIGpzUmVzcCA9IEpTT04ucGFyc2UocmVzcCk7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soanNSZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8vT2J0aW5pZSB0b2RhcyBsYXMgTTNVYmljYWNpb25lcyBhc29jaWFkYXMgYSB1biBpZF9rYXRpb3NcclxuICAgIHB1YmxpYyBnZXRfdWJpY2FjaW9uZXNfY29tcGxldGUoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vZ2V0X3ViaWNhY2lvbmVzX2NvbXBsZXRlLycgKyBpZF9rYXRpb3MpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8vT2J0aW5pZSB0b2RhcyBsYXMgTTNVYmljYWNpb25lcyBhc29jaWFkYXMgYSB1biBpZF9rYXRpb3NcclxuICAgIHB1YmxpYyBnZXRfdWJpY2FjaW9uZXNfc2ltcGxlKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL2dldF91YmljYWNpb25lc19zaW1wbGUvJyArIGlkX2thdGlvcykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vT2J0aW5pZSB0b2RhcyBsYXMgTTNVYmljYWNpb25lcyBhc29jaWFkYXMgYSB1biBpZF9rYXRpb3NcclxuICAgIHB1YmxpYyBhc3luYyBNM0dFVF9MSVNUQVBSRUNJT1NfQVN5bmMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgb1JlY0xpc3RhUHJlYzogYW55O1xyXG5cclxuICAgICAgICBvUmVjTGlzdGFQcmVjID0gYXdhaXQgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL00zR0VUX0xJU1RBUFJFQ0lPUy8nICsgaWRfa2F0aW9zKS50b1Byb21pc2UoKTtcclxuICAgICAgICByZXR1cm4gb1JlY0xpc3RhUHJlY1swXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgR2V0RW5jYWJlemFkb0xpc3Rhc1ByZWNpbyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZykge1xyXG4gICAgICAgIHZhciByZXNwO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXNwID0gYXdhaXQgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTMvR2V0Q29uZmlnTFAvJyArIHNJREthdGlvcykudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0cmFyQ29sb25pYShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBJZEthdGlvczogc3RyaW5nLCBzQ29sb25pYTogc3RyaW5nLCBzQ29kUG9zdGFsLCBzVGVsZWZvbm86IHN0cmluZywgbmRvYzogc3RyaW5nLCBzTGluZWExOiBzdHJpbmcsIHNDb2Rlc3RhZG86IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIHZhciBvRGF0YVNlbmQ7XHJcbiAgICAgICAgb0RhdGFTZW5kID0geyBcInNDb2xvbmlhXCI6IHNDb2xvbmlhLCBcInNDb2RQb3N0YWxcIjogc0NvZFBvc3RhbCwgXCJzVGVsZWZvbm9cIjogc1RlbGVmb25vLCBcIm5kb2NcIjogbmRvYywgXCJzTGluZWExXCI6IHNMaW5lYTEsIFwic0NvZGVzdGFkb1wiOiBzQ29kZXN0YWRvIH07XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoJ00zTWFlc3Ryby9yZWdpc3RyYXJDb2xvbmlhLycgKyBJZEthdGlvcywgb0RhdGFTZW5kKS5zdWJzY3JpYmUocG9zdHMgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoSlNPTi5wYXJzZShlcnIuX2JvZHkpLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8vT2J0ZW5lciBwcm9tb2Npb25lcyBcclxuICAgIHB1YmxpYyBhc3luYyBNM19HZXRQcm9tb2Npb25lc01hZXN0cm9Bc3luYyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBvUmVjTGlzdGFQcmVjOiBhbnk7XHJcblxyXG4gICAgICAgIG9SZWNMaXN0YVByZWMgPSBhd2FpdCBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vTTNfR2V0UHJvbW9jaW9uZXNNYWVzdHJvLycgKyBpZF9rYXRpb3MpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHJldHVybiBvUmVjTGlzdGFQcmVjO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy9PYnRlbmVyIERpbmFtaWNhcyBwb3IgYWN0aXZpZGFkIFxyXG4gICAgcHVibGljIGFzeW5jIE0zR2V0RGluQnlBY3RpdmlkYWQoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIG9EYXRhOiBhbnksIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vTTNHZXREaW5CeUFjdGl2aWRhZC8nICsgaWRfa2F0aW9zLCBvRGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL3ZhciBqc1Jlc3A6YW55ID0gcmVzcDtcclxuICAgICAgICAgICAgLy9qc1Jlc3AgPSBKU09OLnBhcnNlKGpzUmVzcCk7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgLy8gdmFyIG9SZWNMaXN0YVByZWM6IGFueTtcclxuXHJcbiAgICAgICAgLy8gb1JlY0xpc3RhUHJlYyA9IGF3YWl0IFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL00zR2V0RGluQnlBY3RpdmlkYWQvJyArIGlkX2thdGlvcywgb0RhdGEpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIC8vIHJldHVybiBvUmVjTGlzdGFQcmVjO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBsYSBpbmZvIGJhc2ljYSBkZSBsYXMgdWJpY2FjaW9uZXMgY29uIEh1YiB0aXBvIFdFQiBhY3Rpdm9zIGVuIGVsIG1vbWVudG9cclxuICAgICAqIEBwYXJhbSBQb3N0U2VydmljZU0zIFxyXG4gICAgICogQHBhcmFtIGlkS2F0aW9zIFxyXG4gICAgICogQHBhcmFtIG9GdW5jaW9uT0sgXHJcbiAgICAgKiBAcGFyYW0gb0Z1bmNpb25FcnIgXHJcbiAgICAgKi9cclxuICAgIGdldFViaWNhY2lvbmVzV2ViKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkS2F0aW9zOiBzdHJpbmcsIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vZ2V0VWJpY2FjaW9uZXNXZWIvJyArIGlkS2F0aW9zKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soSlNPTi5wYXJzZShyZXNwKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIFJldG9ybmEgbGEgaW5mbyBiYXNpY2EgZGUgbGFzIHViaWNhY2lvbmVzIGNvbiBIdWIgdGlwbyBXRUIgYWN0aXZvcyBlbiBlbCBtb21lbnRvIHF1ZSBhYmFycXVlbiB1biBjb2Rwb3N0YWwgZW4gY29uY3JldG9cclxuICAgICAqIEBwYXJhbSBQb3N0U2VydmljZU0zIFxyXG4gICAgICogQHBhcmFtIGlkS2F0aW9zIFxyXG4gICAgICogQHBhcmFtIGRhdGEgXHJcbiAgICAgKiBAcGFyYW0gb0Z1bmNpb25PSyBcclxuICAgICAqIEBwYXJhbSBvRnVuY2lvbkVyciBcclxuICAgICAqL1xyXG4gICAgZ2V0VWJpY2FjaW9uZXNCeUNvZFBvc3RhbChQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZEthdGlvczogc3RyaW5nLCBkYXRhOiBhbnksIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICAvL2RhdGEgPSB7IFwiY29kUG9zdGFsXCI6IHN0cmluZyB9O1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL2dldFViaWNhY2lvbmVzQnlDb2RQb3N0YWwvJyArIGlkS2F0aW9zLCBkYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soSlNPTi5wYXJzZShyZXNwLnRvU3RyaW5nKCkpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRvcm5hIGVsIHBhdGggZGUgbGEgZmFjdHVyYSBlbGVjdHLDs25pY2EgYSBwYXJ0aXIgZGUgdW4gSWREaWFyaW8gYXNvY2lhZG8gYWwgcHJvY2VzbyBcclxuICAgICAqIEBwYXJhbSBQb3N0U2VydmljZU0zIFxyXG4gICAgICogQHBhcmFtIGlkS2F0aW9zIFxyXG4gICAgICogQHBhcmFtIGRhdGEgXHJcbiAgICAgKiBAcGFyYW0gb0Z1bmNpb25PSyBcclxuICAgICAqIEBwYXJhbSBvRnVuY2lvbkVyciBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFBhdGhGRUZyb21EaWFyaW8oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRLYXRpb3M6IHN0cmluZywgdGlwb0dlbmVyYWNpb246IHN0cmluZywgZGF0YTogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zL2dldFBhdGhGRUZyb21EaWFyaW8vJyArIGlkS2F0aW9zICsgJy8nICsgdGlwb0dlbmVyYWNpb24sIGRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgdmFyIHJlc3B1ZXN0YTogYW55ID0gSlNPTi5wYXJzZShyZXNwLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3B1ZXN0YSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREaWFyaW9BZGljaW9uYWxlc3hEaWFyaW8oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRLYXRpb3M6IHN0cmluZywgZGF0YTogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5R2VuZXJhbGVzKCdEaWFyaW8vZ2V0RGlhcmlvQWRpY2lvbmFsZXN4RGlhcmlvLycgKyBpZEthdGlvcywgZGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICB2YXIgcmVzcHVlc3RhOiBhbnkgPSBKU09OLnBhcnNlKHJlc3AudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcHVlc3RhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoSlNPTi5wYXJzZShlcnIuX2JvZHkpLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgYXN5bmMgSVVfSHViKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBvSHViOiBhbnksIHVUQWN0aXZvOiBzdHJpbmcsIHVOQWN0aXZvOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgSW5mbztcclxuICAgICAgICB2YXIgZGF0YSA9IHsgJ2lkS2F0aW9zJzogaWRfa2F0aW9zLnRyaW0oKSwgJ29IdWInOiBvSHViLCAndVRBY3Rpdm8nOiB1VEFjdGl2bywgJ3VOQWN0aXZvJzogdU5BY3Rpdm8gfTtcclxuICAgICAgICBJbmZvID0gYXdhaXQgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoJ00zTWFlc3Ryby9JVV9IdWInLCBkYXRhKS50b1Byb21pc2UoKVxyXG4gICAgICAgIHJldHVybiBJbmZvXHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9idGVuZXIgZWwgY3Rpdm8gZGVzZGUgc2Vydmlkb3JcclxuICAgICAqIEBwYXJhbSBQb3N0U2VydmljZU0zIFxyXG4gICAgICogQHBhcmFtIGlkX2thdGlvcyBcclxuICAgICAqIEBwYXJhbSBpZHByb2Nlc28gXHJcbiAgICAgKiBAcGFyYW0gdWJpY2FjaW9uIFxyXG4gICAgICogQHBhcmFtIGh1YiBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgR2V0Q3Rpdm9CWVByb2Nlc28oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIGlkcHJvY2Vzbzogc3RyaW5nLCB1YmljYWNpb246IHN0cmluZywgaHViOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgSW5mbztcclxuICAgICAgICB2YXIgZGF0YSA9IHsgJ2lkcHJvY2Vzbyc6IGlkcHJvY2VzbywgJ3ViaWNhY2lvbic6IHViaWNhY2lvbiwgJ2h1Yic6IGh1YiB9O1xyXG4gICAgICAgIEluZm8gPSBhd2FpdCBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zL0dldEN0aXZvQllQcm9jZXNvLycgKyBpZF9rYXRpb3MudHJpbSgpLCBkYXRhKS50b1Byb21pc2UoKVxyXG4gICAgICAgIHJldHVybiBJbmZvXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBWYWxpZGFyQ3Rpdm9zVlNMb2NhbChQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZyxcclxuICAgICAgICBpbmZQcm9jZXNvOiBzdHJpbmcsIHViaWNhY2lvbjogc3RyaW5nLCBodWI6IHN0cmluZywgZnVuY2lvblJlc3A6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoJ00zL1ZhbGlkYXJDdGl2b3NWU0xvY2FsLycgKyBpZF9rYXRpb3MgKyAnLycgKyB1YmljYWNpb24gKyAnLycgKyBodWIsIGluZlByb2Nlc28pLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgZnVuY2lvblJlc3AocmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBmdW5jaW9uUmVzcCh7IFwiZXJyb3JcIjogZXJyb3IgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIEdlbmVyYXJBdXRvcml6YWNpb25DdWVudGFzKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGRhdGEpIHtcclxuICAgICAgICB2YXIgSW5mbztcclxuXHJcbiAgICAgICAgSW5mbyA9IGF3YWl0IFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKCdNMy9HZW5lcmFyQXV0b3JpemFjaW9uQ3VlbnRhcycsIGRhdGEpLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgcmV0dXJuIEluZm9cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYSBzaSBlbCBjb2RpZ28gaW5ncmVzYWRvIGNvcnJlc3BvbmRlIGFsIGRvY3VtZW50byB5IHNpIGVsIGNvZGlnbyBlc3RhIGVuIGVzdGFkbyBhY3Rpdm9cclxuICAgICAqIEBwYXJhbSBQb3N0U2VydmljZU0zIFxyXG4gICAgICogQHBhcmFtIGRhdGEgXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHZhbGlkYWNpb25BdXRvcml6YWNpb25NM0N1ZW50YXMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgZGF0YSkge1xyXG4gICAgICAgIHZhciBJbmZvO1xyXG5cclxuICAgICAgICBJbmZvID0gYXdhaXQgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoJ00zL3ZhbGlkYWNpb25BdXRvcml6YWNpb25NM0N1ZW50YXMnLCBkYXRhKS50b1Byb21pc2UoKVxyXG4gICAgICAgIHJldHVybiBJbmZvXHJcbiAgICB9XHJcblxyXG5cclxuICAgIGFzeW5jIFZlcmlmaWNhclBhZ29UYXJqZXRhQkJWQShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgc0lkS2V5OiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgakRhdGEgPSB7IFwiSWRrYXRpb3NcIjogc0lES2F0aW9zLCBcImlkS2V5XCI6IHNJZEtleSB9XHJcbiAgICAgICAgdmFyIEluZm87XHJcbiAgICAgICAgSW5mbyA9IGF3YWl0IFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTMvVmVyaWZpY2FyUGFnb1RhcmpldGFCQlZBJywgakRhdGEpLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgcmV0dXJuIEluZm87XHJcbiAgICB9Ly9FbmQgZ2V0X0luZm9Qcm9jZXNvXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGUyAyMDE5MDgxMzogUmV0b3JuYSBsb3MgY29kaWdvcyBkZSBsb3MgU0tQKHNrcFRvRmluZCkgeSBzdSByZXNwZWN0aXZvIHNpZ25pZmljYWRvIHBhcmEgdW4gcHJvZHVjdG8gZGFkb1xyXG4gICAgICogQHBhcmFtIGlkS2F0aW9zIFxyXG4gICAgICogQHBhcmFtIFBvc3RTZXJ2aWNlTTMgXHJcbiAgICAgKiBAcGFyYW0gZGF0YSBcclxuICAgICAqIEBwYXJhbSBmdW5jaW9uT0sgXHJcbiAgICAgKiBAcGFyYW0gZnVuY2lvbkVycm9yIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RGVzY3JpcGNpb25TS1BzKGlkS2F0aW9zOiBzdHJpbmcsIFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsXHJcbiAgICAgICAgZGF0YTogYW55LCBmdW5jaW9uT0s6IEZ1bmN0aW9uLCBmdW5jaW9uRXJyb3I6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIC8vbGV0IGRhdGEgPSB7XCJTS1AxXCI6XCJTS1AxXCIsIFNLUFRvRmluZDogMiB9fTtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKFwiTTNDb25zdWx0YXMvZ2V0RGVzY3JpcGNpb25TS1BzL1wiICsgaWRLYXRpb3MsIGRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgZnVuY2lvbk9LKGRhdGEuU0tQMSwgSlNPTi5wYXJzZShyZXNwLnRvU3RyaW5nKCkpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgZnVuY2lvbkVycm9yKGVyci5lcnJvci5NZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGFzeW5jIGdldFRvdGFsZXNDaWVycmVDYWphKHBvc3RTZXJ2aWNlOiBQb3N0U2VydmljZU0zLCBzSWRLYXRpb3M6IHN0cmluZywgc3ViaWNhY2lvbjogc3RyaW5nLCBzaHViOiBzdHJpbmcsIHN1c3VhcmlvOiBzdHJpbmcsIHNGZWNoYUk6IHN0cmluZywgc0ZlY2hhRjogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIHNlY29wY2lvbmVzOiBhbnk7XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7ICdpZEthdGlvcyc6IHNJZEthdGlvcywgJ3ViaWNhY2lvbic6IHN1YmljYWNpb24sICdodWInOiBzaHViLCAndXN1YXJpbyc6IHN1c3VhcmlvLCAnRmVjaGFJJzogc0ZlY2hhSSwgJ0ZlY2hhRic6IHNGZWNoYUYgfVxyXG4gICAgICAgIHNlY29wY2lvbmVzID0gYXdhaXQgcG9zdFNlcnZpY2UuZ2V0V2l0aEJvZHlNMygnTTMvZ2V0VG90YWxlc0NpZXJyZUNhamEnLCBkYXRhKS50b1Byb21pc2UoKVxyXG4gICAgICAgIHNlY29wY2lvbmVzID0gSlNPTi5wYXJzZShzZWNvcGNpb25lcylcclxuICAgICAgICByZXR1cm4gc2Vjb3BjaW9uZXNcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRDaWVycmVzeFViaWNhY2lvbihwb3N0U2VydmljZTogUG9zdFNlcnZpY2VNMywgc0lkS2F0aW9zOiBzdHJpbmcsIHN1YmljYWNpb246IHN0cmluZywgc0lkUHJvY2Vzbzogc3RyaW5nLCBzRmVjaGE6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBzZWNvcGNpb25lczogYW55O1xyXG4gICAgICAgIHZhciBkYXRhID0geyAnaWRLYXRpb3MnOiBzSWRLYXRpb3MsICd1YmljYWNpb24nOiBzdWJpY2FjaW9uLCAnaWRQcm9jZXNvJzogc0lkUHJvY2VzbywgJ0ZlY2hhJzogc0ZlY2hhIH1cclxuICAgICAgICBzZWNvcGNpb25lcyA9IGF3YWl0IHBvc3RTZXJ2aWNlLmdldFdpdGhCb2R5TTMoJ00zL2dldENpZXJyZXN4VWJpY2FjaW9uJywgZGF0YSkudG9Qcm9taXNlKClcclxuICAgICAgICBzZWNvcGNpb25lcyA9IEpTT04ucGFyc2Uoc2Vjb3BjaW9uZXMpXHJcbiAgICAgICAgcmV0dXJuIHNlY29wY2lvbmVzXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Q2llcnJlc3hFbXByZXNhKHBvc3RTZXJ2aWNlOiBQb3N0U2VydmljZU0zLCBzSWRLYXRpb3M6IHN0cmluZywgc0lkUHJvY2Vzbzogc3RyaW5nLCBzRmVjaGE6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBzZWNvcGNpb25lczogYW55O1xyXG4gICAgICAgIHZhciBkYXRhID0geyAnaWRLYXRpb3MnOiBzSWRLYXRpb3MsICdpZFByb2Nlc28nOiBzSWRQcm9jZXNvLCAnRmVjaGEnOiBzRmVjaGEgfVxyXG4gICAgICAgIHNlY29wY2lvbmVzID0gYXdhaXQgcG9zdFNlcnZpY2UuZ2V0V2l0aEJvZHlNMygnTTMvZ2V0Q2llcnJlc3hFbXByZXNhJywgZGF0YSkudG9Qcm9taXNlKClcclxuICAgICAgICBzZWNvcGNpb25lcyA9IEpTT04ucGFyc2Uoc2Vjb3BjaW9uZXMpXHJcbiAgICAgICAgcmV0dXJuIHNlY29wY2lvbmVzXHJcbiAgICB9XHJcblxyXG4gICAgLy9UcmFlIGVsIG0zcHJvY2Vzb3Mgc2VncHVuIGVsIGlkcHJlc3RhbW9cclxuICAgIHB1YmxpYyBzaW11bGFycGFnb0VubGluZWEoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIHNJZE0zOiBzdHJpbmcsIHNJZFByb2Nlc286IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTMvVmFsaWRhY2lvblBhZ29JbnRlZ3JhY2lvblRlc3QvJyArIHNJREthdGlvcyArICcvJyArIHNJZE0zICsgJy8nICsgc0lkUHJvY2Vzbykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZhbGlkYXJQcmRzTWlzbW9Qcm92ZWVkb3IoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIG5vbWJyZUFkaWNpb25hbFByb3ZlZWRvcjogc3RyaW5nLCBvTTNQcm9jZXNvczogTTNQcm9jZXNvcywgb0Z1bmNpb25SZXNwOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKFwiTTNNYWVzdHJvL3ZhbGlkYXJQcmRzTWlzbW9Qcm92ZWVkb3IvXCIgKyBpZF9rYXRpb3MgKyBcIi9cIiArIG5vbWJyZUFkaWNpb25hbFByb3ZlZWRvciwgb00zUHJvY2Vzb3MpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgb0Z1bmNpb25SZXNwKEpTT04ucGFyc2UoSlNPTi5wYXJzZShyZXNwWydfYm9keSddKS50b1N0cmluZygpKSlcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB2YWxpZGFyUHJkc01pc21vUHJvdmVlZG9yXCIpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uUmVzcChKU09OLnBhcnNlKEpTT04ucGFyc2UoZXJyWydfYm9keSddKS5NZXNzYWdlKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGFyUmVzdHJpY2Npb25JbnZOZWdhdGl2byhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgb00zUHJvY2Vzb3M6IE0zUHJvY2Vzb3MsIG9GdW5jaW9uUmVzcDogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMyhcIk0zTWFlc3Ryby92YWxpZGFyUmVzdHJpY2Npb25JbnZOZWdhdGl2by9cIiArIGlkX2thdGlvcywgb00zUHJvY2Vzb3MpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgb0Z1bmNpb25SZXNwKEpTT04ucGFyc2UoSlNPTi5wYXJzZShyZXNwWydfYm9keSddKS50b1N0cmluZygpKSlcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB2YWxpZGFyUmVzdHJpY2Npb25JbnZOZWdhdGl2b1wiKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvblJlc3AoSlNPTi5wYXJzZShKU09OLnBhcnNlKGVyclsnX2JvZHknXSkuTWVzc2FnZSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRhclJlc3RyaWNjaW9uSW52TmVnYXRpdm9WMihQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgcHJkczogYW55LCBvRnVuY2lvblJlc3A6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoXCJNM01hZXN0cm8vdmFsaWRhclJlc3RyaWNjaW9uSW52TmVnYXRpdm9WMi9cIiArIGlkX2thdGlvcywgcHJkcykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25SZXNwKEpTT04ucGFyc2UoSlNPTi5wYXJzZShyZXNwWydfYm9keSddKS50b1N0cmluZygpKSlcclxuICAgICAgICAgICAgfSBjYXRjaChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlc3ApXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvblJlc3AoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB2YWxpZGFyUmVzdHJpY2Npb25JbnZOZWdhdGl2b1YyXCIpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uUmVzcChKU09OLnBhcnNlKEpTT04ucGFyc2UoZXJyWydfYm9keSddKS5NZXNzYWdlKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGFyRWZlY3Rpdm9FbkNhamEoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIHViaWh1YjogYW55LCBvRnVuY2lvblJlc3A6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoXCJNM01hZXN0cm8vdmFsaWRhckVmZWN0aXZvRW5DYWphL1wiICsgaWRfa2F0aW9zLCB1YmlodWIpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uUmVzcChKU09OLnBhcnNlKEpTT04ucGFyc2UocmVzcFsnX2JvZHknXSkudG9TdHJpbmcoKSkpXHJcbiAgICAgICAgICAgIH0gY2F0Y2goZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXNwKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25SZXNwKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvciAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgdmFsaWRhckVmZWN0aXZvRW5DYWphXCIpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uUmVzcChKU09OLnBhcnNlKEpTT04ucGFyc2UoZXJyWydfYm9keSddKS5NZXNzYWdlKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvUHJkR2FzdG9zRW52aW8oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIG9NM1Byb2Nlc29zOiBNM1Byb2Nlc29zKSB7XHJcblxyXG4gICAgICAgIGxldCByZXNwID0gYXdhaXQgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoXCJNM01hZXN0cm8vZ2V0SW5mb1ByZEdhc3Rvc0VudmlvL1wiICsgaWRfa2F0aW9zLCBvTTNQcm9jZXNvcykudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5wYXJzZShyZXNwWydfYm9keSddKS50b1N0cmluZygpKS5SRVNQVUVTVEFcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYSB1bmEgc2FsZG94Y3VlbnRhIGFsZWF0b3JpbyBwb3IgZWwgdmFsb3IgZGFkb1xyXG4gICAgICogQHBhcmFtIFBvc3RTZXJ2aWNlTTMgXHJcbiAgICAgKiBAcGFyYW0gaWRrYXRpb3MgXHJcbiAgICAgKiBAcGFyYW0gZGF0YSA9IHtcInByb2Nlc29cIixwcm9jZXNvLFwidmFsb3JcIjp2YWxvcixcIm5vbWJyZURvY1wiOiBub21icmVEb2N9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBtM19nZW5lcmFyX00zU1hDX2FsZWF0b3JpbyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZGthdGlvczogc3RyaW5nLCBkYXRhOiBhbnkpIHtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJlc3AgPSBhd2FpdCBQb3N0U2VydmljZU0zLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMyhcIk0zL20zX2dlbmVyYXJfTTNTWENfYWxlYXRvcmlvL1wiICsgaWRrYXRpb3MsIGRhdGEpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnBhcnNlKHJlc3BbJ19ib2R5J10pLnRvU3RyaW5nKCkpLlJFU1BVRVNUQTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWN0dWFsaXphIHVuIGNvbmNlcHRvIGRlbCBNM19zYWxkb3NJdGVtVWJcclxuICAgICAqIEBwYXJhbSBQb3N0U2VydmljZU0zIFxyXG4gICAgICogQHBhcmFtIGlka2F0aW9zIFxyXG4gICAgICogQHBhcmFtIGRhdGEgXHJcbiAgICAgKiBAcGFyYW0gZnVuY2lvbk9LIFxyXG4gICAgICogQHBhcmFtIGZ1bmNpb25FcnJvciBcclxuICAgICAqL1xyXG4gICAgcHVibGljIE0zX2FjdHVhbGl6YXJDb25jZXB0b1NJVShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZGthdGlvczogc3RyaW5nLCBkYXRhOiBhbnksXHJcbiAgICAgICAgZnVuY2lvbk9LOiBGdW5jdGlvbiwgZnVuY2lvbkVycm9yOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKFwiTTMvTTNfYWN0dWFsaXphckNvbmNlcHRvU0lVL1wiICsgaWRrYXRpb3MsIGRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgZnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBmdW5jaW9uRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHByb2Nlc29BbENpZXJyZVViaWMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIGpEYXRhOiBhbnksIGZ1bmNpb25PSzogRnVuY3Rpb24sIGZ1bmNpb25FcnJvcjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMyhcIk0zL3Byb2Nlc29BbENpZXJyZVViaWMvXCIgKyBpZF9rYXRpb3MsIGpEYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIGZ1bmNpb25PSyhyZXNwKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3IgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHByb2Nlc29BbENpZXJyZVViaWNcIilcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgZnVuY2lvbkVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRfUHJvY2Vzb3NBYmllcnRvcyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgakRhdGE6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL2dldF9Qcm9jZXNvc0FiaWVydG9zLycgKyBzSURLYXRpb3MsIGpEYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soSlNPTi5wYXJzZShTdHJpbmcocmVzcCkpLlJFU1BVRVNUQSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvciAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZ2V0X1Byb2Nlc29zQWJpZXJ0b3NcIilcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgZ2V0X0luZm9Qcm9jZXNvXHJcblxyXG59XHJcbiJdfQ==
|