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.
@@ -1498,6 +1498,30 @@ export class ServiceM3Maestro {
1498
1498
  oFuncionResp(JSON.parse(JSON.parse(err['_body']).Message));
1499
1499
  });
1500
1500
  }
1501
+ /**
1502
+ * @param {?} PostServiceM3
1503
+ * @param {?} id_katios
1504
+ * @param {?} ubihub
1505
+ * @param {?} oFuncionResp
1506
+ * @return {?}
1507
+ */
1508
+ validarEfectivoEnCaja(PostServiceM3, id_katios, ubihub, oFuncionResp) {
1509
+ PostServiceM3.postServiceHttpResFullM3("M3Maestro/validarEfectivoEnCaja/" + id_katios, ubihub).subscribe(resp => {
1510
+ try {
1511
+ oFuncionResp(JSON.parse(JSON.parse(resp['_body']).toString()));
1512
+ }
1513
+ catch (e) {
1514
+ console.error(resp);
1515
+ console.error(e);
1516
+ oFuncionResp(e);
1517
+ }
1518
+ }, err => {
1519
+ //Ejecutar funcion de error
1520
+ console.error("Error validarEfectivoEnCaja");
1521
+ console.error(err);
1522
+ oFuncionResp(JSON.parse(JSON.parse(err['_body']).Message));
1523
+ });
1524
+ }
1501
1525
  /**
1502
1526
  * @param {?} PostServiceM3
1503
1527
  * @param {?} id_katios
@@ -1610,4 +1634,4 @@ tslib_1.__decorate([
1610
1634
  tslib_1.__metadata("design:returntype", void 0)
1611
1635
  ], ServiceM3Maestro.prototype, "cargarListPrdByGeneric", null);
1612
1636
 
1613
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTTNNYWVzdHJvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9zZi1yZWdsYW5lZ29jaW9tMy8iLCJzb3VyY2VzIjpbImxpYi9ybm0zL1NlcnZpY2VzL00zTWFlc3Ryby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUs3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXpDLE1BQU07SUFHRixpQkFBaUI7Ozs7Ozs7OztJQUdWLHVCQUF1QixDQUFDLGFBQTRCLEVBQUUsU0FBaUIsRUFBRSxTQUFpQixFQUM3RixVQUFvQixFQUFFLFdBQXFCOztRQUMzQyxJQUFJLElBQUksQ0FBQztRQUNULElBQUksR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQTtRQUNqQyxhQUFhLENBQUMsYUFBYSxDQUFDLDZCQUE2QixHQUFHLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFFMUYsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMzQyxFQUNHLEdBQUcsQ0FBQyxFQUFFOztZQUVGLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2xDLENBQUMsQ0FBQzs7Ozs7Ozs7OztJQUlKLHdCQUF3QixDQUFDLGFBQTRCLEVBQUUsU0FBaUIsRUFBRSxXQUFtQixFQUNoRyxVQUFvQixFQUFFLFdBQXFCO1FBQzNDLGFBQWEsQ0FBQyxLQUFLLENBQUMsOEJBQThCLEdB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UTs7NkRBb0I5QztBQXVCRDtJQUNrRCxtQkFBQSxRQUFRLEVBQUUsQ0FBQTs7NkNBRDFCLGFBQWEsa0NBQy9CLFFBQVEsRUFBZSxRQUFROzswREFZOUM7QUFFRDtJQUNrRCxtQkFBQSxRQUFRLEVBQUUsQ0FBQTs7NkNBRHRCLGFBQWEsa0NBQ25DLFFBQVEsRUFBZSxRQUFROzs4REFZOUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb3N0U2VydmljZU0zIH0gZnJvbSBcIi4uLy4uL0NvbmV4aW9uU1FML3Bvc3RzLnNlcnZpY2VcIjtcclxuLy9pbXBvcnQgeyBzZXNzaW9uV0U4IH0gZnJvbSBcIi4uLy4uLy4uL1Nlc3Npb24vc2Vzc2lvbi5jbGFzc1wiO1xyXG5pbXBvcnQgeyBGaWx0cm9zIH0gZnJvbSBcIi4uL01hZXN0cm8vZmlsdHJvc1wiO1xyXG5pbXBvcnQgeyBNM0NvdWNoTWFlc3RybyB9IGZyb20gXCIuLi9EYXRhL20zLWNvdWNoLW1hZXN0cm9cIjtcclxuaW1wb3J0IHsgVHlwZU0zUHJkR3JwIH0gZnJvbSBcIi4uL01hZXN0cm8vTTNQcmRHcnAudHlwZVwiO1xyXG5pbXBvcnQgeyBNM1ViaWNhY2lvbiB9IGZyb20gXCIuLi9NYWVzdHJvL1ViaWNhY2lvbi9NM1ViaWNhY2lvbi50eXBlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VMaXN0YVByZWNpbyB9IGZyb20gXCIuL20zLWxpc3RhLXByZWNpby5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VMb2FkTGlzdGFQcmVjaW8gfSBmcm9tIFwiLi9tMy1sb2FkLWwtcHJlY2lvLnNlcnZpY2VcIjtcclxuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgybVhbmd1bGFyX3BhY2thZ2VzX3BsYXRmb3JtX2Jyb3dzZXJfcGxhdGZvcm1fYnJvd3Nlcl9hIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgTTNQcm9jZXNvcyB9IGZyb20gXCIuLi9SZWdpc3Ryby9tMy1wcm9jZXNvc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlcnZpY2VNM01hZXN0cm8ge1xyXG5cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAgIC8vVHJhZSBlbCBtM3Byb2Nlc29zIHNlZ3B1biBlbCBpZHByZXN0YW1vXHJcbiAgICBwdWJsaWMgZ2V0TTNQcm9jZXNvc1BvckNyZWRpdG8oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIGlkUHJvY2Vzbzogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICB2YXIgZGF0YTtcclxuICAgICAgICBkYXRhID0geyAnaWRQcm9jZXNvJzogaWRQcm9jZXNvIH1cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zL2dldE0zUHJvY2Vzb3NQb3JDcmVkaXRvLycgKyBzSURLYXRpb3MsIGRhdGEpLnN1YnNjcmliZShyZXNwID0+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
1637
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTTNNYWVzdHJvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9zZi1yZWdsYW5lZ29jaW9tMy8iLCJzb3VyY2VzIjpbImxpYi9ybm0zL1NlcnZpY2VzL00zTWFlc3Ryby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUs3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXpDLE1BQU07SUFHRixpQkFBaUI7Ozs7Ozs7OztJQUdWLHVCQUF1QixDQUFDLGFBQTRCLEVBQUUsU0FBaUIsRUFBRSxTQUFpQixFQUM3RixVQUFvQixFQUFFLFdBQXFCOztRQUMzQyxJQUFJLElBQUksQ0FBQztRQUNULElBQUksR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQTtRQUNqQyxhQUFhLENBQUMsYUFBYSxDQUFDLDZCQUE2QixHQUFHLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFFMUYsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMzQyxFQUNHLEdBQUcsQ0FBQyxFQUFFOztZQUVGLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2xDLENBQUMsQ0FBQzs7Ozs7Ozs7OztJQUlKLHdCQUF3QixDQUFDLGFBQTRCLEVBQUUsU0FBaUIsRUFBRSxXQUFtQixFQUNoRyxVQUFvQixFQUFFLFdBQXFCO1FBQzNDLGFBQWEsQ0FBQyxLQUFLLENBQUMsOEJBQThCLEdB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QUFvQixDQUFDLGFBQTRCLEVBQUUsU0FBaUIsRUFBRSxLQUFVLEVBQ25GLFVBQW9CLEVBQUUsV0FBcUI7UUFFM0MsYUFBYSxDQUFDLGFBQWEsQ0FBQyxpQ0FBaUMsR0FBRyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFOztZQUUvRixVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNsRCxFQUNHLEdBQUcsQ0FBQyxFQUFFOztZQUVGLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtZQUMzQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2xCLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwQixDQUFDLENBQUM7O0NBR2Q7QUEzcENHO0lBQ2tELG1CQUFBLFFBQVEsRUFBRSxDQUFBLEVBQXNCLG1CQUFBLFFBQVEsRUFBRSxDQUFBLEVBQTBCLG1CQUFBLFFBQVEsRUFBRSxDQUFBLEVBQWtCLG1CQUFBLFFBQVEsRUFBRSxDQUFBOzs2Q0FEekgsYUFBYSxFQUFhLEtBQUssa0JBQ2xELFFBQVEsRUFBZSxRQUFROzsyREFlOUM7QUFJRDtJQUNrRCxtQkFBQSxRQUFRLEVBQUUsQ0FBQSxFQUFzQixtQkFBQSxRQUFRLEVBQUUsQ0FBQTs7NkNBRHZELGFBQWEsa0NBQ2xDLFFBQVEsRUFBZSxRQUFROzs2REFvQjlDO0FBdUJEO0lBQ2tELG1CQUFBLFFBQVEsRUFBRSxDQUFBOzs2Q0FEMUIsYUFBYSxrQ0FDL0IsUUFBUSxFQUFlLFFBQVE7OzBEQVk5QztBQUVEO0lBQ2tELG1CQUFBLFFBQVEsRUFBRSxDQUFBOzs2Q0FEdEIsYUFBYSxrQ0FDbkMsUUFBUSxFQUFlLFFBQVE7OzhEQVk5QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvc3RTZXJ2aWNlTTMgfSBmcm9tIFwiLi4vLi4vQ29uZXhpb25TUUwvcG9zdHMuc2VydmljZVwiO1xyXG4vL2ltcG9ydCB7IHNlc3Npb25XRTggfSBmcm9tIFwiLi4vLi4vLi4vU2Vzc2lvbi9zZXNzaW9uLmNsYXNzXCI7XHJcbmltcG9ydCB7IEZpbHRyb3MgfSBmcm9tIFwiLi4vTWFlc3Ryby9maWx0cm9zXCI7XHJcbmltcG9ydCB7IE0zQ291Y2hNYWVzdHJvIH0gZnJvbSBcIi4uL0RhdGEvbTMtY291Y2gtbWFlc3Ryb1wiO1xyXG5pbXBvcnQgeyBUeXBlTTNQcmRHcnAgfSBmcm9tIFwiLi4vTWFlc3Ryby9NM1ByZEdycC50eXBlXCI7XHJcbmltcG9ydCB7IE0zVWJpY2FjaW9uIH0gZnJvbSBcIi4uL01hZXN0cm8vVWJpY2FjaW9uL00zVWJpY2FjaW9uLnR5cGVcIjtcclxuaW1wb3J0IHsgU2VydmljZUxpc3RhUHJlY2lvIH0gZnJvbSBcIi4vbTMtbGlzdGEtcHJlY2lvLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2VydmljZUxvYWRMaXN0YVByZWNpbyB9IGZyb20gXCIuL20zLWxvYWQtbC1wcmVjaW8uc2VydmljZVwiO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gXCJsb2Rhc2hcIjtcclxuaW1wb3J0IHsgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyDJtWFuZ3VsYXJfcGFja2FnZXNfcGxhdGZvcm1fYnJvd3Nlcl9wbGF0Zm9ybV9icm93c2VyX2EgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQgeyBNM1Byb2Nlc29zIH0gZnJvbSBcIi4uL1JlZ2lzdHJvL20zLXByb2Nlc29zXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2VydmljZU0zTWFlc3RybyB7XHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgLy9UcmFlIGVsIG0zcHJvY2Vzb3Mgc2VncHVuIGVsIGlkcHJlc3RhbW9cclxuICAgIHB1YmxpYyBnZXRNM1Byb2Nlc29zUG9yQ3JlZGl0byhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgaWRQcm9jZXNvOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIHZhciBkYXRhO1xyXG4gICAgICAgIGRhdGEgPSB7ICdpZFByb2Nlc28nOiBpZFByb2Nlc28gfVxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTMvZ2V0TTNQcm9jZXNvc1BvckNyZWRpdG8vJyArIHNJREthdGlvcywgZGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG5cclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhKU09OLnBhcnNlKHJlc3AudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVyci5lcnJvci5NZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgXHJcblxyXG4gICAgLy9UcmFlIGVsIG0zcHJvY2Vzb3Mgc2VncHVuIGVsIGlkcHJlc3RhbW9cclxuICAgIHB1YmxpYyBnZXRNM1Byb2Nlc29CeUlkUHJlc3RhbW8oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIHNJZFByZXN0YW1vOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zL2dldE0zUHJvY2Vzb0J5SWRQcmVzdGFtby8nICsgc0lES2F0aW9zICsgJy8nICsgc0lkUHJlc3RhbW8pLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgdmFyIG9NM1Byb2Nlc29zOiBhbnk7XHJcbiAgICAgICAgICAgIG9NM1Byb2Nlc29zID0gcmVzcDtcclxuXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0sob00zUHJvY2Vzb3MpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIFxyXG5cclxuICAgIC8vcmFlIGVsIFRJUE8sIFNLUDEsIE5PTUJSRSBkZSBsYSB0YWJsYSBwcmRncnBcclxuICAgIHB1YmxpYyBtM0dldFBSREdSUChQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL2dldE0zUFJER1JQLycgKyBzSURLYXRpb3MpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuXHJcbiAgICAgICAgICAgIHZhciBvRGF0YSA9IEpTT04ucGFyc2UocmVzcCk7XHJcblxyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKG9EYXRhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBcclxuXHJcblxyXG4gICAgLy9PYnRlbmVyIGxhIGNhbnRpZGFkIGRpc3BvbmlibGUgZGUgcHJvZHVjdG8sIHRlbmllbmRvIGVuIGN1ZW50YSBlbCBTS1AxIHkgbGEgdWJpY2FjacOzbi5cclxuICAgIC8vTGEgZGF0YSBkZWJlIHRlbmVyIHVuYSBlc3RydWN0dXJhOiB7XCJVQklDQUNJT05cIjpcIjExMTFcIiwgXCJTS1AxXCI6XCI5OTk5YVwifVxyXG4gICAgcHVibGljIE0zR2V0Q2FudGlkYWRCeVNLUDEoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIG9EYXRhU2VuZDogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9NM0dldENhbnRpZGFkQnlTS1AxLycgKyBzSURLYXRpb3MsIG9EYXRhU2VuZCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG5cclxuICAgICAgICAgICAgdmFyIG9EYXRhID0gSlNPTi5wYXJzZShyZXNwLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICB2YXIgZ29EYXRhRGlzcDogQXJyYXk8YW55PjtcclxuICAgICAgICAgICAgaWYgKG9EYXRhLlJFU1BVRVNUQS5ESVNQT05JQklMSURBRC5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgLy9ObyBlcyBhcnJheVxyXG4gICAgICAgICAgICAgICAgZ29EYXRhRGlzcCA9IG5ldyBBcnJheTxhbnk+KG9EYXRhLlJFU1BVRVNUQS5ESVNQT05JQklMSURBRCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBnb0RhdGFEaXNwID0gb0RhdGEuUkVTUFVFU1RBLkRJU1BPTklCSUxJREFEO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGdvRGF0YURpc3ApO1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKGdvRGF0YURpc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVyci5lcnJvci5NZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgXHJcblxyXG5cclxuXHJcbiAgICAvL09idGVuZXIgbGEgbGlzdGEgZGUgcHJvZHVjdG8sIHRlbmllbmRvIGVuIGN1ZW50YSwgdW4gYXJyYXkgZGUgZmlsdHJvcy5cclxuICAgIEdldExpc3RhUHJkWEZpbHRyb3MoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgb2xGaWx0cm9zOiBBcnJheTxGaWx0cm9zPiwgc0lETGlzdGE6IHN0cmluZywgc0lES2F0aW9zOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbiwgQE9wdGlvbmFsKCkgaWRVYmljYWNpb24gPSBcIi0xXCIsIEBPcHRpb25hbCgpIGFwbFVsdGltb0ZpbHRybyA9IHRydWUsIEBPcHRpb25hbCgpIHRvcExpbWl0ID0gXCIwXCIsIEBPcHRpb25hbCgpIGZpbHRyYXJJbnZVYmljID0gXCIwXCIpIHtcclxuICAgICAgICB2YXIgb0RhdGFTZW5kO1xyXG4gICAgICAgIG9EYXRhU2VuZCA9IHsgXCJGaWx0cm9zXCI6IEpTT04uc3RyaW5naWZ5KG9sRmlsdHJvcyksIFwiSWRMaXN0YVwiOiBzSURMaXN0YSwgXCJJZFViaWNhY2lvblwiOiBpZFViaWNhY2lvbiwgXCJhcGxVbHRpbW9GaWx0cm9cIjogYXBsVWx0aW1vRmlsdHJvLCBcInRvcExpbWl0XCI6IHRvcExpbWl0LCBcImZpbHRyYXJJbnZVYmljXCI6IGZpbHRyYXJJbnZVYmljIH07XHJcbiAgICAgICAgaWYgKG9sRmlsdHJvcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL0dldF9MaXN0UFJERmlsdHJvcy8nICsgc0lES2F0aW9zLCBvRGF0YVNlbmQpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3AsIG9sRmlsdHJvcyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVyci5lcnJvci5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uRXJyKFwiTm8gaGF5IGZpbHRyb3MgcGFyYSBsYSBidXNxdWVkYVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vT2J0ZW5lciBsaXN0YSBkZSBwcm9kdWN0b3MsIHNlZ3VuIGxhIGNhdGVnb3JpYS5cclxuICAgIEdldExpc3RhUHJkWENhdGVnb3JpYShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzQ2F0ZWdvcmlhOiBzdHJpbmcsIG9EYXRhQ2xhc2lmaWNhY2lvbiwgSWRMaXN0YTogc3RyaW5nLCBzSURLYXRpb3M6IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uLCBAT3B0aW9uYWwoKSBpZFViaWNhY2lvbiA9IFwiLTFcIiwgQE9wdGlvbmFsKCkgZmlsdHJhckludlViaWM6IHN0cmluZyA9IFwiMFwiKSB7XHJcbiAgICAgICAgdmFyIG9sRmlsdHJvczogQXJyYXk8RmlsdHJvcz47XHJcbiAgICAgICAgdmFyIG9EYXRhU2VuZDtcclxuICAgICAgICBvbEZpbHRyb3MgPSB0aGlzLkZpbmRGaWx0ZXJJbkNsYXNpZmljYWNpb24oc0NhdGVnb3JpYSwgc0lES2F0aW9zLCBvRGF0YUNsYXNpZmljYWNpb24pO1xyXG5cclxuICAgICAgICBvRGF0YVNlbmQgPSB7IFwiRmlsdHJvc1wiOiBKU09OLnN0cmluZ2lmeShvbEZpbHRyb3MpLCBcIklkTGlzdGFcIjogSWRMaXN0YSwgXCJJZFViaWNhY2lvblwiOiBpZFViaWNhY2lvbiwgXCJmaWx0cmFySW52VWJpY1wiOiBmaWx0cmFySW52VWJpYyB9O1xyXG4gICAgICAgIGlmIChvbEZpbHRyb3MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9HZXRfTGlzdFBSREZpbHRyb3MvJyArIHNJREthdGlvcywgb0RhdGFTZW5kKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwLCBvbEZpbHRyb3MpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIuZXJyb3IuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyLmVycm9yLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb0Z1bmNpb25FcnIoXCJObyBoYXkgZmlsdHJvcyBwYXJhIGxhIGJ1c3F1ZWRhXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9Ly9FbmQgR2V0TGlzdGFQcmRYQ2F0ZWdvcmlhXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIC8vT2J0ZW5lciBsaXN0YSBkZSBwcm9kdWN0b3MsIHNlZ3VuIGxhIGNhdGVnb3JpYS5cclxuICAgIEdldExpc3RhUHJkWENhdGVnb3JpYVdpdGhPdXRGaWx0ZXJzKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNDYXRlZ29yaWE6IHN0cmluZywgc0lES2F0aW9zOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vTTNHZXRMaXN0YVByb2RCeUNsYXNpZmljYWNpb24vJyArIHNJREthdGlvcyArICcvJyArIHNDYXRlZ29yaWEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwLCBudWxsKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBHZXRMaXN0YVByZFhDYXRlZ29yaWFcclxuXHJcblxyXG5cclxuICAgIC8vT2J0ZW5lciBsaXN0YSBkZSBwcm9kdWN0b3MsIHNlZ3VuIGVsIG5vbWJyZSBvIGRlc2NyaXBjacOzbi5cclxuICAgIEdldExpc3RhUHJkWE5vbWJyZShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzTm9tYnJlOiBzdHJpbmcsIGlkVWJpY2FjaW9uOiBzdHJpbmcsIHNJREthdGlvczogc3RyaW5nLCBzSURMaXN0YTogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24sIEBPcHRpb25hbCgpIGZpbHRyYXJJbnZVYmljOiBzdHJpbmcgPSBcIjBcIikge1xyXG5cclxuICAgICAgICB2YXIgb0RhdGEgPSB7IFwiSWRMaXN0YVwiOiBzSURMaXN0YSwgXCJpZFViaWNhY2lvblwiOiBpZFViaWNhY2lvbiwgXCJmaWx0cmFySW52VWJpY1wiOiBmaWx0cmFySW52VWJpYyB9O1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL00zR2V0TGlzdGFQcm9kQnlOb21icmUvJyArIHNJREthdGlvcyArICcvJyArIHNOb21icmUsIG9EYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKEpTT04ucGFyc2UoZXJyLl9ib2R5KS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FyZ2FyTGlzdFByZEJ5R2VuZXJpYyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzTm9tYnJlOiBzdHJpbmcsIGlkVWJpY2FjaW9uOiBzdHJpbmcsIHNJREthdGlvczogc3RyaW5nLCBzSURMaXN0YTogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24sIEBPcHRpb25hbCgpIGZpbHRyYXJJbnZVYmljOiBzdHJpbmcgPSBcIjBcIikge1xyXG5cclxuICAgICAgICB2YXIgb0RhdGEgPSB7IFwiSWRMaXN0YVwiOiBzSURMaXN0YSwgXCJpZFViaWNhY2lvblwiOiBpZFViaWNhY2lvbiwgXCJmaWx0cmFySW52VWJpY1wiOiBmaWx0cmFySW52VWJpYyB9O1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL2Nhcmdhckxpc3RQcmRCeUdlbmVyaWMvJyArIHNJREthdGlvcyArICcvJyArIHNOb21icmUsIG9EYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVyci5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVyci5lcnJvcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vY2FyZ2FyIGluZm9ybWFjaW9uIGRlIGNsYXNpZmljYWNpb25cclxuICAgIGNhcmdhckluZm9DbGFzaWZpY2FjaW9uKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBqc29uUmVzcCxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIC8vdmFyIG9zZXNzaW9uV0U4ID0gbmV3IHNlc3Npb25XRTgoKTtcclxuXHJcbiAgICAgICAgLy9qc29uUmVzcCA9IG9zZXNzaW9uV0U4LkdldERhdGFDTEFTSUZJQ0FDSU9OKHNJREthdGlvcyk7XHJcbiAgICAgICAgaWYgKGpzb25SZXNwID09PSB1bmRlZmluZWQgfHwganNvblJlc3AgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKFwiTTNNYWVzdHJvL00zR2V0Q2xhc2lmaWNhY2lvbi9cIiArIHNJREthdGlvcykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAgICAganNvblJlc3AgPSBKU09OLnBhcnNlKHJlc3ApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5WYWxpZGFyQXJyYXlDbGFzaWZpY2FjaW9uKGpzb25SZXNwKTtcclxuICAgICAgICAgICAgICAgIC8vb3Nlc3Npb25XRTguU2V0RGF0YUNMQVNJRklDQUNJT04oanNvblJlc3AsIHNJREthdGlvcyk7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25PSyhqc29uUmVzcCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhqc29uUmVzcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfS8vRW5kIGNhcmdhckluZm9DbGFzaWZpY2FjaW9uXHJcblxyXG4gICAgLy9WYWxpZGFyIHF1ZSBsYSBjbGFzaWZpY2FjaW9uLCBlc3RlbiBjb21vIGFycmF5LlxyXG4gICAgVmFsaWRhckFycmF5Q2xhc2lmaWNhY2lvbihvRGF0YUNsYXMpIHtcclxuICAgICAgICB0aGlzLlJlY3Vyc2l2ZUNvbnZlcnRBcnJheShvRGF0YUNsYXMuUkVTUFVFU1RBLkNMQVNJRklDQUNJT05FUyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vQXBsaWNhciBmaWx0cm9zIGEgbGEgY2F0ZWdvcmlhIGVudHJhbnRlLlxyXG4gICAgRmluZEZpbHRlckluQ2xhc2lmaWNhY2lvbihzQ2xhc0ZpbmQ6IHN0cmluZywgc0lES2F0aW9zOiBzdHJpbmcsIG9EYXRhQ2xhc2lmaWNhY2lvbikge1xyXG4gICAgICAgIHZhciBzQ2xhc2lmaWNhY2lvbjogc3RyaW5nID0gXCJcIjtcclxuICAgICAgICB2YXIgb0RhdGFGaWx0cmFkYTtcclxuICAgICAgICAvL3ZhciBvc2Vzc2lvbldFOCA9IG5ldyBzZXNzaW9uV0U4KCk7XHJcbiAgICAgICAgdmFyIG9sRmlsdHJvcyA9IG5ldyBBcnJheTxGaWx0cm9zPigpO1xyXG4gICAgICAgIHZhciBvRmlsdHJvczogRmlsdHJvcztcclxuICAgICAgICB2YXIgZmlsdHJvQXRyaWJ1dG86IHN0cmluZztcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhzQ2xhc0ZpbmQpO1xyXG4gICAgICAgIC8vb0RhdGFDbGFzaWZpY2FjaW9uID0gb3Nlc3Npb25XRTguR2V0RGF0YUNMQVNJRklDQUNJT04oc0lES2F0aW9zKTtcclxuXHJcbiAgICAgICAgb0RhdGFGaWx0cmFkYSA9IG9EYXRhQ2xhc2lmaWNhY2lvbi5SRVNQVUVTVEEuQ0xBU0lGSUNBQ0lPTkVTO1xyXG5cclxuICAgICAgICBpZiAoc0NsYXNGaW5kLmxlbmd0aCAlIDMgPT0gMCkge1xyXG4gICAgICAgICAgICB3aGlsZSAoc0NsYXNGaW5kICE9IFwiXCIpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBzQ2xhc2lmaWNhY2lvbiA9IHNDbGFzaWZpY2FjaW9uICsgc0NsYXNGaW5kLnN1YnN0cmluZygwLCAzKTtcclxuICAgICAgICAgICAgICAgIHNDbGFzRmluZCA9IHNDbGFzRmluZC5zdWJzdHJpbmcoMyk7XHJcbiAgICAgICAgICAgICAgICBvRGF0YUZpbHRyYWRhID0gb0RhdGFGaWx0cmFkYS5DQVRFR09SSUEuZmluZChmaWx0cm8gPT4gZmlsdHJvLkNMQVNJRklDQUNJT04udG9TdHJpbmcoKSA9PSBzQ2xhc2lmaWNhY2lvbi50b1N0cmluZygpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmaWx0cm9BdHJpYnV0byA9IG9EYXRhRmlsdHJhZGEuQVRSSUJVVE87XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZpbHRyb0F0cmlidXRvLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoXCJST09UXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb0ZpbHRyb3MgPSBuZXcgRmlsdHJvcyhvRGF0YUZpbHRyYWRhLkFUUklCVVRPLCBvRGF0YUZpbHRyYWRhLkRlc2NyaXBjaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBvbEZpbHRyb3MucHVzaChvRmlsdHJvcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vb0RhdGFSZXNwQ2xhID0gdGhpcy5SZWN1cnNpdmVDbGFzaWZpY2FjaW9uKG9EYXRhQ2xhc2lmaWNhY2lvbi5SRVNQVUVTVEEuQ0xBU0lGSUNBQ0lPTkVTLkNBVEVHT1JJQSwgc0NsYXNGaW5kKTtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2cob0RhdGFSZXNwQ2xhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2xGaWx0cm9zO1xyXG4gICAgfVxyXG5cclxuICAgIC8vUmVjdXJzaXZpZGFkLCBwYXJhIHZhbGlkYXIgcXVlIHRvZG9zIGxvcyBub2Rvcywgc2VhbiB0aXBvIGFycmF5XHJcbiAgICBSZWN1cnNpdmVDb252ZXJ0QXJyYXkob0RhdGFDbGFzKSB7XHJcbiAgICAgICAgaWYgKG9EYXRhQ2xhcy5DQVRFR09SSUEgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAob0RhdGFDbGFzLkNBVEVHT1JJQS5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgb0RhdGFDbGFzLkNBVEVHT1JJQSA9IG5ldyBBcnJheShvRGF0YUNsYXMuQ0FURUdPUklBKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUmVjdXJzaXZlQ29udmVydEFycmF5KG9EYXRhQ2xhcy5DQVRFR09SSUFbMF0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb0RhdGFDbGFzLkNBVEVHT1JJQS5mb3JFYWNoKGNsYXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUmVjdXJzaXZlQ29udmVydEFycmF5KGNsYXMpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9BZGljaW9uYSB1biBwcm9kdWN0b1xyXG4gICAgbTNBZGRQcm9kdWN0byhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgdGRvY1VBY3Rpdm86IHN0cmluZywgbmRvY1VBY3Rpdm86IHN0cmluZywgb00zUHJkR3JwOiBUeXBlTTNQcmRHcnAsIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24sIGRpc2FibGVkV2ViOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICB2YXIgZGF0YTtcclxuICAgICAgICBkYXRhID0geyAnc1Rkb2NVc3VhcmlvJzogdGRvY1VBY3Rpdm8sICdzTmRvY1VzdWFyaW8nOiBuZG9jVUFjdGl2bywgJ29NM1ByZEdycCc6IG9NM1ByZEdycCwgJ2Rpc2FibGVkV2ViJzogZGlzYWJsZWRXZWIgfTtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoXCJNM01hZXN0cm8vYWRkUHJvZHVjdG8vXCIgKyBzSURLYXRpb3MudHJpbSgpLCBkYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL09idGVuZXIgcHJvZHVjdG8gcG9yIFNLUDEuXHJcbiAgICBNM0dldFByb2R1Y3RvQnlTS1AxKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBkYXRhOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbiwgb0RhdGFVc2VyOiBhbnkpIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoXCJNM01hZXN0cm8vTTNHZXRQcm9kdWN0b0J5U0tQMS9cIiArIHNJREthdGlvcywgZGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICB2YXIgcHJvZHVjdG86IGFueSA9IHJlc3A7XHJcbiAgICAgICAgICAgIHZhciBvU2VydmljZUxvYWRMaXN0YVByZWNpbyA9IG5ldyBTZXJ2aWNlTG9hZExpc3RhUHJlY2lvKHNJREthdGlvcyk7XHJcbiAgICAgICAgICAgIG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvLkFzaWduYXJMaXN0YVByZWNpbyhwcm9kdWN0bywgb0RhdGFVc2VyLCBQb3N0U2VydmljZU0zKS50aGVuKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25PSyhwcm9kdWN0byk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy9PYnRlbmVyIHByb2R1Y3RvIHJhbmRvbSBwb3IgU0tQMS5cclxuICAgIE0zR2V0UHJvZHVjdG9SYW5kb21CeVNLUDEoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIGRhdGE6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uLCBvRGF0YVVzZXI6IGFueSkge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMyhcIk0zTWFlc3Ryby9NM0dldFByb2R1Y3RvUmFuZG9tQnlTS1AxL1wiICsgc0lES2F0aW9zLCBkYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vT2J0ZW5lciBwcm9kdWN0byBwb3IgU0tQMS5cclxuICAgIE0zR2V0Q2F0QXNvY2lhZGFzQnlTS1AxKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBza3AxOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoXCJNM01hZXN0cm8vTTNHZXRDYXRBc29jaWFkYXNCeVNLUDEvXCIgKyBzSURLYXRpb3MgKyAnLycgKyBza3AxKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8vR2V0IEltYWdlbmVzIGVudmlhbmRvIGVuIGxhIG9EYXRhOiB7XCJQYXRoXCI6XCJ4eHhcIiwgXCJTS1VcIjpcIlNLVXh4eFwifVxyXG4gICAgcHVibGljIE0zR2V0SW1hZ2VuZXNCeVBhdGgoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIG9EYXRhOiBhbnksIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9HZXRfTTNNdWx0aW1lZGlhQnlQYXRoLycgKyBzSURLYXRpb3MsIG9EYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVyci5lcnJvci5NZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9vYnRlbmVyIGluZm9ybWFjaW9uIGRlIHBsYW50aWxsYXMsIGRlc2RlIHNlcnZpZG9yLi4uIFxyXG4gICAgR2V0X00zU0tQbGFudGlsbGFCeVNLVUlEKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBTS1VJRDogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKFwiTTNNYWVzdHJvL0dldF9NM1NLUGxhbnRpbGxhQnlTS1VJRC9cIiArIHNJREthdGlvcyArIFwiL1wiICsgU0tVSUQpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL09idGVuZXIgaW5mb3JtYWNpw7NuIGRlIHByb2R1Y3RvcywgZGVzZGUgY29kaWdvIGRlIGJhcnJhc1xyXG4gICAgR2V0SW5mb0J5RmlsdGVyQ29kZShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgc0ZpbHRlckNvZGU6IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdmFyIG9EYXRhID0geyBcIkZJTFRFUkNPREVcIjogc0ZpbHRlckNvZGUgfTtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vTTNHZXRTS1AxUHJkc0J5RmlsdGVyc0NvZGUvJyArIHNJREthdGlvcywgb0RhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhKU09OLnBhcnNlKHJlc3AudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIuZXJyb3IuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIEdldEluZm9CeUZpbHRlckNvZGUgXHJcblxyXG4gICAgLy9PYnRpZW5lIGVsIG9iamV0byBNM1ViaWNhY2lvbmVzIHBhcmEgbGEgdWJpY2FjaW9uIHkgaWRrYXRpb3MgZGFkb3NcclxuICAgIGdldF9NM1ViaWNhY2lvbmVzKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBzSWRVYmljYWNpb246IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9nZXRfTTNVYmljYWNpb25lcy8nICsgc0lES2F0aW9zICsgJy8nICsgc0lkVWJpY2FjaW9uKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIGdldF9NM1ViaWNhY2lvbmVzXHJcblxyXG4gICAgLy9PYnRpZW5lIGVsIG9iamV0byBNM1ViaWNhY2lvbmVzIHBhcmEgbGEgdWJpY2FjaW9uIHkgaWRrYXRpb3MgZGFkb3NcclxuICAgIGdldF9NM1ViaWNhY2lvbmVzQ29tcGxldGEoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIHNJZFViaWNhY2lvbjogc3RyaW5nLCBzSWRIdWI6IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNM1dpdGhUaW1lT3V0KCdNM01hZXN0cm8vZ2V0X00zVWJpY2FjaW9uZXNDb21wbGV0YS8nICsgc0lES2F0aW9zICsgJy8nICsgc0lkVWJpY2FjaW9uICsgJy8nICsgc0lkSHViLCAxMDAwMCkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBnZXRfTTNVYmljYWNpb25lc0NvbXBsZXRhXHJcblxyXG5cclxuICAgIC8vcmFlIGVsIHByb2R1Y3RvIGRlIGFjdWVyZG8gYWwgU0tVXHJcbiAgICBwdWJsaWMgTTNHZXRQcm9kdWN0b0J5U0tVKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBkYXRhOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbiwgb0RhdGFVc2VyOiBhbnkpIHtcclxuICAgICAgICB2YXIgb1NlcnZpY2VMb2FkTGlzdGFQcmVjaW8gPSBuZXcgU2VydmljZUxvYWRMaXN0YVByZWNpbyhzSURLYXRpb3MpO1xyXG5cclxuICAgICAgICBpZiAob0RhdGFVc2VyLlVzdWFyaW9TaXN0ZW1hLkZlY2hhUHJlY2lvKSBkYXRhLmZlY2hhTFByZWNpbyA9IG9EYXRhVXNlci5Vc3VhcmlvU2lzdGVtYS5GZWNoYVByZWNpbztcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coUG9zdFNlcnZpY2VNMyk7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vTTNHZXRQcm9kdWN0b0J5U0tVLycgKyBzSURLYXRpb3MsIGRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgdmFyIG9Qcm9kdWN0bzogYW55ID0gcmVzcDtcclxuICAgICAgICAgICAgb1NlcnZpY2VMb2FkTGlzdGFQcmVjaW8uQXNpZ25hckxpc3RhUHJlY2lvKG9Qcm9kdWN0bywgb0RhdGFVc2VyLCBQb3N0U2VydmljZU0zKS50aGVuKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25PSyhvUHJvZHVjdG8pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKEpTT04ucGFyc2UoZXJyLl9ib2R5KS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vcmFlIGVsIHByb2R1Y3RvIGRlIGFjdWVyZG8gYWwgU0tVXHJcbiAgICBhc3luYyBNM0dldFByb2R1Y3RvQnlTS1VBc3luYyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgc1NLVTogc3RyaW5nLFxyXG4gICAgICAgIG9EYXRhVXNlcjogYW55LCBVYmljYWNpb246IHN0cmluZyA9IFwiLTFcIiwgc0FwbEV4Yzogc3RyaW5nID0gXCIxXCIpIHtcclxuICAgICAgICB2YXIgZGF0YTtcclxuICAgICAgICB2YXIgcmVzcDtcclxuICAgICAgICB2YXIgb1NlcnZpY2VMb2FkTGlzdGFQcmVjaW8gPSBuZXcgU2VydmljZUxvYWRMaXN0YVByZWNpbyhzSURLYXRpb3MpO1xyXG5cclxuICAgICAgICBkYXRhID0geyAnU0tVJzogc1NLVSwgXCJVQklDQUNJT05cIjogVWJpY2FjaW9uID09IFwiLTFcIiA/IG9EYXRhVXNlci5Vc3VhcmlvU2lzdGVtYS5VQklDQUNJT04gOiBVYmljYWNpb24sICdBcGxFeGMnOiBzQXBsRXhjIH07XHJcbiAgICAgICAgaWYgKG9EYXRhVXNlci5Vc3VhcmlvU2lzdGVtYS5GZWNoYVByZWNpbykgZGF0YS5mZWNoYUxQcmVjaW8gPSBvRGF0YVVzZXIuVXN1YXJpb1Npc3RlbWEuRmVjaGFQcmVjaW87XHJcblxyXG4gICAgICAgIHJlc3AgPSBhd2FpdCBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9NM0dldFByb2R1Y3RvQnlTS1UvJyArIHNJREthdGlvcywgZGF0YSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgYXdhaXQgb1NlcnZpY2VMb2FkTGlzdGFQcmVjaW8uQXNpZ25hckxpc3RhUHJlY2lvKHJlc3AsIG9EYXRhVXNlciwgUG9zdFNlcnZpY2VNMyk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3A7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vT2J0ZW5lciBwcm9kdWN0byBlc3BlY2ZpY28gdGVuaWVuZG8gZW4gY3VlbnRhIGNvZGlnby5cclxuICAgIGFzeW5jIEdldF9NM1Byb2R1Y3RvRXNwZWNCeUNvZGVBc3luYyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgZGF0YTogYW55LCBvRGF0YVVzZXI6IGFueSkge1xyXG4gICAgICAgIHZhciBvU2VydmljZUxvYWRMaXN0YVByZWNpbyA9IG5ldyBTZXJ2aWNlTG9hZExpc3RhUHJlY2lvKHNJREthdGlvcyk7XHJcbiAgICAgICAgdmFyIG9Qcm9kdWN0bzogYW55O1xyXG5cclxuICAgICAgICBpZiAob0RhdGFVc2VyLlVzdWFyaW9TaXN0ZW1hLkZlY2hhUHJlY2lvKSBkYXRhLmZlY2hhTFByZWNpbyA9IG9EYXRhVXNlci5Vc3VhcmlvU2lzdGVtYS5GZWNoYVByZWNpbztcclxuXHJcbiAgICAgICAgb1Byb2R1Y3RvID0gYXdhaXQgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKFwiTTNNYWVzdHJvL0dldF9NM1Byb2R1Y3RvRXNwZWNCeUNvZGUvXCIgKyBzSURLYXRpb3MsIGRhdGEpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGF3YWl0IG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvLkFzaWduYXJMaXN0YVByZWNpbyhvUHJvZHVjdG8sIG9EYXRhVXNlciwgUG9zdFNlcnZpY2VNMyk7XHJcbiAgICAgICAgcmV0dXJuIG9Qcm9kdWN0bztcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9UcmFlIGxvcyByZWdpc3Ryb3MgcXVlIHNlIGVuY3VlbnRyZW4gZW4gTTNQcm9jZXNvcyBxdWUgc2UgZW5jdWVudHJlbiBjb24gZXN0YWRvZ2VuZXJhbCBwcm9jZXNvXHJcbiAgICBNM2dldFJlZ2lzdHJvc0VuUHJvY2VzbyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgaWRQcm9jZXNvOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIHZhciBkYXRhO1xyXG4gICAgICAgIGRhdGEgPSB7ICdpZFByb2Nlc28nOiBpZFByb2Nlc28gfVxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTMvZ2V0X1JlZ2lzdHJvc0VuUHJvY2Vzby8nICsgc0lES2F0aW9zLCBkYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soSlNPTi5wYXJzZShyZXNwLnRvU3RyaW5nKCkpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyLl9iU29keSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vT2J0aWVuZSBlbCB0b3AgMjAgZGUgcHJvZHVjdG9zIHF1ZSBjb2luY2lkYWQgY29uIGVsIHNOb21icmUgaW5ncmVzYWRvXHJcbiAgICBnZXRfTTNQcmRHcnBCeU5vbWJyZShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgc05vbWJyZTogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL2dldF9NM1ByZEdycEJ5Tm9tYnJlLycgKyBzSURLYXRpb3MgKyAnLycgKyBzTm9tYnJlKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcblxyXG4gICAgICAgICAgICB2YXIgalJlc3AgPSBKU09OLnBhcnNlKHJlc3ApLlJFU1BVRVNUQS5NM0dSUDtcclxuICAgICAgICAgICAgaWYgKGpSZXNwLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwID0gbmV3IEFycmF5KGpSZXNwKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbk9LKGpSZXNwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihKU09OLnBhcnNlKGVyci5fYm9keSkuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIGdldF9NM1ByZEdycEJ5Tm9tYnJlXHJcblxyXG4gICAgLy9PYnRpZW5lIGVsIHRvcCAyMCBkZSBwcm9kdWN0b3MgYWdydXBhZG9zIHF1ZSBjb2luY2lkYWQgY29uIGVsIHNOb21icmUgaW5ncmVzYWRvXHJcbiAgICBwdWJsaWMgR2V0TTNQcmRBZ3J1cGFkb0J5Tm9tYnJlKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBzTm9tYnJlOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vZ2V0X20zX3ByZF9ieV9ub21icmVfYWdydXBhZG8vJyArIHNJREthdGlvcyArICcvJyArIHNOb21icmUpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuXHJcbiAgICAgICAgICAgIHZhciBqUmVzcCA9IEpTT04ucGFyc2UocmVzcCkuUkVTUFVFU1RBLk0zR1JQO1xyXG4gICAgICAgICAgICBpZiAoalJlc3AubGVuZ3RoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3AgPSBuZXcgQXJyYXkoalJlc3ApO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uT0soalJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKEpTT04ucGFyc2UoZXJyLl9ib2R5KS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9PYnRpZW5lIGVsIHRvcCAyMCBkZSBwcm9kdWN0b3MgYWdydXBhZG9zIHF1ZSBjb2luY2lkYWQgY29uIGVsIHNOb21icmUgaW5ncmVzYWRvIHkgcXVlIG5vIGVzdGVuIGV4bGN1aWRvcyAoTTNFeGNQcmRYVWJpYylcclxuICAgIHB1YmxpYyBnZXRfbTNfcHJkX2J5X25vbWJyZV9hZ3J1cGFkbyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgZGF0YTogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgLy9kYXRhID0ge25vbWJyZTonYXNkYXNkJywgaWRVYmljYWNpb246JzEnfVxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL2dldF9tM19wcmRfYnlfbm9tYnJlX2FncnVwYWRvLycgKyBzSURLYXRpb3MsIGRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuXHJcbiAgICAgICAgICAgIHZhciBqUmVzcCA9IEpTT04ucGFyc2UoU3RyaW5nKHJlc3ApKS5SRVNQVUVTVEEuTTNHUlA7XHJcbiAgICAgICAgICAgIGlmIChqUmVzcC5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzcCA9IG5ldyBBcnJheShqUmVzcCk7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25PSyhqUmVzcCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5fYm9keSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKEpTT04ucGFyc2UoZXJyLl9ib2R5KS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5lcnJvciAmJiBlcnIuZXJyb3IuTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIuZXJyb3IuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8vT2J0aWVuZSBlbCBwYXRoIGJhc2UgZG9uZGUgc2UgZW5jdWVudHJhIGFsb2phZGFzIGxhcyBpbWFnZW5lcyBlbiBlbCBzZXJ2aWRvclxyXG4gICAgcHVibGljIGdldF9QYXRoU2Vydmlkb3JJbWFnZW5lcyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZyxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9nZXRfUGF0aFNlcnZpZG9ySW1hZ2VuZXMvJyArIHNJREthdGlvcykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcClcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBnZXRfUGF0aFNlcnZpZG9ySW1hZ2VuZXNcclxuXHJcblxyXG4gICAgLy9PYnRlbmVyIHByb2R1Y3RvIGVzcGVjZmljbyB0ZW5pZW5kbyBlbiBjdWVudGEgY29kaWdvLlxyXG4gICAgR2V0X00zUHJvZHVjdG9Fc3BlY0J5Q29kZShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgZGF0YTogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24sIG9EYXRhVXNlcjogYW55KSB7XHJcbiAgICAgICAgdmFyIG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvID0gbmV3IFNlcnZpY2VMb2FkTGlzdGFQcmVjaW8oc0lES2F0aW9zKTtcclxuXHJcbiAgICAgICAgaWYgKG9EYXRhVXNlci5Vc3VhcmlvU2lzdGVtYS5GZWNoYVByZWNpbykgZGF0YS5mZWNoYUxQcmVjaW8gPSBvRGF0YVVzZXIuVXN1YXJpb1Npc3RlbWEuRmVjaGFQcmVjaW87XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKFwiTTNNYWVzdHJvL0dldF9NM1Byb2R1Y3RvRXNwZWNCeUNvZGUvXCIgKyBzSURLYXRpb3MsIGRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgdmFyIG9Qcm9kdWN0bzogYW55ID0gcmVzcDtcclxuICAgICAgICAgICAgb1NlcnZpY2VMb2FkTGlzdGFQcmVjaW8uQXNpZ25hckxpc3RhUHJlY2lvKG9Qcm9kdWN0bywgb0RhdGFVc2VyLCBQb3N0U2VydmljZU0zKS50aGVuKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyb3IuZXJyb3IuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEdldF9NM1Byb2R1Y3RvRXNwZWNCeUNvZGVUaW1lT3V0KFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBkYXRhOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbiwgb0RhdGFVc2VyOiBhbnksIHRpbWVvdXRUaW1lOiBudW1iZXIpIHtcclxuICAgICAgICB2YXIgb1NlcnZpY2VMb2FkTGlzdGFQcmVjaW8gPSBuZXcgU2VydmljZUxvYWRMaXN0YVByZWNpbyhzSURLYXRpb3MpO1xyXG5cclxuICAgICAgICBpZiAodGltZW91dFRpbWUgIT0gMCkge1xyXG4gICAgICAgICAgICBpZiAob0RhdGFVc2VyICYmIG9EYXRhVXNlci5Vc3VhcmlvU2lzdGVtYSAmJiBvRGF0YVVzZXIuVXN1YXJpb1Npc3RlbWEuRmVjaGFQcmVjaW8pIGRhdGEuZmVjaGFMUHJlY2lvID0gb0RhdGFVc2VyLlVzdWFyaW9TaXN0ZW1hLkZlY2hhUHJlY2lvO1xyXG4gICAgICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTNUaW1lT3V0KFwiTTNNYWVzdHJvL0dldF9NM1Byb2R1Y3RvRXNwZWNCeUNvZGUvXCIgKyBzSURLYXRpb3MsIGRhdGEsIHRpbWVvdXRUaW1lKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICAgICAgdmFyIG9Qcm9kdWN0bzogYW55ID0gcmVzcDtcclxuICAgICAgICAgICAgICAgIG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvLkFzaWduYXJMaXN0YVByZWNpbyhvUHJvZHVjdG8sIG9EYXRhVXNlciwgUG9zdFNlcnZpY2VNMykudGhlbih4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyb3IuZXJyb3IuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihcIjQwNFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvRnVuY2lvbkVycihcIjQwNFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0X0RvY3NGcm9tQ291Y2hNYWVzdHJvKG9NM0NvdWNoTWFlc3RybzogTTNDb3VjaE1hZXN0cm8sIHNJZEthdGlvczogc3RyaW5nLCBzRG9jOiBzdHJpbmcsIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImdldF9Eb2NzRnJvbUNvdWNoTWFlc3Ryb1wiKVxyXG4gICAgICAgIHZhciBzSWRLZXlEb2MgPSBvTTNDb3VjaE1hZXN0cm8uR2V0S2V5RG9jdW1lbnRvREIoc0lkS2F0aW9zLCBzRG9jKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhzSWRLZXlEb2MpXHJcbiAgICAgICAgb00zQ291Y2hNYWVzdHJvLkdldERhdGFQb3VjaEJEKHNJZEtleURvYykudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3VsdCk7XHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICBvRnVuY2lvbkVycihlcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgR2V0UHJvZHVjdG9Fc3BlY0J5Q29kZUZyb21Db3VjaChqUHJvZHVjdHNDb3VjaDogYW55LCBzQ29kZTogc3RyaW5nLFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycm9yOiBGdW5jdGlvbikge1xyXG4gICAgICAgIHZhciBqUHJvZHVjdHNGaWwgPSBqUHJvZHVjdHNDb3VjaC5maW5kKHggPT4geC5Mb00zUHJkR2VuZXJhbCAhPSB1bmRlZmluZWQgJiYgeC5Mb00zUHJkR2VuZXJhbC5maW5kKHcgPT4gdy5NM0NvZHMgIT0gdW5kZWZpbmVkICYmIHcuTTNDb2RzLmZpbmQoeSA9PiBTdHJpbmcoeS5WYWxvcikgPT0gU3RyaW5nKHNDb2RlKSkgIT0gdW5kZWZpbmVkKSAhPSB1bmRlZmluZWQpO1xyXG4gICAgICAgIHZhciBwcm9kdWN0X2Nsb25lID0gXy5jbG9uZURlZXAoalByb2R1Y3RzRmlsKTtcclxuXHJcbiAgICAgICAgaWYgKGpQcm9kdWN0c0ZpbCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFyIGpQcmRFc3AgPSBqUHJvZHVjdHNGaWwuTG9NM1ByZEdlbmVyYWwuZmluZCh3ID0+IHcuTTNDb2RzLmZpbmQoeSA9PiBTdHJpbmcoeS5WYWxvcikgPT0gU3RyaW5nKHNDb2RlKSkgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICBwcm9kdWN0X2Nsb25lLkxvTTNQcmRHZW5lcmFsID0gW107XHJcbiAgICAgICAgICAgIHByb2R1Y3RfY2xvbmUuTG9NM1ByZEdlbmVyYWwucHVzaChqUHJkRXNwKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJwcm9kdWN0X2Nsb25lXCIpXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHByb2R1Y3RfY2xvbmUpXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socHJvZHVjdF9jbG9uZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uRXJyb3IoXCJObyBzZSBlbmNvbnRyw7MgbnVuZ8O6biByZWdpc3Ryby5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLy9PYnRpZW5lIGxvcyBUaXBvcyBkZSBwcm9jZXNvcyBkZXNkZSBlbCBzZXJ2aWRvclxyXG4gICAgcHVibGljIGdldF9UaXBvc1Byb2Nlc28oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbiwgYWN0aXZpZGFkOiBzdHJpbmcgPSAnVmVudGFzJykge1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vZ2V0X1RpcG9zUHJvY2Vzby8nICsgc0lES2F0aW9zICsgJy8nICsgYWN0aXZpZGFkKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soSlNPTi5wYXJzZShyZXNwKS5SRVNQVUVTVEEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIGdldF9UaXBvc1Byb2Nlc29cclxuXHJcbiAgICAvLy9PYnRpZW5lIGxhIEluZm8gZGUgdW4gcHJvY2VzbyBhIHBhcnRpciBkZSB1biBpZFByb2Nlc28geSB1biBJZE0zXHJcbiAgICBwdWJsaWMgZ2V0X0luZm9QZXJzb25hX1Byb2Nlc28oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIGpEYXRhOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9nZXRfSW5mb1BlcnNvbmFfUHJvY2Vzby8nICsgc0lES2F0aW9zLCBqRGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKEpTT04ucGFyc2UoU3RyaW5nKHJlc3ApKS5SRVNQVUVTVEEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIGdldF9JbmZvUHJvY2Vzb1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2J0aWVuZSBsYSBJbmZvIGRlIHVuIHByb2Nlc28gYSBwYXJ0aXIgZGUgdW4gaWRQcm9jZXNvIHkgdW4gSWRNMyBkZSBtYW5lcmEgc2luY3LDs25pY2FcclxuICAgICAqIEBwYXJhbSBQb3N0U2VydmljZU0zIFxyXG4gICAgICogQHBhcmFtIHNJREthdGlvcyBcclxuICAgICAqIEBwYXJhbSBqRGF0YSBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGdldF9JbmZvUGVyc29uYV9Qcm9jZXNvX2FzeW5jKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBqRGF0YTogYW55KSB7XHJcbiAgICAgICAgdmFyIGpzb247XHJcbiAgICAgICAgdmFyIHJlc3A7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJlc3AgPSBhd2FpdCBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9nZXRfSW5mb1BlcnNvbmFfUHJvY2Vzby8nICsgc0lES2F0aW9zLCBqRGF0YSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKHJlc3ApXHJcbiAgICAgICAgICAgIHJldHVybiBqc29uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9PYnRlbmVyIHVuIHByb2R1Y3RvIGFncnVwYWRvLCB0ZW5pZW5kbyB1bmEgbGlzdGEgZGUgcHJvZHVjdG8gYWdydXBhZG9zIHkgdW4gc2t1XHJcbiAgICBwdWJsaWMgR2V0TTNQcmRHcnBGcm9tTGlzdChMaXN0UHJkOiBBcnJheTxUeXBlTTNQcmRHcnA+LCBza3UpOiBUeXBlTTNQcmRHcnAge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBvVHlwZU0zUHJkR3JwUmVzdWx0OiBUeXBlTTNQcmRHcnA7XHJcbiAgICAgICAgICAgIG9UeXBlTTNQcmRHcnBSZXN1bHQgPSBMaXN0UHJkLmZpbmQocHJkID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBiUmVzcDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcHJkLkxvTTNQcmRHZW5lcmFsLmZvckVhY2gocHJkID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZC5TS1UgPT09IHNrdSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBiUmVzcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYlJlc3A7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBvVHlwZU0zUHJkR3JwUmVzdWx0LkxvTTNQcmRHZW5lcmFsID0gb1R5cGVNM1ByZEdycFJlc3VsdC5Mb00zUHJkR2VuZXJhbC5maWx0ZXIoZ2VuID0+IGdlbi5TS1UgPT0gc2t1KTtcclxuICAgICAgICAgICAgcmV0dXJuIG9UeXBlTTNQcmRHcnBSZXN1bHQ7XHJcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vL09idGVuZXIgZGUgdW5hIGxpc3RhIGRlIHViaWNhY2lvbmVzLCB1bmEgdWJpY2FjaW9uIGVuIHBhcnRpY3VsYXIsIHRlbmllbmRvIGVuIGN1ZW50YSBlbCBJZFViaWNhY2lvblxyXG4gICAgcHVibGljIEdldFViaWNhY2lvbkZyb21MaXN0KExpc3RVYmljOiBBcnJheTxNM1ViaWNhY2lvbj4sIHNJZFViaWMpIHtcclxuICAgICAgICB2YXIgb00zVWJpY2FjaW9uOiBNM1ViaWNhY2lvbjtcclxuICAgICAgICBvTTNVYmljYWNpb24gPSBMaXN0VWJpYy5maW5kKHViaWMgPT4gdWJpYy5JRFViaWNhY2lvbiA9PSBzSWRVYmljKTtcclxuICAgICAgICByZXR1cm4gb00zVWJpY2FjaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIC8vL09idGllbmUgbG9zIGRhdG9zIGRlIGZhY3R1cmFjaW9uIHRhbCBjb21vIGVsIGNvZGlnbyBwb3N0YWwgeSBlbCByZWdpbWVuIGZpc2NhbCBhc29jaWFkbyBhIHVuIFJGQ1xyXG4gICAgcHVibGljIGdldERhdG9zRmFjdHVyYWNpb25Gcm9tUkZDKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBvRGF0YTogYW55LFxyXG4gICAgICAgIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuXHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNM01hZXN0cm8vZ2V0RGF0b3NGYWN0dXJhY2lvbkZyb21SRkMvJyArIHNJREthdGlvcywgb0RhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhKU09OLnBhcnNlKHJlc3AudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIGdldERhdG9zRmFjdHVyYWNpb25Gcm9tUkZDXHJcblxyXG4gICAgcHVibGljIGFjdHVhbGl6YXJSRkMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgSWRLYXRpb3M6IHN0cmluZywgb0RhdGEsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMygnTTNNYWVzdHJvL2FjdHVhbGl6YXJSRkMvJyArIElkS2F0aW9zLCBvRGF0YSkuc3Vic2NyaWJlKHBvc3RzID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhwb3N0cyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoSlNPTi5wYXJzZShlcnIuX2JvZHkpLk1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8vT2J0aWVuZSBlbCBYbWwgZGUgY29uZmlndXJhY2lvbiBkZSBsYSBlbXByZXNhIGEgcGFydGlyIGRlbCBpZHViaWNhY2lvblxyXG4gICAgcHVibGljIGdldF9YbWxDb25maWdfeF9JZFViaWNhY2lvbihQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBzSURLYXRpb3M6IHN0cmluZywgb0RhdGE6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL2dldF9YbWxDb25maWdfeF9JZFViaWNhY2lvbi8nICsgc0lES2F0aW9zLCBvRGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKEpTT04ucGFyc2UocmVzcC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9Ly9FbmQgZ2V0X1htbENvbmZpZ194X0lkVWJpY2FjaW9uXHJcblxyXG4gICAgLy8vT2J0aWVuZSBlbCBYbWwgZGUgY29uZmlndXJhY2lvbiBkZSBsYSBlbXByZXNhIGEgcGFydGlyIGRlbCBpZHViaWNhY2lvblxyXG4gICAgcHVibGljIGdldENGRElzWFByb2Nlc28oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIG9EYXRhOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9nZXRDRkRJc1hQcm9jZXNvLycgKyBzSURLYXRpb3MsIG9EYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soSlNPTi5wYXJzZShyZXNwLnRvU3RyaW5nKCkpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH0vL0VuZCBnZXRfWG1sQ29uZmlnX3hfSWRVYmljYWNpb25cclxuXHJcbiAgICAvLy9PYnRpZW5lIGxvcyBhdHJpYnV0b3MgZW4gbTNjbGFzaWZpY2EgYSBwYXJ0aXIgZGUgdW4gaWRrYXRpb3NcclxuICAgIGdldF9jbGFzaWZpY2F0aW9uX2F0dHJpYnV0ZXMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vZ2V0X2NsYXNpZmljYXRpb25fYXR0cmlidXRlcy8nICsgaWRfa2F0aW9zKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIHZhciBqUmVzcCA9IEpTT04ucGFyc2UocmVzcCkuUkVTUFVFU1RBLkFUVFJJQlVURVM7XHJcbiAgICAgICAgICAgIGlmIChqUmVzcC5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgalJlc3AgPSBuZXcgQXJyYXkoalJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKGpSZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vL09idGllbmUgbGFzIGNhdGVnb3JpYXMgZW4gbTNjbGFzaWZpY2EgYSBwYXJ0aXIgZGUgdW4gaWRrYXRpb3MgeSB1biBhdHJpYnV0b1xyXG4gICAgZ2V0X2NsYXNpZmljYXRpb25fY2F0ZWdvcmllcyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgYXR0cmlidXRlOiBzdHJpbmcsIG9GdW5jaW9uT0s6IEZ1bmN0aW9uLCBvRnVuY2lvbkVycjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldE0zKCdNM01hZXN0cm8vZ2V0X2NsYXNpZmljYXRpb25fY2F0ZWdvcmllcy8nICsgaWRfa2F0aW9zICsgXCIvXCIgKyBhdHRyaWJ1dGUpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgdmFyIGpSZXNwID0gSlNPTi5wYXJzZShyZXNwKS5SRVNQVUVTVEEuQ0FURUdPUklFUztcclxuICAgICAgICAgICAgaWYgKGpSZXNwLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBqUmVzcCA9IG5ldyBBcnJheShqUmVzcCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0soalJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPcGNpb25lc0FkaWNpb25hbGVzKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL2dldE9wY2lvbmVzQWRpY2lvbmFsZXMvJyArIGlkX2thdGlvcykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICB2YXIgalJlc3AgPSBKU09OLnBhcnNlKHJlc3ApLlJFU1BVRVNUQS5BVFRSSUJVVEVTO1xyXG4gICAgICAgICAgICBpZiAoalJlc3AubGVuZ3RoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGpSZXNwID0gbmV3IEFycmF5KGpSZXNwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhqUmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXRyaWJ1dG9zQWRpY2lvbmFsZXMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIGF0dHJpYnV0ZTogc3RyaW5nLCBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL2dldEF0cmlidXRvc0FkaWNpb25hbGVzLycgKyBpZF9rYXRpb3MgKyBcIi9cIiArIGF0dHJpYnV0ZSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICB2YXIgalJlc3AgPSBKU09OLnBhcnNlKHJlc3ApLlJFU1BVRVNUQS5DQVRFR09SSUVTO1xyXG4gICAgICAgICAgICBpZiAoalJlc3AubGVuZ3RoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGpSZXNwID0gbmV3IEFycmF5KGpSZXNwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhqUmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vL09idGllbmUgbGEgaW5mb3JtYWNpb24gZGUgdGlwb3MgZGUgZW52aW8uXHJcbiAgICBNM0dldEZvcm1hc0VudmlvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL00zR2V0Rm9ybWFzRW52aW8vJyArIGlkX2thdGlvcykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICB2YXIganNSZXNwO1xyXG4gICAgICAgICAgICBqc1Jlc3AgPSBKU09OLnBhcnNlKHJlc3ApO1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKGpzUmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vL09idGluaWUgdG9kYXMgbGFzIE0zVWJpY2FjaW9uZXMgYXNvY2lhZGFzIGEgdW4gaWRfa2F0aW9zXHJcbiAgICBwdWJsaWMgZ2V0X3ViaWNhY2lvbmVzX2NvbXBsZXRlKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL2dldF91YmljYWNpb25lc19jb21wbGV0ZS8nICsgaWRfa2F0aW9zKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uT0socmVzcCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vL09idGluaWUgdG9kYXMgbGFzIE0zVWJpY2FjaW9uZXMgYXNvY2lhZGFzIGEgdW4gaWRfa2F0aW9zXHJcbiAgICBwdWJsaWMgZ2V0X3ViaWNhY2lvbmVzX3NpbXBsZShQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9nZXRfdWJpY2FjaW9uZXNfc2ltcGxlLycgKyBpZF9rYXRpb3MpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25FcnIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vL09idGluaWUgdG9kYXMgbGFzIE0zVWJpY2FjaW9uZXMgYXNvY2lhZGFzIGEgdW4gaWRfa2F0aW9zXHJcbiAgICBwdWJsaWMgYXN5bmMgTTNHRVRfTElTVEFQUkVDSU9TX0FTeW5jKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIG9SZWNMaXN0YVByZWM6IGFueTtcclxuXHJcbiAgICAgICAgb1JlY0xpc3RhUHJlYyA9IGF3YWl0IFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zTWFlc3Ryby9NM0dFVF9MSVNUQVBSRUNJT1MvJyArIGlkX2thdGlvcykudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgcmV0dXJuIG9SZWNMaXN0YVByZWNbMF07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIEdldEVuY2FiZXphZG9MaXN0YXNQcmVjaW8oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcmVzcDtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmVzcCA9IGF3YWl0IFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zL0dldENvbmZpZ0xQLycgKyBzSURLYXRpb3MpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdHJhckNvbG9uaWEoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgSWRLYXRpb3M6IHN0cmluZywgc0NvbG9uaWE6IHN0cmluZywgc0NvZFBvc3RhbCwgc1RlbGVmb25vOiBzdHJpbmcsIG5kb2M6IHN0cmluZywgc0xpbmVhMTogc3RyaW5nLCBzQ29kZXN0YWRvOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICB2YXIgb0RhdGFTZW5kO1xyXG4gICAgICAgIG9EYXRhU2VuZCA9IHsgXCJzQ29sb25pYVwiOiBzQ29sb25pYSwgXCJzQ29kUG9zdGFsXCI6IHNDb2RQb3N0YWwsIFwic1RlbGVmb25vXCI6IHNUZWxlZm9ubywgXCJuZG9jXCI6IG5kb2MsIFwic0xpbmVhMVwiOiBzTGluZWExLCBcInNDb2Rlc3RhZG9cIjogc0NvZGVzdGFkbyB9O1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKCdNM01hZXN0cm8vcmVnaXN0cmFyQ29sb25pYS8nICsgSWRLYXRpb3MsIG9EYXRhU2VuZCkuc3Vic2NyaWJlKHBvc3RzID0+IHtcclxuICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIHByb2Nlc2FtaWVudG8gT0tcclxuICAgICAgICAgICAgb0Z1bmNpb25PSygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKEpTT04ucGFyc2UoZXJyLl9ib2R5KS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vL09idGVuZXIgcHJvbW9jaW9uZXMgXHJcbiAgICBwdWJsaWMgYXN5bmMgTTNfR2V0UHJvbW9jaW9uZXNNYWVzdHJvQXN5bmMoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgb1JlY0xpc3RhUHJlYzogYW55O1xyXG5cclxuICAgICAgICBvUmVjTGlzdGFQcmVjID0gYXdhaXQgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL00zX0dldFByb21vY2lvbmVzTWFlc3Ryby8nICsgaWRfa2F0aW9zKS50b1Byb21pc2UoKTtcclxuICAgICAgICByZXR1cm4gb1JlY0xpc3RhUHJlYztcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vT2J0ZW5lciBEaW5hbWljYXMgcG9yIGFjdGl2aWRhZCBcclxuICAgIHB1YmxpYyBhc3luYyBNM0dldERpbkJ5QWN0aXZpZGFkKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBvRGF0YTogYW55LCBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMygnTTNNYWVzdHJvL00zR2V0RGluQnlBY3RpdmlkYWQvJyArIGlkX2thdGlvcywgb0RhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgLy92YXIganNSZXNwOmFueSA9IHJlc3A7XHJcbiAgICAgICAgICAgIC8vanNSZXNwID0gSlNPTi5wYXJzZShqc1Jlc3ApO1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycigpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgIC8vIHZhciBvUmVjTGlzdGFQcmVjOiBhbnk7XHJcblxyXG4gICAgICAgIC8vIG9SZWNMaXN0YVByZWMgPSBhd2FpdCBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9NM0dldERpbkJ5QWN0aXZpZGFkLycgKyBpZF9rYXRpb3MsIG9EYXRhKS50b1Byb21pc2UoKTtcclxuICAgICAgICAvLyByZXR1cm4gb1JlY0xpc3RhUHJlYztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgbGEgaW5mbyBiYXNpY2EgZGUgbGFzIHViaWNhY2lvbmVzIGNvbiBIdWIgdGlwbyBXRUIgYWN0aXZvcyBlbiBlbCBtb21lbnRvXHJcbiAgICAgKiBAcGFyYW0gUG9zdFNlcnZpY2VNMyBcclxuICAgICAqIEBwYXJhbSBpZEthdGlvcyBcclxuICAgICAqIEBwYXJhbSBvRnVuY2lvbk9LIFxyXG4gICAgICogQHBhcmFtIG9GdW5jaW9uRXJyIFxyXG4gICAgICovXHJcbiAgICBnZXRVYmljYWNpb25lc1dlYihQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZEthdGlvczogc3RyaW5nLCBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRNMygnTTNNYWVzdHJvL2dldFViaWNhY2lvbmVzV2ViLycgKyBpZEthdGlvcykuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKEpTT04ucGFyc2UocmVzcCkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqICBSZXRvcm5hIGxhIGluZm8gYmFzaWNhIGRlIGxhcyB1YmljYWNpb25lcyBjb24gSHViIHRpcG8gV0VCIGFjdGl2b3MgZW4gZWwgbW9tZW50byBxdWUgYWJhcnF1ZW4gdW4gY29kcG9zdGFsIGVuIGNvbmNyZXRvXHJcbiAgICAgKiBAcGFyYW0gUG9zdFNlcnZpY2VNMyBcclxuICAgICAqIEBwYXJhbSBpZEthdGlvcyBcclxuICAgICAqIEBwYXJhbSBkYXRhIFxyXG4gICAgICogQHBhcmFtIG9GdW5jaW9uT0sgXHJcbiAgICAgKiBAcGFyYW0gb0Z1bmNpb25FcnIgXHJcbiAgICAgKi9cclxuICAgIGdldFViaWNhY2lvbmVzQnlDb2RQb3N0YWwoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRLYXRpb3M6IHN0cmluZywgZGF0YTogYW55LCBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgLy9kYXRhID0geyBcImNvZFBvc3RhbFwiOiBzdHJpbmcgfTtcclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9nZXRVYmljYWNpb25lc0J5Q29kUG9zdGFsLycgKyBpZEthdGlvcywgZGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKEpTT04ucGFyc2UocmVzcC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBlbCBwYXRoIGRlIGxhIGZhY3R1cmEgZWxlY3Ryw7NuaWNhIGEgcGFydGlyIGRlIHVuIElkRGlhcmlvIGFzb2NpYWRvIGFsIHByb2Nlc28gXHJcbiAgICAgKiBAcGFyYW0gUG9zdFNlcnZpY2VNMyBcclxuICAgICAqIEBwYXJhbSBpZEthdGlvcyBcclxuICAgICAqIEBwYXJhbSBkYXRhIFxyXG4gICAgICogQHBhcmFtIG9GdW5jaW9uT0sgXHJcbiAgICAgKiBAcGFyYW0gb0Z1bmNpb25FcnIgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQYXRoRkVGcm9tRGlhcmlvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkS2F0aW9zOiBzdHJpbmcsIHRpcG9HZW5lcmFjaW9uOiBzdHJpbmcsIGRhdGE6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNMy9nZXRQYXRoRkVGcm9tRGlhcmlvLycgKyBpZEthdGlvcyArICcvJyArIHRpcG9HZW5lcmFjaW9uLCBkYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIHZhciByZXNwdWVzdGE6IGFueSA9IEpTT04ucGFyc2UocmVzcC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgb0Z1bmNpb25PSyhyZXNwdWVzdGEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvbkVycihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RGlhcmlvQWRpY2lvbmFsZXN4RGlhcmlvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkS2F0aW9zOiBzdHJpbmcsIGRhdGE6IGFueSxcclxuICAgICAgICBvRnVuY2lvbk9LOiBGdW5jdGlvbiwgb0Z1bmNpb25FcnI6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keUdlbmVyYWxlcygnRGlhcmlvL2dldERpYXJpb0FkaWNpb25hbGVzeERpYXJpby8nICsgaWRLYXRpb3MsIGRhdGEpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgdmFyIHJlc3B1ZXN0YTogYW55ID0gSlNPTi5wYXJzZShyZXNwLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKHJlc3B1ZXN0YSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKEpTT04ucGFyc2UoZXJyLl9ib2R5KS5NZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGFzeW5jIElVX0h1YihQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBpZF9rYXRpb3M6IHN0cmluZywgb0h1YjogYW55LCB1VEFjdGl2bzogc3RyaW5nLCB1TkFjdGl2bzogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIEluZm87XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7ICdpZEthdGlvcyc6IGlkX2thdGlvcy50cmltKCksICdvSHViJzogb0h1YiwgJ3VUQWN0aXZvJzogdVRBY3Rpdm8sICd1TkFjdGl2byc6IHVOQWN0aXZvIH07XHJcbiAgICAgICAgSW5mbyA9IGF3YWl0IFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKCdNM01hZXN0cm8vSVVfSHViJywgZGF0YSkudG9Qcm9taXNlKClcclxuICAgICAgICByZXR1cm4gSW5mb1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPYnRlbmVyIGVsIGN0aXZvIGRlc2RlIHNlcnZpZG9yXHJcbiAgICAgKiBAcGFyYW0gUG9zdFNlcnZpY2VNMyBcclxuICAgICAqIEBwYXJhbSBpZF9rYXRpb3MgXHJcbiAgICAgKiBAcGFyYW0gaWRwcm9jZXNvIFxyXG4gICAgICogQHBhcmFtIHViaWNhY2lvbiBcclxuICAgICAqIEBwYXJhbSBodWIgXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIEdldEN0aXZvQllQcm9jZXNvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBpZHByb2Nlc286IHN0cmluZywgdWJpY2FjaW9uOiBzdHJpbmcsIGh1Yjogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIEluZm87XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7ICdpZHByb2Nlc28nOiBpZHByb2Nlc28sICd1YmljYWNpb24nOiB1YmljYWNpb24sICdodWInOiBodWIgfTtcclxuICAgICAgICBJbmZvID0gYXdhaXQgUG9zdFNlcnZpY2VNMy5nZXRXaXRoQm9keU0zKCdNMy9HZXRDdGl2b0JZUHJvY2Vzby8nICsgaWRfa2F0aW9zLnRyaW0oKSwgZGF0YSkudG9Qcm9taXNlKClcclxuICAgICAgICByZXR1cm4gSW5mb1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgVmFsaWRhckN0aXZvc1ZTTG9jYWwoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsXHJcbiAgICAgICAgaW5mUHJvY2Vzbzogc3RyaW5nLCB1YmljYWNpb246IHN0cmluZywgaHViOiBzdHJpbmcsIGZ1bmNpb25SZXNwOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKCdNMy9WYWxpZGFyQ3Rpdm9zVlNMb2NhbC8nICsgaWRfa2F0aW9zICsgJy8nICsgdWJpY2FjaW9uICsgJy8nICsgaHViLCBpbmZQcm9jZXNvKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBwcm9jZXNhbWllbnRvIE9LXHJcbiAgICAgICAgICAgIGZ1bmNpb25SZXNwKHJlc3ApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgZnVuY2lvblJlc3AoeyBcImVycm9yXCI6IGVycm9yIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBHZW5lcmFyQXV0b3JpemFjaW9uQ3VlbnRhcyhQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBkYXRhKSB7XHJcbiAgICAgICAgdmFyIEluZm87XHJcblxyXG4gICAgICAgIEluZm8gPSBhd2FpdCBQb3N0U2VydmljZU0zLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMygnTTMvR2VuZXJhckF1dG9yaXphY2lvbkN1ZW50YXMnLCBkYXRhKS50b1Byb21pc2UoKVxyXG4gICAgICAgIHJldHVybiBJbmZvXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGEgc2kgZWwgY29kaWdvIGluZ3Jlc2FkbyBjb3JyZXNwb25kZSBhbCBkb2N1bWVudG8geSBzaSBlbCBjb2RpZ28gZXN0YSBlbiBlc3RhZG8gYWN0aXZvXHJcbiAgICAgKiBAcGFyYW0gUG9zdFNlcnZpY2VNMyBcclxuICAgICAqIEBwYXJhbSBkYXRhIFxyXG4gICAgICovXHJcbiAgICBhc3luYyB2YWxpZGFjaW9uQXV0b3JpemFjaW9uTTNDdWVudGFzKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGRhdGEpIHtcclxuICAgICAgICB2YXIgSW5mbztcclxuXHJcbiAgICAgICAgSW5mbyA9IGF3YWl0IFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKCdNMy92YWxpZGFjaW9uQXV0b3JpemFjaW9uTTNDdWVudGFzJywgZGF0YSkudG9Qcm9taXNlKClcclxuICAgICAgICByZXR1cm4gSW5mb1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhc3luYyBWZXJpZmljYXJQYWdvVGFyamV0YUJCVkEoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIHNJZEtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgdmFyIGpEYXRhID0geyBcIklka2F0aW9zXCI6IHNJREthdGlvcywgXCJpZEtleVwiOiBzSWRLZXkgfVxyXG4gICAgICAgIHZhciBJbmZvO1xyXG4gICAgICAgIEluZm8gPSBhd2FpdCBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zL1ZlcmlmaWNhclBhZ29UYXJqZXRhQkJWQScsIGpEYXRhKS50b1Byb21pc2UoKVxyXG4gICAgICAgIHJldHVybiBJbmZvO1xyXG4gICAgfS8vRW5kIGdldF9JbmZvUHJvY2Vzb1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRlMgMjAxOTA4MTM6IFJldG9ybmEgbG9zIGNvZGlnb3MgZGUgbG9zIFNLUChza3BUb0ZpbmQpIHkgc3UgcmVzcGVjdGl2byBzaWduaWZpY2FkbyBwYXJhIHVuIHByb2R1Y3RvIGRhZG9cclxuICAgICAqIEBwYXJhbSBpZEthdGlvcyBcclxuICAgICAqIEBwYXJhbSBQb3N0U2VydmljZU0zIFxyXG4gICAgICogQHBhcmFtIGRhdGEgXHJcbiAgICAgKiBAcGFyYW0gZnVuY2lvbk9LIFxyXG4gICAgICogQHBhcmFtIGZ1bmNpb25FcnJvciBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldERlc2NyaXBjaW9uU0tQcyhpZEthdGlvczogc3RyaW5nLCBQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLFxyXG4gICAgICAgIGRhdGE6IGFueSwgZnVuY2lvbk9LOiBGdW5jdGlvbiwgZnVuY2lvbkVycm9yOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICAvL2xldCBkYXRhID0ge1wiU0tQMVwiOlwiU0tQMVwiLCBTS1BUb0ZpbmQ6IDIgfX07XHJcblxyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0V2l0aEJvZHlNMyhcIk0zQ29uc3VsdGFzL2dldERlc2NyaXBjaW9uU0tQcy9cIiArIGlkS2F0aW9zLCBkYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIGZ1bmNpb25PSyhkYXRhLlNLUDEsIEpTT04ucGFyc2UocmVzcC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGZ1bmNpb25FcnJvcihlcnIuZXJyb3IuTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhc3luYyBnZXRUb3RhbGVzQ2llcnJlQ2FqYShwb3N0U2VydmljZTogUG9zdFNlcnZpY2VNMywgc0lkS2F0aW9zOiBzdHJpbmcsIHN1YmljYWNpb246IHN0cmluZywgc2h1Yjogc3RyaW5nLCBzdXN1YXJpbzogc3RyaW5nLCBzRmVjaGFJOiBzdHJpbmcsIHNGZWNoYUY6IHN0cmluZykge1xyXG4gICAgICAgIHZhciBzZWNvcGNpb25lczogYW55O1xyXG4gICAgICAgIHZhciBkYXRhID0geyAnaWRLYXRpb3MnOiBzSWRLYXRpb3MsICd1YmljYWNpb24nOiBzdWJpY2FjaW9uLCAnaHViJzogc2h1YiwgJ3VzdWFyaW8nOiBzdXN1YXJpbywgJ0ZlY2hhSSc6IHNGZWNoYUksICdGZWNoYUYnOiBzRmVjaGFGIH1cclxuICAgICAgICBzZWNvcGNpb25lcyA9IGF3YWl0IHBvc3RTZXJ2aWNlLmdldFdpdGhCb2R5TTMoJ00zL2dldFRvdGFsZXNDaWVycmVDYWphJywgZGF0YSkudG9Qcm9taXNlKClcclxuICAgICAgICBzZWNvcGNpb25lcyA9IEpTT04ucGFyc2Uoc2Vjb3BjaW9uZXMpXHJcbiAgICAgICAgcmV0dXJuIHNlY29wY2lvbmVzXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Q2llcnJlc3hVYmljYWNpb24ocG9zdFNlcnZpY2U6IFBvc3RTZXJ2aWNlTTMsIHNJZEthdGlvczogc3RyaW5nLCBzdWJpY2FjaW9uOiBzdHJpbmcsIHNJZFByb2Nlc286IHN0cmluZywgc0ZlY2hhOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgc2Vjb3BjaW9uZXM6IGFueTtcclxuICAgICAgICB2YXIgZGF0YSA9IHsgJ2lkS2F0aW9zJzogc0lkS2F0aW9zLCAndWJpY2FjaW9uJzogc3ViaWNhY2lvbiwgJ2lkUHJvY2Vzbyc6IHNJZFByb2Nlc28sICdGZWNoYSc6IHNGZWNoYSB9XHJcbiAgICAgICAgc2Vjb3BjaW9uZXMgPSBhd2FpdCBwb3N0U2VydmljZS5nZXRXaXRoQm9keU0zKCdNMy9nZXRDaWVycmVzeFViaWNhY2lvbicsIGRhdGEpLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgc2Vjb3BjaW9uZXMgPSBKU09OLnBhcnNlKHNlY29wY2lvbmVzKVxyXG4gICAgICAgIHJldHVybiBzZWNvcGNpb25lc1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldENpZXJyZXN4RW1wcmVzYShwb3N0U2VydmljZTogUG9zdFNlcnZpY2VNMywgc0lkS2F0aW9zOiBzdHJpbmcsIHNJZFByb2Nlc286IHN0cmluZywgc0ZlY2hhOiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgc2Vjb3BjaW9uZXM6IGFueTtcclxuICAgICAgICB2YXIgZGF0YSA9IHsgJ2lkS2F0aW9zJzogc0lkS2F0aW9zLCAnaWRQcm9jZXNvJzogc0lkUHJvY2VzbywgJ0ZlY2hhJzogc0ZlY2hhIH1cclxuICAgICAgICBzZWNvcGNpb25lcyA9IGF3YWl0IHBvc3RTZXJ2aWNlLmdldFdpdGhCb2R5TTMoJ00zL2dldENpZXJyZXN4RW1wcmVzYScsIGRhdGEpLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgc2Vjb3BjaW9uZXMgPSBKU09OLnBhcnNlKHNlY29wY2lvbmVzKVxyXG4gICAgICAgIHJldHVybiBzZWNvcGNpb25lc1xyXG4gICAgfVxyXG5cclxuICAgIC8vVHJhZSBlbCBtM3Byb2Nlc29zIHNlZ3B1biBlbCBpZHByZXN0YW1vXHJcbiAgICBwdWJsaWMgc2ltdWxhcnBhZ29FbmxpbmVhKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIHNJREthdGlvczogc3RyaW5nLCBzSWRNMzogc3RyaW5nLCBzSWRQcm9jZXNvOiBzdHJpbmcsXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMuZ2V0TTMoJ00zL1ZhbGlkYWNpb25QYWdvSW50ZWdyYWNpb25UZXN0LycgKyBzSURLYXRpb3MgKyAnLycgKyBzSWRNMyArICcvJyArIHNJZFByb2Nlc28pLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgb0Z1bmNpb25PSygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGFyUHJkc01pc21vUHJvdmVlZG9yKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBub21icmVBZGljaW9uYWxQcm92ZWVkb3I6IHN0cmluZywgb00zUHJvY2Vzb3M6IE0zUHJvY2Vzb3MsIG9GdW5jaW9uUmVzcDogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMyhcIk0zTWFlc3Ryby92YWxpZGFyUHJkc01pc21vUHJvdmVlZG9yL1wiICsgaWRfa2F0aW9zICsgXCIvXCIgKyBub21icmVBZGljaW9uYWxQcm92ZWVkb3IsIG9NM1Byb2Nlc29zKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uUmVzcChKU09OLnBhcnNlKEpTT04ucGFyc2UocmVzcFsnX2JvZHknXSkudG9TdHJpbmcoKSkpXHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvciAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgdmFsaWRhclByZHNNaXNtb1Byb3ZlZWRvclwiKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvblJlc3AoSlNPTi5wYXJzZShKU09OLnBhcnNlKGVyclsnX2JvZHknXSkuTWVzc2FnZSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRhclJlc3RyaWNjaW9uSW52TmVnYXRpdm8oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIG9NM1Byb2Nlc29zOiBNM1Byb2Nlc29zLCBvRnVuY2lvblJlc3A6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoXCJNM01hZXN0cm8vdmFsaWRhclJlc3RyaWNjaW9uSW52TmVnYXRpdm8vXCIgKyBpZF9rYXRpb3MsIG9NM1Byb2Nlc29zKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIG9GdW5jaW9uUmVzcChKU09OLnBhcnNlKEpTT04ucGFyc2UocmVzcFsnX2JvZHknXSkudG9TdHJpbmcoKSkpXHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvciAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgdmFsaWRhclJlc3RyaWNjaW9uSW52TmVnYXRpdm9cIilcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25SZXNwKEpTT04ucGFyc2UoSlNPTi5wYXJzZShlcnJbJ19ib2R5J10pLk1lc3NhZ2UpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZhbGlkYXJSZXN0cmljY2lvbkludk5lZ2F0aXZvVjIoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRfa2F0aW9zOiBzdHJpbmcsIHByZHM6IGFueSwgb0Z1bmNpb25SZXNwOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKFwiTTNNYWVzdHJvL3ZhbGlkYXJSZXN0cmljY2lvbkludk5lZ2F0aXZvVjIvXCIgKyBpZF9rYXRpb3MsIHByZHMpLnN1YnNjcmliZShyZXNwID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uUmVzcChKU09OLnBhcnNlKEpTT04ucGFyc2UocmVzcFsnX2JvZHknXSkudG9TdHJpbmcoKSkpXHJcbiAgICAgICAgICAgIH0gY2F0Y2goZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXNwKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgICAgICAgICAgb0Z1bmNpb25SZXNwKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vRWplY3V0YXIgZnVuY2lvbiBkZSBlcnJvciAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgdmFsaWRhclJlc3RyaWNjaW9uSW52TmVnYXRpdm9WMlwiKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvblJlc3AoSlNPTi5wYXJzZShKU09OLnBhcnNlKGVyclsnX2JvZHknXSkuTWVzc2FnZSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRhckVmZWN0aXZvRW5DYWphKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCB1YmlodWI6IGFueSwgb0Z1bmNpb25SZXNwOiBGdW5jdGlvbikge1xyXG4gICAgICAgIFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKFwiTTNNYWVzdHJvL3ZhbGlkYXJFZmVjdGl2b0VuQ2FqYS9cIiArIGlkX2thdGlvcywgdWJpaHViKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvblJlc3AoSlNPTi5wYXJzZShKU09OLnBhcnNlKHJlc3BbJ19ib2R5J10pLnRvU3RyaW5nKCkpKVxyXG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzcClcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uUmVzcChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3IgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHZhbGlkYXJFZmVjdGl2b0VuQ2FqYVwiKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICBvRnVuY2lvblJlc3AoSlNPTi5wYXJzZShKU09OLnBhcnNlKGVyclsnX2JvZHknXSkuTWVzc2FnZSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5mb1ByZEdhc3Rvc0VudmlvKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBvTTNQcm9jZXNvczogTTNQcm9jZXNvcykge1xyXG5cclxuICAgICAgICBsZXQgcmVzcCA9IGF3YWl0IFBvc3RTZXJ2aWNlTTMucG9zdFNlcnZpY2VIdHRwUmVzRnVsbE0zKFwiTTNNYWVzdHJvL2dldEluZm9QcmRHYXN0b3NFbnZpby9cIiArIGlkX2thdGlvcywgb00zUHJvY2Vzb3MpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04ucGFyc2UocmVzcFsnX2JvZHknXSkudG9TdHJpbmcoKSkuUkVTUFVFU1RBXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmEgdW5hIHNhbGRveGN1ZW50YSBhbGVhdG9yaW8gcG9yIGVsIHZhbG9yIGRhZG9cclxuICAgICAqIEBwYXJhbSBQb3N0U2VydmljZU0zIFxyXG4gICAgICogQHBhcmFtIGlka2F0aW9zIFxyXG4gICAgICogQHBhcmFtIGRhdGEgPSB7XCJwcm9jZXNvXCIscHJvY2VzbyxcInZhbG9yXCI6dmFsb3IsXCJub21icmVEb2NcIjogbm9tYnJlRG9jfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgbTNfZ2VuZXJhcl9NM1NYQ19hbGVhdG9yaW8oUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRrYXRpb3M6IHN0cmluZywgZGF0YTogYW55KSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCByZXNwID0gYXdhaXQgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoXCJNMy9tM19nZW5lcmFyX00zU1hDX2FsZWF0b3Jpby9cIiArIGlka2F0aW9zLCBkYXRhKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5wYXJzZShyZXNwWydfYm9keSddKS50b1N0cmluZygpKS5SRVNQVUVTVEE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFjdHVhbGl6YSB1biBjb25jZXB0byBkZWwgTTNfc2FsZG9zSXRlbVViXHJcbiAgICAgKiBAcGFyYW0gUG9zdFNlcnZpY2VNMyBcclxuICAgICAqIEBwYXJhbSBpZGthdGlvcyBcclxuICAgICAqIEBwYXJhbSBkYXRhIFxyXG4gICAgICogQHBhcmFtIGZ1bmNpb25PSyBcclxuICAgICAqIEBwYXJhbSBmdW5jaW9uRXJyb3IgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBNM19hY3R1YWxpemFyQ29uY2VwdG9TSVUoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgaWRrYXRpb3M6IHN0cmluZywgZGF0YTogYW55LFxyXG4gICAgICAgIGZ1bmNpb25PSzogRnVuY3Rpb24sIGZ1bmNpb25FcnJvcjogRnVuY3Rpb24pIHtcclxuICAgICAgICBQb3N0U2VydmljZU0zLnBvc3RTZXJ2aWNlSHR0cFJlc0Z1bGxNMyhcIk0zL00zX2FjdHVhbGl6YXJDb25jZXB0b1NJVS9cIiArIGlka2F0aW9zLCBkYXRhKS5zdWJzY3JpYmUocmVzcCA9PiB7XHJcbiAgICAgICAgICAgIGZ1bmNpb25PSyhyZXNwKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgZnVuY2lvbkVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcm9jZXNvQWxDaWVycmVVYmljKFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIGlkX2thdGlvczogc3RyaW5nLCBqRGF0YTogYW55LCBmdW5jaW9uT0s6IEZ1bmN0aW9uLCBmdW5jaW9uRXJyb3I6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgUG9zdFNlcnZpY2VNMy5wb3N0U2VydmljZUh0dHBSZXNGdWxsTTMoXCJNMy9wcm9jZXNvQWxDaWVycmVVYmljL1wiICsgaWRfa2F0aW9zLCBqRGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICBmdW5jaW9uT0socmVzcClcclxuICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy9FamVjdXRhciBmdW5jaW9uIGRlIGVycm9yICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwcm9jZXNvQWxDaWVycmVVYmljXCIpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgIGZ1bmNpb25FcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0X1Byb2Nlc29zQWJpZXJ0b3MoUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgc0lES2F0aW9zOiBzdHJpbmcsIGpEYXRhOiBhbnksXHJcbiAgICAgICAgb0Z1bmNpb25PSzogRnVuY3Rpb24sIG9GdW5jaW9uRXJyOiBGdW5jdGlvbikge1xyXG5cclxuICAgICAgICBQb3N0U2VydmljZU0zLmdldFdpdGhCb2R5TTMoJ00zTWFlc3Ryby9nZXRfUHJvY2Vzb3NBYmllcnRvcy8nICsgc0lES2F0aW9zLCBqRGF0YSkuc3Vic2NyaWJlKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgcHJvY2VzYW1pZW50byBPS1xyXG4gICAgICAgICAgICBvRnVuY2lvbk9LKEpTT04ucGFyc2UoU3RyaW5nKHJlc3ApKS5SRVNQVUVTVEEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvL0VqZWN1dGFyIGZ1bmNpb24gZGUgZXJyb3IgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGdldF9Qcm9jZXNvc0FiaWVydG9zXCIpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgIG9GdW5jaW9uRXJyKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfS8vRW5kIGdldF9JbmZvUHJvY2Vzb1xyXG5cclxufVxyXG4iXX0=