@kontur.candy/tools 2.148.0 → 2.150.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ <a name="2.150.0"></a>
2
+ # [2.150.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.149.0...release/tools/v2.150.0) (2023-03-10)
3
+
4
+
5
+ ### Features
6
+
7
+ * **Tools:** Теперь можно подключить СС при создании черновика из forms-helper ([48b6aed](https://git.skbkontur.ru/ke/candy-utils/commit/48b6aed))
8
+
9
+ <a name="2.149.0"></a>
10
+ # [2.149.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.148.0...release/tools/v2.149.0) (2023-03-09)
11
+
12
+
13
+ ### Features
14
+
15
+ * **Tools:** При использовании серверной нормализации ошибки генерации .Net сборки падают в рантайме, а не во время сборки формы ([b5447c4](https://git.skbkontur.ru/ke/candy-utils/commit/b5447c4)), see [#7247](https://yt.skbkontur.ru/issue/FS-7247)
16
+
1
17
  <a name="2.148.0"></a>
2
18
  # [2.148.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.147.0...release/tools/v2.148.0) (2023-02-20)
3
19
 
@@ -237,12 +237,40 @@ class CandyApiDraftClient {
237
237
  });
238
238
  }
239
239
 
240
- async sendChangeSet(data) {
241
- await this.httpClient.post(this.getDraftPresentationUrl(_DraftPresentationType.DraftPresentationType.inner)).withQueryParams(strangeOptions).withJsonBody(data);
240
+ async sendChangeSet(data, currentDataVersion) {
241
+ const result = await this.httpClient.post(this.getDraftUrl("inner")).withQueryParams({
242
+ dataVersion: currentDataVersion
243
+ }).withJsonBody(data).acceptCode(409); // eslint-disable-next-line no-warning-comments
244
+ //TODO: после выпуска задачи https://yt.skbkontur.ru/issue/FS-7665 отрефакторить и оставить только "dataResult.dataVersion" (правка настроек сериализатора)
245
+
246
+ const getSuccessResult = async () => {
247
+ var _ref, _dataResult$dataVersi;
248
+
249
+ const dataResult = await result.json();
250
+ return {
251
+ dataVersion: (_ref = (_dataResult$dataVersi = dataResult === null || dataResult === void 0 ? void 0 : dataResult.dataVersion) !== null && _dataResult$dataVersi !== void 0 ? _dataResult$dataVersi : dataResult === null || dataResult === void 0 ? void 0 : dataResult.DataVersion) !== null && _ref !== void 0 ? _ref : (0, _TypingUtils.reject)("Invalid dataVersion after applying change set.")
252
+ };
253
+ };
254
+
255
+ return result.status == 200 ? await getSuccessResult() : result.status;
242
256
  }
243
257
 
244
- sendChangeSetSync(data) {
245
- return this.httpClient.postSync(this.getDraftPresentationUrl(_DraftPresentationType.DraftPresentationType.inner), strangeOptions, data);
258
+ sendChangeSetSync(data, currentDataVersion) {
259
+ const result = this.httpClient.postSync(this.getDraftPresentationUrl(_DraftPresentationType.DraftPresentationType.inner), {
260
+ dataVersion: currentDataVersion
261
+ }, data); // eslint-disable-next-line no-warning-comments
262
+ //TODO: после выпуска задачи https://yt.skbkontur.ru/issue/FS-7665 отрефакторить и оставить только "dataResult.dataVersion" (правка настроек сериализатора)
263
+
264
+ const getSuccessResultSync = () => {
265
+ var _ref2, _dataResult$dataVersi2;
266
+
267
+ const dataResult = result.json();
268
+ return {
269
+ dataVersion: (_ref2 = (_dataResult$dataVersi2 = dataResult === null || dataResult === void 0 ? void 0 : dataResult.dataVersion) !== null && _dataResult$dataVersi2 !== void 0 ? _dataResult$dataVersi2 : dataResult === null || dataResult === void 0 ? void 0 : dataResult.DataVersion) !== null && _ref2 !== void 0 ? _ref2 : (0, _TypingUtils.reject)("Invalid dataVersion after applying change set.")
270
+ };
271
+ };
272
+
273
+ return result.status == 200 ? getSuccessResultSync() : result.status;
246
274
  }
247
275
 
248
276
  async getRequisites(requisiteList) {
@@ -259,7 +287,7 @@ class CandyApiDraftClient {
259
287
  }).withJsonBody(rules).json();
260
288
  }
261
289
 
262
- getPartialInnerAsJsonTree(rules, maxInstanceCount) {
290
+ async getPartialInnerAsJsonTree(rules, maxInstanceCount) {
263
291
  return this.httpClient.post(this.getDraftUrl("get-partial-inner")).withQueryParams(maxInstanceCount != undefined && {
264
292
  maxInstanceCount: maxInstanceCount.toString()
265
293
  }).withQueryParams({
@@ -267,6 +295,16 @@ class CandyApiDraftClient {
267
295
  }).withJsonBody(rules).json();
268
296
  }
269
297
 
298
+ getRawPartialInnerAsJsonTree(rules, maxInstanceCount) {
299
+ return this.httpClient.post(this.getDraftUrl("get-partial-inner2")).withQueryParams(maxInstanceCount != undefined && {
300
+ maxInstanceCount: maxInstanceCount.toString()
301
+ }).withJsonBody(rules).json();
302
+ }
303
+
304
+ getDataVersion() {
305
+ return this.httpClient.get(this.getDraftUrl("inner/get-data-version")).json();
306
+ }
307
+
270
308
  async getExplanatoryNote() {
271
309
  return await this.httpClient.get(this.getDraftPresentationUrl(_DraftPresentationType.DraftPresentationType.explanatoryNote)).json();
272
310
  }
@@ -495,6 +533,13 @@ class CandyApiDraftClient {
495
533
  await this.httpClient.post(this.getDraftUrl("inner/delete-instances")).withJsonBody(parameters);
496
534
  }
497
535
 
536
+ async runMassAction(actionId, parameters) {
537
+ const queryParams = {
538
+ actionId: actionId
539
+ };
540
+ await this.httpClient.post(this.getDraftUrl("inner/mass-action")).withQueryParams(queryParams).withJsonBody(parameters);
541
+ }
542
+
498
543
  print(type, body) {
499
544
  return this.httpClient.post(this.getDraftUrl(`presentations/inner/print/${type}`)).withJsonBody(body).json();
500
545
  }
@@ -502,4 +547,4 @@ class CandyApiDraftClient {
502
547
  }
503
548
 
504
549
  exports.CandyApiDraftClient = CandyApiDraftClient;
505
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DYW5keUFwaUNsaWVudC50cyJdLCJuYW1lcyI6WyJzdHJhbmdlT3B0aW9ucyIsInNyYyIsImRhdGFWZXJzaW9uIiwiU2VydmVyRXJyb3JzIiwiQ2FuZHlBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiZm9yRHJhZnQiLCJkcmFmdEZ1bGxJZCIsIkNhbmR5QXBpRHJhZnRDbGllbnQiLCJjcmVhdGVEaWdlc3RBcGlDbGllbnQiLCJEaWdlc3RBcGlDbGllbnQiLCJnZXRJbmZvQnlJbm5zIiwiaW5ucyIsInBhdGhzIiwibWFwIiwiaW5uIiwicmVzcG9uc2UiLCJwb3N0IiwiZ2V0RHJhZnRVcmwiLCJ3aXRoSnNvbkJvZHkiLCJqc29uIiwicmVzdWx0IiwiaW5uU2VydmVyVmFsdWUiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImVycm9yIiwiZXJyb3JDb2RlIiwiRm9jdXNTZXJ2ZXJFcnJvckNvZGUiLCJOb0lubkVycm9yIiwiZ2V0QWxsR2Z2cyIsImFib3J0U2lnbmFsIiwiYm9keSIsImdldCIsImNyZWF0ZURyYWZ0RnJvbURyaXZlIiwibnMiLCJmdWZEcml2ZVVyaSIsIndpdGhRdWVyeVBhcmFtcyIsIndpdGhBYm9ydFNpZ25hbCIsImNyZWF0ZUVtcHR5RHJhZnQiLCJnZnYiLCJjcmVhdGVEcmFmdCIsImZ1ZkNvbnRlbnQiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiRXJyb3IiLCJjaGVja0FsaXZlIiwiZHJhZnRSZWxhdGVkVXJsIiwiZHJhZnRJZCIsImdldEZlYXR1cmVGbGFncyIsImdldEhyZWZUb0lubmVyRWRpdG9yIiwidXJsIiwiZ2V0SHJlZkRvd25sb2FkRnVmIiwiZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nIiwiZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZiIsImdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uIiwiRHJhZnRQcmVzZW50YXRpb25UeXBlIiwiaW5uZXJGdWYiLCJnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8iLCJjbGllbnRJbmZvIiwiZ2V0SHJlZlRvRG93bmxvYWRGb3Jtc0NsaWVudEluZm8iLCJmb3Jtc0NsaWVudEluZm8iLCJnZXRIcmVmRG93bmxvYWRJbm5lciIsImlubmVyIiwiZ2V0RXJyb3JMb2ciLCJnZXREcmFmdFByZXNlbnRhdGlvblVybCIsImVycm9yTG9nIiwiZ2V0RXJyb3JMb2dXaXRoQ2hlY2tTY2VuYXJpb3MiLCJjaGVja1NjZW5hcmlvcyIsImdldFRhc2tCeUlkIiwidGFza0lkIiwidGFza3MiLCJnZXRBbGxUYXNrcyIsIk9iamVjdCIsInZhbHVlcyIsIngiLCJlbnF1ZXVlVGFzayIsInRhc2tJbmZvIiwiYWRkZWQiLCJjaGFuZ2VkIiwiaWQiLCJyZW1vdmVkIiwiY2FuY2VsVGFzayIsImdldEV4cGVydEVycm9yTG9nIiwiZXJyb3Jsb2dFeHBlcnQiLCJnZXRIcmVmVG9FcnJvckxvZ1BkZiIsImVycm9yTG9nTmFtZSIsInByb3BzTmFtZSIsInByb3BzRHJpdmVOYW1lIiwiY2xlYXJEcmFmdCIsImNvbnZlcnREcmFmdEZyb21QcmV2R2Z2IiwicHJldkdmdkRyYWZ0SWQiLCJzZW5kQ2hhbmdlU2V0IiwiZGF0YSIsInNlbmRDaGFuZ2VTZXRTeW5jIiwicG9zdFN5bmMiLCJnZXRSZXF1aXNpdGVzIiwicmVxdWlzaXRlTGlzdCIsImdldElubmVyIiwiZ2V0UGFydGlhbElubmVyIiwicnVsZXMiLCJtYXhJbnN0YW5jZUNvdW50IiwidG9TdHJpbmciLCJnZXRQYXJ0aWFsSW5uZXJBc0pzb25UcmVlIiwiZm9ybWF0IiwiZ2V0RXhwbGFuYXRvcnlOb3RlIiwiZXhwbGFuYXRvcnlOb3RlIiwiZ2V0QXR0YWNobWVudEJ5SWQiLCJhdHRhY2htZW50SWQiLCJnZXRBbGxBdHRhY2htZW50cyIsInJlbW92ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudElkcyIsImNyZWF0ZU9yVXBkYXRlQXR0YWNobWVudHMiLCJhdHRhY2htZW50cyIsImF0dGFjaG1lbnQiLCJjb250ZW50VXJpIiwibWV0YSIsInNldFByZXNlbnRhdGlvbiIsInByZXNlbnRhdGlvblR5cGUiLCJjb250ZW50IiwicmVxdWVzdCIsInB1dCIsIndpdGhSYXdCb2R5IiwicGF0Y2hQcmVzZW50YXRpb24iLCJwcmVzZW50YXRpb25Db250ZW50IiwicGF0Y2giLCJnZXRGaWxlUHJvcGVydGllcyIsImRyaXZlVXJpIiwiYWNjZXB0Q29kZSIsInN0YXR1cyIsInByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyIsImVycm9yRGF0YSIsIkZ1ZlNpemVUb29MYXJnZUVycm9yIiwibWVzc2FnZSIsIkh0dHBFcnJvciIsInVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzIiwiZHJpdmVVcmlzIiwic2VydmVyRXJyb3IiLCJpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXMiLCJzb3VyY2VzVG90YWxDb3VudCIsImUiLCJVbmtub3duRXJyb3IiLCJhY2NlcHRUcmFuc2ZlclR5cGUiLCJ0cmFuc2ZlclR5cGUiLCJ0eXBlSWQiLCJzZXRGdWZCeURyaXZlVXJpIiwiY29tYmluZUZ1ZkJ5RHJpdmVVcmkiLCJjb21iaW5lTWV0aG9kIiwibXVsdGlwbGVDb21iaW5lRnVmQnlEcml2ZVVyaSIsIm5vcm1hbGl6ZUJ5UnVsZXMiLCJzZXRBbGxDaGVja2JveGVzRm9yMTEzMTAzIiwiZW5hYmxlZCIsInVyaSIsInNldEVuYWJsZWQiLCJzZWFyY2hJbnN0YW5jZXNCeVRleHQiLCJ0ZXh0IiwicGF0aHNQcmVmaXgiLCJwYXRoc1RvU2VhcmNoIiwibWF4SW5zdGFuY2VDb3VudFBhcmFtcyIsInBhcmFtcyIsInNlYXJjaFN0cmluZyIsImN1c3RvbU5vcm1hbGl6ZSIsIm5vcm1hbGl6ZXJJZCIsInBhdGhQcmVmaXhlcyIsImltcG9ydEVtcGxveWVlcyIsImRlbGV0ZUluc3RhbmNlcyIsIm11bHRpcGxpY2l0eVBhdGgiLCJpbnN0YW5jZXMiLCJwYXJhbWV0ZXJzIiwiaW5zdGFuY2VOdW1iZXJzIiwicHJpbnQiLCJ0eXBlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRUE7O0FBRUE7O0FBV0E7O0FBRUE7O0FBT0E7O0FBR0E7O0FBRUE7O0FBS0EsTUFBTUEsY0FBYyxHQUFHO0FBQUVDLEVBQUFBLEdBQUcsRUFBRSxXQUFQO0FBQW9CQyxFQUFBQSxXQUFXLEVBQUU7QUFBakMsQ0FBdkI7SUFFWUMsWTs7O1dBQUFBLFk7QUFBQUEsRUFBQUEsWTtBQUFBQSxFQUFBQSxZO0FBQUFBLEVBQUFBLFk7R0FBQUEsWSw0QkFBQUEsWTs7QUFNTCxNQUFNQyxjQUFOLENBQWdEO0FBRzVDQyxFQUFBQSxXQUFXLENBQ2RDLFNBRGMsRUFFZEMsT0FGYyxFQUdkQyxZQUhjLEVBSWRDLGNBSmMsRUFLaEI7QUFBQSxTQVBlQyxVQU9mO0FBQ0UsU0FBS0EsVUFBTCxHQUFrQixJQUFJQyxzQkFBSixDQUFlTCxTQUFmLEVBQTBCQyxPQUExQixFQUFtQyxzREFBNkJFLGNBQTdCLENBQW5DLEVBQWlGO0FBQy9GRCxNQUFBQSxZQUFZLEVBQUVBO0FBRGlGLEtBQWpGLENBQWxCO0FBR0g7O0FBRU1JLEVBQUFBLFFBQVEsQ0FBQ0MsV0FBRCxFQUFpRDtBQUM1RCxXQUFPLElBQUlDLG1CQUFKLENBQXdCLEtBQUtKLFVBQTdCLEVBQXlDRyxXQUF6QyxDQUFQO0FBQ0g7O0FBRU1FLEVBQUFBLHFCQUFxQixDQUFDRixXQUFELEVBQTZDO0FBQ3JFLFdBQU8sSUFBSUcsZ0NBQUosQ0FBb0IsS0FBS04sVUFBekIsRUFBcUNHLFdBQXJDLENBQVA7QUFDSDs7QUFFeUIsUUFBYkksYUFBYSxDQUFDSixXQUFELEVBQTJCSyxJQUEzQixFQUErRTtBQUNyRyxVQUFNQyxLQUFLLEdBQUdELElBQUksQ0FBQ0UsR0FBTCxDQUFTQyxHQUFHLElBQUssVUFBU0EsR0FBSSxFQUE5QixDQUFkO0FB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Q0g7O0FBRTJCLFFBQWY2QyxlQUFlLENBQUNDLGdCQUFELEVBQTJCQyxTQUEzQixFQUErRDtBQUN2RixVQUFNQyxVQUFVLEdBQUc7QUFBRUYsTUFBQUEsZ0JBQWdCLEVBQUVBLGdCQUFwQjtBQUFzQ0csTUFBQUEsZUFBZSxFQUFFRjtBQUF2RCxLQUFuQjtBQUNBLFVBQU0sS0FBS3BLLFVBQUwsQ0FBZ0JhLElBQWhCLENBQXFCLEtBQUtDLFdBQUwsQ0FBaUIsd0JBQWpCLENBQXJCLEVBQWlFQyxZQUFqRSxDQUE4RXNKLFVBQTlFLENBQU47QUFDSDs7QUFFTUUsRUFBQUEsS0FBSyxDQUFDQyxJQUFELEVBQWtCN0ksSUFBbEIsRUFBMkQ7QUFDbkUsV0FBTyxLQUFLM0IsVUFBTCxDQUNGYSxJQURFLENBQ0csS0FBS0MsV0FBTCxDQUFrQiw2QkFBNEIwSixJQUFLLEVBQW5ELENBREgsRUFFRnpKLFlBRkUsQ0FFV1ksSUFGWCxFQUdGWCxJQUhFLEVBQVA7QUFJSDs7QUFsWjREIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVqZWN0IH0gZnJvbSBcIi4uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgeyBGZXRjaCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0ZldGNoSW1wbGVtZW50YXRpb24vRmV0Y2hcIjtcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvciB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0h0dHBDbGllbnRcIjtcbmltcG9ydCB7IEh0dHBTdGF0dXNDb2RlLCBJSHR0cENsaWVudCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0lIdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1vZGUsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9BdXRoZW50aWNhdGlvbk1vZGVcIjtcblxuaW1wb3J0IHsgQ2hlY2tTY2VuYXJpb1R5cGUsIElDYW5keUFwaUNsaWVudCwgSUNhbmR5QXBpRHJhZnRDbGllbnQgfSBmcm9tIFwiLi9JQ2FuZHlBcGlDbGllbnRcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB7IFNlcnZlcklubmVyUmVzcG9uc2UsIFNlcnZlckpzb25SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlcklubmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IEZpbGVQcm9wZXJ0aWVzLCBTZXJ2ZXJFcnJvclJlc3BvbnNlLCBVcGxvYWRGaWxlUHJvcGVydGllc1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0ZpbGVQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgeyBDcmVhdGVEcmFmdFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQ3JlYXRlRHJhZnQvQ3JlYXRlRHJhZnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9FeHBsYW5hdG9yeU5vdGUvQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2VcIjtcbmltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcbmltcG9ydCB7IFNlcnZlckNoYW5nZVNldCB9IGZyb20gXCIuL1R5cGVzL0NoYW5nZVNldC9TZXJ2ZXJDaGFuZ2VTZXRcIjtcbmltcG9ydCB7IFNlcnZlclRhc2ssIFZlcmlmeUFuZEZpeEZuc1JlcXVpcmVtZW50c1Rhc2tJbmZvIH0gZnJvbSBcIi4vVHlwZXMvVGFza3MvVGFza3NcIjtcbmltcG9ydCB7IEZvY3VzU2VydmVyRXJyb3JDb2RlLCBHZXRCeUlublJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNUeXBlc1wiO1xuaW1wb3J0IHsgQXR0YWNoSW5mbyB9IGZyb20gXCIuL1R5cGVzL0F0dGFjaG1lbnRzL0F0dGFjbWVudHNcIjtcbmltcG9ydCB7IERyYWZ0UHJlc2VudGF0aW9uVHlwZSB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvRHJhZnRQcmVzZW50YXRpb25UeXBlXCI7XG5pbXBvcnQgeyBQcmVzZW50YXRpb25Db250ZW50IH0gZnJvbSBcIi4vVHlwZXMvUHJlc2VudGF0aW9ucy9QcmVzZW50YXRpb25Db250ZW50XCI7XG5pbXBvcnQgeyBDb252ZXJ0RHJhZnRSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbnZlcnREcmFmdFJlcXVlc3RcIjtcbmltcG9ydCB7IEdldEF0dGFjaG1lbnRzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9HZXRBdHRhY2htZW50c1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNTZXJ2ZXJSZXNwb25zZVwiO1xuaW1wb3J0IHsgR2V0VGFza3NTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL0dldFRhc2tzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJlcXVpc2l0ZXNSZXNwb25zZVwiO1xuaW1wb3J0IHsgaXNCdWZmZXIgfSBmcm9tIFwiLi9Jc0J1ZmZlclwiO1xuaW1wb3J0IHsgQ29tYmluZUZ1ZlJlc3VsdCwgRnVmQ29tYmluZU1ldGhvZCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9Db21iaW5lRnVmUmVzdWx0XCI7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ3NSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZlYXR1cmVGbGFncy9GZWF0dXJlRmxhZ3NSZXNwb25zZVwiO1xuaW1wb3J0IHsgRGlnZXN0QXBpQ2xpZW50IH0gZnJvbSBcIi4vRGlnZXN0QXBpQ2xpZW50L0RpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgSURpZ2VzdEFwaUNsaWVudCB9IGZyb20gXCIuL0RpZ2VzdEFwaUNsaWVudC9JRGlnZXN0QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBGdWZTaXplVG9vTGFyZ2VFcnJvciB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9GdWZTaXplVG9vTGFyZ2VFcnJvclwiO1xuaW1wb3J0IHsgSW1wb3J0RW1wbG95ZWVzUmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL1N0YWZmL0ltcG9ydEVtcGxveWVlc1JlcXVlc3RcIjtcbmltcG9ydCB7IFByaW50VHlwZSB9IGZyb20gXCIuL1R5cGVzL1ByaW50L1ByaW50VHlwZVwiO1xuaW1wb3J0IHsgUHJpbnRSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL1ByaW50L1ByaW50UmVzcG9uc2VcIjtcblxuY29uc3Qgc3RyYW5nZU9wdGlvbnMgPSB7IHNyYzogXCJjaGFuZ2VTZXRcIiwgZGF0YVZlcnNpb246IFwiMFwiIH07XG5cbmV4cG9ydCBlbnVtIFNlcnZlckVycm9ycyB7XG4gICAgRnVmU2l6ZVRvb0xhcmdlID0gXCJGdWZTaXplVG9vTGFyZ2VcIixcbiAgICBCYWRSZXF1ZXN0ID0gXCJCYWRSZXF1ZXN0XCIsXG4gICAgVW5rbm93bkVycm9yID0gXCJVbmtub3duRXJyb3JcIixcbn1cblxuZXhwb3J0IGNsYXNzIENhbmR5QXBpQ2xpZW50IGltcGxlbWVudHMgSUNhbmR5QXBpQ2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBmZXRjaEltcGw6IEZldGNoLFxuICAgICAgICBiYXNlVXJsOiBzdHJpbmcsXG4gICAgICAgIHJlc291cmNlWm9uZTogdW5kZWZpbmVkIHwgc3RyaW5nLFxuICAgICAgICBhdXRoZW50aWNhdGlvbjogdW5kZWZpbmVkIHwgQXV0aGVudGljYXRpb25Nb2RlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IG5ldyBIdHRwQ2xpZW50KGZldGNoSW1wbCwgYmFzZVVybCwgY3JlYXRlQXV0aGVudGljYXRpb25Qcm92aWRlcihhdXRoZW50aWNhdGlvbiksIHtcbiAgICAgICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yRHJhZnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgICAgICByZXR1cm4gbmV3IENhbmR5QXBpRHJhZnRDbGllbnQodGhpcy5odHRwQ2xpZW50LCBkcmFmdEZ1bGxJZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURpZ2VzdEFwaUNsaWVudChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpOiBJRGlnZXN0QXBpQ2xpZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEaWdlc3RBcGlDbGllbnQodGhpcy5odHRwQ2xpZW50LCBkcmFmdEZ1bGxJZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEluZm9CeUlubnMoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkLCBpbm5zOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8R2V0QnlJbm5SZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBwYXRocyA9IGlubnMubWFwKGlubiA9PiBgQGZvY3VzLyR7aW5ufWApO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChkcmFmdEZ1bGxJZCwgXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248Rm9jdXNTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBHZXRCeUlublJlc3BvbnNlID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaW5uIG9mIGlubnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlublNlcnZlclZhbHVlID0gcmVzcG9uc2VbYEBmb2N1cy8ke2lubn1gXT8udmFsdWU7XG4gICAgICAgICAgICBpZiAoaW5uU2VydmVyVmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2lubl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIlNlcnZlciBkb2VzIG5vdCByZXR1cm4gaW5uIGluZm9cIixcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlOiBGb2N1c1NlcnZlckVycm9yQ29kZS5Ob0lubkVycm9yLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpbm5dID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaW5uU2VydmVyVmFsdWUudmFsdWUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGU6IGlublNlcnZlclZhbHVlLmVycm9yQ29kZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBpbm5TZXJ2ZXJWYWx1ZS5lcnJvciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxHZnZzKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KGBidWlsZC1zZXJ2ZXIvZ2Z2c2ApLmpzb248c3RyaW5nW10+KCk7XG4gICAgICAgIHJldHVybiBib2R5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVEcmFmdEZyb21Ecml2ZShcbiAgICAgICAgbnM6IHN0cmluZyxcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0LWZyb20tZHJpdmVgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7XG4gICAgICAgICAgICAgICAgbnM6IG5zLFxuICAgICAgICAgICAgICAgIGZ1ZkRyaXZlVXJpOiBmdWZEcml2ZVVyaSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRW1wdHlEcmFmdChuczogc3RyaW5nLCBnZnY6IHN0cmluZywgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQsIGZ1ZkNvbnRlbnQ6IEJ1ZmZlcik6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT47XG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogdW5kZWZpbmVkIHwgc3RyaW5nLCBmdWZDb250ZW50PzogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIGlmIChnZnYgPT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoZnVmQ29udGVudClcbiAgICAgICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZnYgIT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoQnVmZmVyLmZyb20oW10pKVxuICAgICAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdmdiA9PSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgZHJhZnQ6IG5vIGdmdiBhbmQgbm8gZnVmIHNwZWNpZmllZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihmdWZDb250ZW50KVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2hlY2tBbGl2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChgX3N0YXR1cy9waW5nYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGRyYWZ0UmVsYXRlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHtkcmFmdEZ1bGxJZC5kcmFmdElkfS8ke2RyYWZ0UmVsYXRlZFVybH1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGZWF0dXJlRmxhZ3MoKTogUHJvbWlzZTxGZWF0dXJlRmxhZ3NSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChcInYxL2ZlYXR1cmVzL2ZsYWdzXCIpLmpzb248RmVhdHVyZUZsYWdzUmVzcG9uc2U+KCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2FuZHlBcGlEcmFmdENsaWVudCBpbXBsZW1lbnRzIElDYW5keUFwaURyYWZ0Q2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50LCBkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gaHR0cENsaWVudDtcbiAgICAgICAgdGhpcy5kcmFmdEZ1bGxJZCA9IGRyYWZ0RnVsbElkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Jbm5lckVkaXRvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybChgaW5uZXItZWRpdG9yL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRGdWYoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcImdldC1mdWZcIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2coKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcImNvbnZlcnNpb25cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lckZ1Zik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuY2xpZW50SW5mbyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkRm9ybXNDbGllbnRJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5mb3Jtc0NsaWVudEluZm8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRJbm5lcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFcnJvckxvZygpOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmVycm9yTG9nKSkuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXJyb3JMb2dXaXRoQ2hlY2tTY2VuYXJpb3MoY2hlY2tTY2VuYXJpb3M6IENoZWNrU2NlbmFyaW9UeXBlW10pOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJlcnJvcmxvZ1wiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoeyBjaGVja1NjZW5hcmlvczogY2hlY2tTY2VuYXJpb3MgfSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlckVycm9yTG9nPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRUYXNrQnlJZCh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8U2VydmVyVGFzayB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCB0YXNrcyA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAdGFzay8qYF0pXG4gICAgICAgICAgICAuanNvbjxHZXRUYXNrc1NlcnZlclJlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gdGFza3NbYEB0YXNrLyR7dGFza0lkfWBdPy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsVGFza3MoKTogUHJvbWlzZTxTZXJ2ZXJUYXNrW10+IHtcbiAgICAgICAgY29uc3QgdGFza3MgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQHRhc2svKmBdKVxuICAgICAgICAgICAgLmpzb248R2V0VGFza3NTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGFza3MpLm1hcCh4ID0+IHgudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbnF1ZXVlVGFzayh0YXNrSWQ6IHN0cmluZywgdGFza0luZm86IFZlcmlmeUFuZEZpeEZuc1JlcXVpcmVtZW50c1Rhc2tJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7XG4gICAgICAgICAgICAgICAgICAgIFtgQHRhc2svJHt0YXNrSWR9YF06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRhc2tJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHRhc2tJZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IFtdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNhbmNlbFRhc2sodGFza0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHN0cmFuZ2VPcHRpb25zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keSh7XG4gICAgICAgICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgICAgICAgIGNoYW5nZWQ6IHt9LFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IFtgQHRhc2svJHt0YXNrSWR9YF0sXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXhwZXJ0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmVycm9ybG9nRXhwZXJ0KSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlckVycm9yTG9nPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9FcnJvckxvZ1BkZihlcnJvckxvZ05hbWU6IHN0cmluZywgcHJvcHNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybCh0aGlzLmdldERyYWZ0VXJsKFwicHJlc2VudGF0aW9ucy9lcnJvckxvZy9wcmludFwiKSwge1xuICAgICAgICAgICAgZXJyb3JMb2dOYW1lOiBlcnJvckxvZ05hbWUsXG4gICAgICAgICAgICBwcm9wc0RyaXZlTmFtZTogcHJvcHNOYW1lLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2xlYXJEcmFmdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcImNsZWFyXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY29udmVydERyYWZ0RnJvbVByZXZHZnYoeyBwcmV2R2Z2RHJhZnRJZCwgZ2Z2IH06IENvbnZlcnREcmFmdFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcImNvbnZlcnRcIikpLndpdGhRdWVyeVBhcmFtcyh7XG4gICAgICAgICAgICBpZDogcHJldkdmdkRyYWZ0SWQsXG4gICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlbmRDaGFuZ2VTZXQoZGF0YTogU2VydmVyQ2hhbmdlU2V0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbmRDaGFuZ2VTZXRTeW5jKGRhdGE6IFNlcnZlckNoYW5nZVNldCk6IEh0dHBTdGF0dXNDb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0U3luYyhcbiAgICAgICAgICAgIHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSxcbiAgICAgICAgICAgIHN0cmFuZ2VPcHRpb25zLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRSZXF1aXNpdGVzKHJlcXVpc2l0ZUxpc3Q6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocmVxdWlzaXRlTGlzdClcbiAgICAgICAgICAgIC5qc29uPFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5uZXIocGF0aHM6IHVuZGVmaW5lZCB8IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJJbm5lclJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248U2VydmVySW5uZXJSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyKHJ1bGVzOiBbXCIqXCJdIHwgc3RyaW5nW10sIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXIpOiBQcm9taXNlPFNlcnZlcklubmVyUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShydWxlcylcbiAgICAgICAgICAgIC5qc29uPFNlcnZlcklubmVyUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcnRpYWxJbm5lckFzSnNvblRyZWUocnVsZXM6IFtcIipcIl0gfCBzdHJpbmdbXSwgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlcik6IFByb21pc2U8U2VydmVySnNvblJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtcGFydGlhbC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMobWF4SW5zdGFuY2VDb3VudCAhPSB1bmRlZmluZWQgJiYgeyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50LnRvU3RyaW5nKCkgfSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBmb3JtYXQ6IFwiSnNvblRyZWVcIiB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShydWxlcylcbiAgICAgICAgICAgIC5qc29uPFNlcnZlckpzb25SZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXhwbGFuYXRvcnlOb3RlKCk6IFByb21pc2U8Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5leHBsYW5hdG9yeU5vdGUpKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEF0dGFjaG1lbnRCeUlkKGF0dGFjaG1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBdHRhY2hJbmZvPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAYXR0YWNobWVudC8ke2F0dGFjaG1lbnRJZH1gXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiByZXN1bHRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudElkfWBdPy52YWx1ZSA/PyByZWplY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsQXR0YWNobWVudHMoKTogUHJvbWlzZTxBdHRhY2hJbmZvW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEBhdHRhY2htZW50LypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlc3VsdCkubWFwKHggPT4geC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBhdHRhY2htZW50SWRzLm1hcChpZCA9PiBgQGF0dGFjaG1lbnQvJHtpZH1gKSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzOiByZWFkb25seSBBdHRhY2hJbmZvW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHMpIHtcbiAgICAgICAgICAgIGNoYW5nZWRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudC5pZH1gXSA9IHtcbiAgICAgICAgICAgICAgICBjb250ZW50VXJpOiBhdHRhY2htZW50LmNvbnRlbnRVcmksXG4gICAgICAgICAgICAgICAgaWQ6IGF0dGFjaG1lbnQuaWQsXG4gICAgICAgICAgICAgICAgbWV0YTogYXR0YWNobWVudC5tZXRhLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDogY2hhbmdlZCxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRQcmVzZW50YXRpb24ocHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlLCBjb250ZW50OiBzdHJpbmcgfCB1bmtub3duKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5odHRwQ2xpZW50LnB1dCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGUpKTtcbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC53aXRoUmF3Qm9keShjb250ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0J1ZmZlcihjb250ZW50KSkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aFJhd0JvZHkoY29udGVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC53aXRoSnNvbkJvZHkoY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcmVxdWVzdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcGF0Y2hQcmVzZW50YXRpb24oXG4gICAgICAgIHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSxcbiAgICAgICAgcHJlc2VudGF0aW9uQ29udGVudDogUHJlc2VudGF0aW9uQ29udGVudFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSkud2l0aEpzb25Cb2R5KHByZXNlbnRhdGlvbkNvbnRlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTxGaWxlUHJvcGVydGllcyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldChgdjEvZmlsZXMvZ2V0LXByb3BlcnRpZXNgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGRyaXZlVXJpOiBkcml2ZVVyaSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPEZpbGVQcm9wZXJ0aWVzPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMoZHJpdmVVcmk6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9wcmVwYXJlLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYsIGRyaXZlVXJpOiBkcml2ZVVyaSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3JDb2RlID09PSBcIkZ1ZlNpemVUb29MYXJnZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZ1ZlNpemVUb29MYXJnZUVycm9yKGVycm9yRGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248RmlsZVByb3BlcnRpZXM+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvZmlsZXMvdXBsb2FkLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhKc29uQm9keShkcml2ZVVyaXMpXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSwgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLCBzb3VyY2VzVG90YWxDb3VudDogMCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4oKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlcnZlckVycm9yOiBTZXJ2ZXJFcnJvcnMuVW5rbm93bkVycm9yLFxuICAgICAgICAgICAgICAgIGludmFsaWRTb3VyY2VEcml2ZUNvbnRlbnROYW1lczogXCJcIixcbiAgICAgICAgICAgICAgICBzb3VyY2VzVG90YWxDb3VudDogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYWNjZXB0VHJhbnNmZXJUeXBlKFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICB0cmFuc2ZlclR5cGU6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8U2VydmVyRXJyb3JSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9L3RyYW5zZmVyL2NvbWJpbmVgKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBmdWZEcml2ZVVyaTogZnVmRHJpdmVVcmksIHR5cGVJZDogdHJhbnNmZXJUeXBlIH0pXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRGdWZCeURyaXZlVXJpKGRyaXZlVXJpOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnB1dCh0aGlzLmdldERyYWZ0VXJsKFwic2V0LWZ1ZlwiKSkud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb21iaW5lRnVmQnlEcml2ZVVyaShcbiAgICAgICAgZHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZCxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2NvbWJpbmUtd2l0aC1mdWZcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZnVmRHJpdmVVcmk6IGRyaXZlVXJpLCBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPENvbWJpbmVGdWZSZXN1bHQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG11bHRpcGxlQ29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW10sXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2RcbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9jb21iaW5lLXdpdGgtZnVmc1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpcyk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxDb21iaW5lRnVmUmVzdWx0PigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBub3JtYWxpemVCeVJ1bGVzKHJ1bGVzOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcInRlc3Qtbm9ybWFsaXplXCIpKS53aXRoSnNvbkJvZHkocnVsZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24ocHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdFJlbGF0ZWRVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9LyR7ZHJhZnRSZWxhdGVkVXJsfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy8ke3ByZXNlbnRhdGlvblR5cGUudG9TdHJpbmcoKX1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0QWxsQ2hlY2tib3hlc0ZvcjExMzEwMyhlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9jaGVjay1hbGxcIik7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh1cmkpLndpdGhRdWVyeVBhcmFtcyh7IHNldEVuYWJsZWQ6IGVuYWJsZWQgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEluc3RhbmNlc0J5VGV4dChcbiAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICBwYXRoc1ByZWZpeDogc3RyaW5nLFxuICAgICAgICBwYXRoc1RvU2VhcmNoOiBzdHJpbmdbXSxcbiAgICAgICAgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlclxuICAgICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgbWF4SW5zdGFuY2VDb3VudFBhcmFtcyA9IG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkID8geyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50IH0gOiB7fTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBzZWFyY2hTdHJpbmc6IHRleHQsIHBhdGhzUHJlZml4OiBwYXRoc1ByZWZpeCwgLi4ubWF4SW5zdGFuY2VDb3VudFBhcmFtcyB9O1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvc2VhcmNoLWJ5LXN0cmluZ1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMocGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRoc1RvU2VhcmNoKVxuICAgICAgICAgICAgLmpzb248c3RyaW5nW10+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGN1c3RvbU5vcm1hbGl6ZShub3JtYWxpemVySWQ6IHN0cmluZywgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IG5vcm1hbGl6ZXJJZDogbm9ybWFsaXplcklkIH07XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL2N1c3RvbS1ub3JtYWxpemVcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHBhcmFtcylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aFByZWZpeGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0RW1wbG95ZWVzKHJlcXVlc3Q6IEltcG9ydEVtcGxveWVlc1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHRoaXMuZ2V0RHJhZnRVcmwoXCJzdGFmZlwiKSkud2l0aEpzb25Cb2R5KHJlcXVlc3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkZWxldGVJbnN0YW5jZXMobXVsdGlwbGljaXR5UGF0aDogc3RyaW5nLCBpbnN0YW5jZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7IG11bHRpcGxpY2l0eVBhdGg6IG11bHRpcGxpY2l0eVBhdGgsIGluc3RhbmNlTnVtYmVyczogaW5zdGFuY2VzIH07XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9kZWxldGUtaW5zdGFuY2VzXCIpKS53aXRoSnNvbkJvZHkocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcHVibGljIHByaW50KHR5cGU6IFByaW50VHlwZSwgYm9keT86IHN0cmluZ1tdKTogUHJvbWlzZTxQcmludFJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoYHByZXNlbnRhdGlvbnMvaW5uZXIvcHJpbnQvJHt0eXBlfWApKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShib2R5KVxuICAgICAgICAgICAgLmpzb248UHJpbnRSZXNwb25zZT4oKTtcbiAgICB9XG59XG4iXX0=
550
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DYW5keUFwaUNsaWVudC50cyJdLCJuYW1lcyI6WyJzdHJhbmdlT3B0aW9ucyIsInNyYyIsImRhdGFWZXJzaW9uIiwiU2VydmVyRXJyb3JzIiwiQ2FuZHlBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiZm9yRHJhZnQiLCJkcmFmdEZ1bGxJZCIsIkNhbmR5QXBpRHJhZnRDbGllbnQiLCJjcmVhdGVEaWdlc3RBcGlDbGllbnQiLCJEaWdlc3RBcGlDbGllbnQiLCJnZXRJbmZvQnlJbm5zIiwiaW5ucyIsInBhdGhzIiwibWFwIiwiaW5uIiwicmVzcG9uc2UiLCJwb3N0IiwiZ2V0RHJhZnRVcmwiLCJ3aXRoSnNvbkJvZHkiLCJqc29uIiwicmVzdWx0IiwiaW5uU2VydmVyVmFsdWUiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImVycm9yIiwiZXJyb3JDb2RlIiwiRm9jdXNTZXJ2ZXJFcnJvckNvZGUiLCJOb0lubkVycm9yIiwiZ2V0QWxsR2Z2cyIsImFib3J0U2lnbmFsIiwiYm9keSIsImdldCIsImNyZWF0ZURyYWZ0RnJvbURyaXZlIiwibnMiLCJmdWZEcml2ZVVyaSIsIndpdGhRdWVyeVBhcmFtcyIsIndpdGhBYm9ydFNpZ25hbCIsImNyZWF0ZUVtcHR5RHJhZnQiLCJnZnYiLCJjcmVhdGVEcmFmdCIsImZ1ZkNvbnRlbnQiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiRXJyb3IiLCJjaGVja0FsaXZlIiwiZHJhZnRSZWxhdGVkVXJsIiwiZHJhZnRJZCIsImdldEZlYXR1cmVGbGFncyIsImdldEhyZWZUb0lubmVyRWRpdG9yIiwidXJsIiwiZ2V0SHJlZkRvd25sb2FkRnVmIiwiZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nIiwiZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZiIsImdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uIiwiRHJhZnRQcmVzZW50YXRpb25UeXBlIiwiaW5uZXJGdWYiLCJnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8iLCJjbGllbnRJbmZvIiwiZ2V0SHJlZlRvRG93bmxvYWRGb3Jtc0NsaWVudEluZm8iLCJmb3Jtc0NsaWVudEluZm8iLCJnZXRIcmVmRG93bmxvYWRJbm5lciIsImlubmVyIiwiZ2V0RXJyb3JMb2ciLCJnZXREcmFmdFByZXNlbnRhdGlvblVybCIsImVycm9yTG9nIiwiZ2V0RXJyb3JMb2dXaXRoQ2hlY2tTY2VuYXJpb3MiLCJjaGVja1NjZW5hcmlvcyIsImdldFRhc2tCeUlkIiwidGFza0lkIiwidGFza3MiLCJnZXRBbGxUYXNrcyIsIk9iamVjdCIsInZhbHVlcyIsIngiLCJlbnF1ZXVlVGFzayIsInRhc2tJbmZvIiwiYWRkZWQiLCJjaGFuZ2VkIiwiaWQiLCJyZW1vdmVkIiwiY2FuY2VsVGFzayIsImdldEV4cGVydEVycm9yTG9nIiwiZXJyb3Jsb2dFeHBlcnQiLCJnZXRIcmVmVG9FcnJvckxvZ1BkZiIsImVycm9yTG9nTmFtZSIsInByb3BzTmFtZSIsInByb3BzRHJpdmVOYW1lIiwiY2xlYXJEcmFmdCIsImNvbnZlcnREcmFmdEZyb21QcmV2R2Z2IiwicHJldkdmdkRyYWZ0SWQiLCJzZW5kQ2hhbmdlU2V0IiwiZGF0YSIsImN1cnJlbnREYXRhVmVyc2lvbiIsImFjY2VwdENvZGUiLCJnZXRTdWNjZXNzUmVzdWx0IiwiZGF0YVJlc3VsdCIsIkRhdGFWZXJzaW9uIiwic3RhdHVzIiwic2VuZENoYW5nZVNldFN5bmMiLCJwb3N0U3luYyIsImdldFN1Y2Nlc3NSZXN1bHRTeW5jIiwiZ2V0UmVxdWlzaXRlcyIsInJlcXVpc2l0ZUxpc3QiLCJnZXRJbm5lciIsImdldFBhcnRpYWxJbm5lciIsInJ1bGVzIiwibWF4SW5zdGFuY2VDb3VudCIsInRvU3RyaW5nIiwiZ2V0UGFydGlhbElubmVyQXNKc29uVHJlZSIsImZvcm1hdCIsImdldFJhd1BhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJnZXREYXRhVmVyc2lvbiIsImdldEV4cGxhbmF0b3J5Tm90ZSIsImV4cGxhbmF0b3J5Tm90ZSIsImdldEF0dGFjaG1lbnRCeUlkIiwiYXR0YWNobWVudElkIiwiZ2V0QWxsQXR0YWNobWVudHMiLCJyZW1vdmVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRJZHMiLCJjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJhdHRhY2htZW50IiwiY29udGVudFVyaSIsIm1ldGEiLCJzZXRQcmVzZW50YXRpb24iLCJwcmVzZW50YXRpb25UeXBlIiwiY29udGVudCIsInJlcXVlc3QiLCJwdXQiLCJ3aXRoUmF3Qm9keSIsInBhdGNoUHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uQ29udGVudCIsInBhdGNoIiwiZ2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaSIsInByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyIsImVycm9yRGF0YSIsIkZ1ZlNpemVUb29MYXJnZUVycm9yIiwibWVzc2FnZSIsIkh0dHBFcnJvciIsInVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzIiwiZHJpdmVVcmlzIiwic2VydmVyRXJyb3IiLCJpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXMiLCJzb3VyY2VzVG90YWxDb3VudCIsImUiLCJVbmtub3duRXJyb3IiLCJhY2NlcHRUcmFuc2ZlclR5cGUiLCJ0cmFuc2ZlclR5cGUiLCJ0eXBlSWQiLCJzZXRGdWZCeURyaXZlVXJpIiwiY29tYmluZUZ1ZkJ5RHJpdmVVcmkiLCJjb21iaW5lTWV0aG9kIiwibXVsdGlwbGVDb21iaW5lRnVmQnlEcml2ZVVyaSIsIm5vcm1hbGl6ZUJ5UnVsZXMiLCJzZXRBbGxDaGVja2JveGVzRm9yMTEzMTAzIiwiZW5hYmxlZCIsInVyaSIsInNldEVuYWJsZWQiLCJzZWFyY2hJbnN0YW5jZXNCeVRleHQiLCJ0ZXh0IiwicGF0aHNQcmVmaXgiLCJwYXRoc1RvU2VhcmNoIiwibWF4SW5zdGFuY2VDb3VudFBhcmFtcyIsInBhcmFtcyIsInNlYXJjaFN0cmluZyIsImN1c3RvbU5vcm1hbGl6ZSIsIm5vcm1hbGl6ZXJJZCIsInBhdGhQcmVmaXhlcyIsImltcG9ydEVtcGxveWVlcyIsImRlbGV0ZUluc3RhbmNlcyIsIm11bHRpcGxpY2l0eVBhdGgiLCJpbnN0YW5jZXMiLCJwYXJhbWV0ZXJzIiwiaW5zdGFuY2VOdW1iZXJzIiwicnVuTWFzc0FjdGlvbiIsImFjdGlvbklkIiwicXVlcnlQYXJhbXMiLCJwcmludCIsInR5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFFQTs7QUFXQTs7QUFFQTs7QUFPQTs7QUFHQTs7QUFFQTs7QUFPQSxNQUFNQSxjQUFjLEdBQUc7QUFBRUMsRUFBQUEsR0FBRyxFQUFFLFdBQVA7QUFBb0JDLEVBQUFBLFdBQVcsRUFBRTtBQUFqQyxDQUF2QjtJQUVZQyxZOzs7V0FBQUEsWTtBQUFBQSxFQUFBQSxZO0FBQUFBLEVBQUFBLFk7QUFBQUEsRUFBQUEsWTtHQUFBQSxZLDRCQUFBQSxZOztBQU1MLE1BQU1DLGNBQU4sQ0FBZ0Q7QUFHNUNDLEVBQUFBLFdBQVcsQ0FDZEMsU0FEYyxFQUVkQyxPQUZjLEVBR2RDLFlBSGMsRUFJZEMsY0FKYyxFQUtoQjtBQUFBLFNBUGVDLFVBT2Y7QUFDRSxTQUFLQSxVQUFMLEdBQWtCLElBQUlDLHNCQUFKLENBQWVMLFNBQWYsRUFBMEJDLE9BQTFCLEVBQW1DLHNEQUE2QkUsY0FBN0IsQ0FBbkMsRUFBaUY7QUFDL0ZELE1BQUFBLFlBQVksRUFBRUE7QUFEaUYsS0FBakYsQ0FBbEI7QUFHSDs7QUFFTUksRUFBQUEsUUFBUSxDQUFDQyxXQUFELEVBQWlEO0FBQzVELFdBQU8sSUFBSUMsbUJBQUosQ0FBd0IsS0FBS0osVUFBN0IsRUFBeUNHLFdBQXpDLENBQVA7QUFDSDs7QUFFTUUsRUFBQUEscUJBQXFCLENBQUNGLFdBQUQsRUFBNkM7QUFDckUsV0FBTyxJ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S0FBS0MsV0FBTCxDQUFpQixtQkFBakIsQ0FESixFQUVEa0IsZUFGQyxDQUVlZ0osV0FGZixFQUdEakssWUFIQyxDQUdZNkosVUFIWixDQUFOO0FBSUg7O0FBRU1LLEVBQUFBLEtBQUssQ0FBQ0MsSUFBRCxFQUFrQnZKLElBQWxCLEVBQTJEO0FBQ25FLFdBQU8sS0FBSzNCLFVBQUwsQ0FDRmEsSUFERSxDQUNHLEtBQUtDLFdBQUwsQ0FBa0IsNkJBQTRCb0ssSUFBSyxFQUFuRCxDQURILEVBRUZuSyxZQUZFLENBRVdZLElBRlgsRUFHRlgsSUFIRSxFQUFQO0FBSUg7O0FBeGM0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi4vSHR0cENsaWVudC9GZXRjaEltcGxlbWVudGF0aW9uL0ZldGNoXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3IgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9IdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBJSHR0cENsaWVudCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0lIdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1vZGUsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9BdXRoZW50aWNhdGlvbk1vZGVcIjtcblxuaW1wb3J0IHsgQ2hlY2tTY2VuYXJpb1R5cGUsIElDYW5keUFwaUNsaWVudCwgSUNhbmR5QXBpRHJhZnRDbGllbnQsIElTZW5kQ2hhbmdlU2V0UmVzdWx0IH0gZnJvbSBcIi4vSUNhbmR5QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgeyBTZXJ2ZXJJbm5lclJlc3BvbnNlLCBTZXJ2ZXJKc29uUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJJbm5lclJlc3BvbnNlXCI7XG5pbXBvcnQgeyBGaWxlUHJvcGVydGllcywgU2VydmVyRXJyb3JSZXNwb25zZSwgVXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9GaWxlUHJvcGVydGllc1wiO1xuaW1wb3J0IHsgQ3JlYXRlRHJhZnRSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0NyZWF0ZURyYWZ0L0NyZWF0ZURyYWZ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IENyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRXhwbGFuYXRvcnlOb3RlL0NyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBEcmFmdEZ1bGxJZCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5pbXBvcnQgeyBTZXJ2ZXJDaGFuZ2VTZXQgfSBmcm9tIFwiLi9UeXBlcy9DaGFuZ2VTZXQvU2VydmVyQ2hhbmdlU2V0XCI7XG5pbXBvcnQgeyBTZXJ2ZXJUYXNrLCBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL1Rhc2tzXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlckVycm9yQ29kZSwgR2V0QnlJbm5SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzVHlwZXNcIjtcbmltcG9ydCB7IEF0dGFjaEluZm8gfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9BdHRhY21lbnRzXCI7XG5pbXBvcnQgeyBEcmFmdFByZXNlbnRhdGlvblR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmVzZW50YXRpb25zL0RyYWZ0UHJlc2VudGF0aW9uVHlwZVwiO1xuaW1wb3J0IHsgUHJlc2VudGF0aW9uQ29udGVudCB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvUHJlc2VudGF0aW9uQ29udGVudFwiO1xuaW1wb3J0IHsgQ29udmVydERyYWZ0UmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9Db252ZXJ0RHJhZnRSZXF1ZXN0XCI7XG5pbXBvcnQgeyBHZXRBdHRhY2htZW50c1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQXR0YWNobWVudHMvR2V0QXR0YWNobWVudHNSZXNwb25zZVwiO1xuaW1wb3J0IHsgRm9jdXNTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IEdldFRhc2tzU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9UYXNrcy9HZXRUYXNrc1NlcnZlclJlc3BvbnNlXCI7XG5pbXBvcnQgeyBTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2VcIjtcbmltcG9ydCB7IGlzQnVmZmVyIH0gZnJvbSBcIi4vSXNCdWZmZXJcIjtcbmltcG9ydCB7IENvbWJpbmVGdWZSZXN1bHQsIEZ1ZkNvbWJpbmVNZXRob2QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9GZWF0dXJlRmxhZ3MvRmVhdHVyZUZsYWdzUmVzcG9uc2VcIjtcbmltcG9ydCB7IERpZ2VzdEFwaUNsaWVudCB9IGZyb20gXCIuL0RpZ2VzdEFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnRcIjtcbmltcG9ydCB7IElEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi9EaWdlc3RBcGlDbGllbnQvSURpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgRnVmU2l6ZVRvb0xhcmdlRXJyb3IgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvRnVmU2l6ZVRvb0xhcmdlRXJyb3JcIjtcbmltcG9ydCB7IEltcG9ydEVtcGxveWVlc1JlcXVlc3QgfSBmcm9tIFwiLi9UeXBlcy9TdGFmZi9JbXBvcnRFbXBsb3llZXNSZXF1ZXN0XCI7XG5pbXBvcnQgeyBNYXNzQWN0aW9uUGFyYW1ldGVycyB9IGZyb20gXCIuL1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmludC9QcmludFR5cGVcIjtcbmltcG9ydCB7IFByaW50UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9QcmludC9QcmludFJlc3BvbnNlXCI7XG5pbXBvcnQgeyBTZXJ2ZXJSYXdSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJhd1Jlc3BvbnNlXCI7XG5cbmNvbnN0IHN0cmFuZ2VPcHRpb25zID0geyBzcmM6IFwiY2hhbmdlU2V0XCIsIGRhdGFWZXJzaW9uOiBcIjBcIiB9O1xuXG5leHBvcnQgZW51bSBTZXJ2ZXJFcnJvcnMge1xuICAgIEZ1ZlNpemVUb29MYXJnZSA9IFwiRnVmU2l6ZVRvb0xhcmdlXCIsXG4gICAgQmFkUmVxdWVzdCA9IFwiQmFkUmVxdWVzdFwiLFxuICAgIFVua25vd25FcnJvciA9IFwiVW5rbm93bkVycm9yXCIsXG59XG5cbmV4cG9ydCBjbGFzcyBDYW5keUFwaUNsaWVudCBpbXBsZW1lbnRzIElDYW5keUFwaUNsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBJSHR0cENsaWVudDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgZmV0Y2hJbXBsOiBGZXRjaCxcbiAgICAgICAgYmFzZVVybDogc3RyaW5nLFxuICAgICAgICByZXNvdXJjZVpvbmU6IHVuZGVmaW5lZCB8IHN0cmluZyxcbiAgICAgICAgYXV0aGVudGljYXRpb246IHVuZGVmaW5lZCB8IEF1dGhlbnRpY2F0aW9uTW9kZVxuICAgICkge1xuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudChmZXRjaEltcGwsIGJhc2VVcmwsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIoYXV0aGVudGljYXRpb24pLCB7XG4gICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvckRyYWZ0KGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCk6IElDYW5keUFwaURyYWZ0Q2xpZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYW5keUFwaURyYWZ0Q2xpZW50KHRoaXMuaHR0cENsaWVudCwgZHJhZnRGdWxsSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEaWdlc3RBcGlDbGllbnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSURpZ2VzdEFwaUNsaWVudCB7XG4gICAgICAgIHJldHVybiBuZXcgRGlnZXN0QXBpQ2xpZW50KHRoaXMuaHR0cENsaWVudCwgZHJhZnRGdWxsSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvQnlJbm5zKGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCwgaW5uczogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPEdldEJ5SW5uUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcGF0aHMgPSBpbm5zLm1hcChpbm4gPT4gYEBmb2N1cy8ke2lubn1gKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoZHJhZnRGdWxsSWQsIFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRocylcbiAgICAgICAgICAgIC5qc29uPEZvY3VzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogR2V0QnlJbm5SZXNwb25zZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGlubiBvZiBpbm5zKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5TZXJ2ZXJWYWx1ZSA9IHJlc3BvbnNlW2BAZm9jdXMvJHtpbm59YF0/LnZhbHVlO1xuICAgICAgICAgICAgaWYgKGlublNlcnZlclZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpbm5dID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogXCJTZXJ2ZXIgZG9lcyBub3QgcmV0dXJuIGlubiBpbmZvXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZTogRm9jdXNTZXJ2ZXJFcnJvckNvZGUuTm9Jbm5FcnJvcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbaW5uXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGlublNlcnZlclZhbHVlLnZhbHVlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlOiBpbm5TZXJ2ZXJWYWx1ZS5lcnJvckNvZGUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogaW5uU2VydmVyVmFsdWUuZXJyb3IgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsR2Z2cyhhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChgYnVpbGQtc2VydmVyL2dmdnNgKS5qc29uPHN0cmluZ1tdPigpO1xuICAgICAgICByZXR1cm4gYm9keTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRHJhZnRGcm9tRHJpdmUoXG4gICAgICAgIG5zOiBzdHJpbmcsXG4gICAgICAgIGZ1ZkRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdC1mcm9tLWRyaXZlYClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgICAgIG5zOiBucyxcbiAgICAgICAgICAgICAgICBmdWZEcml2ZVVyaTogZnVmRHJpdmVVcmksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZUVtcHR5RHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYgfSlcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEcmFmdChuczogc3RyaW5nLCBnZnY6IHN0cmluZyk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT47XG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogdW5kZWZpbmVkLCBmdWZDb250ZW50OiBCdWZmZXIpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVEcmFmdChuczogc3RyaW5nLCBnZnY6IHVuZGVmaW5lZCB8IHN0cmluZywgZnVmQ29udGVudD86IEJ1ZmZlcik6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICBpZiAoZ2Z2ID09IHVuZGVmaW5lZCAmJiBmdWZDb250ZW50ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnRgKVxuICAgICAgICAgICAgICAgIC53aXRoQ29udGVudFR5cGUoXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIilcbiAgICAgICAgICAgICAgICAud2l0aEJvZHlGcm9tQnVmZmVyKGZ1ZkNvbnRlbnQpXG4gICAgICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2Z2ICE9IHVuZGVmaW5lZCAmJiBmdWZDb250ZW50ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnRgKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgICAgIC53aXRoQ29udGVudFR5cGUoXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIilcbiAgICAgICAgICAgICAgICAud2l0aEJvZHlGcm9tQnVmZmVyKEJ1ZmZlci5mcm9tKFtdKSlcbiAgICAgICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZnYgPT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGRyYWZ0OiBubyBnZnYgYW5kIG5vIGZ1ZiBzcGVjaWZpZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYgfSlcbiAgICAgICAgICAgIC53aXRoQ29udGVudFR5cGUoXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIilcbiAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoZnVmQ29udGVudClcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNoZWNrQWxpdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5nZXQoYF9zdGF0dXMvcGluZ2ApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RHJhZnRVcmwoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkLCBkcmFmdFJlbGF0ZWRVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgdjEvbnMvJHtkcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7ZHJhZnRGdWxsSWQuZHJhZnRJZH0vJHtkcmFmdFJlbGF0ZWRVcmx9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmVhdHVyZUZsYWdzKCk6IFByb21pc2U8RmVhdHVyZUZsYWdzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudC5nZXQoXCJ2MS9mZWF0dXJlcy9mbGFnc1wiKS5qc29uPEZlYXR1cmVGbGFnc1Jlc3BvbnNlPigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhbmR5QXBpRHJhZnRDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlEcmFmdENsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBJSHR0cENsaWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihodHRwQ2xpZW50OiBJSHR0cENsaWVudCwgZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKSB7XG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IGh0dHBDbGllbnQ7XG4gICAgICAgIHRoaXMuZHJhZnRGdWxsSWQgPSBkcmFmdEZ1bGxJZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvSW5uZXJFZGl0b3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwoYGlubmVyLWVkaXRvci9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtZnVmXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJzaW9uXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXJGdWYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmNsaWVudEluZm8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuZm9ybXNDbGllbnRJbmZvKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkSW5uZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvckxvZykpLmpzb248U2VydmVyRXJyb3JMb2c+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEVycm9yTG9nV2l0aENoZWNrU2NlbmFyaW9zKGNoZWNrU2NlbmFyaW9zOiBDaGVja1NjZW5hcmlvVHlwZVtdKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZXJyb3Jsb2dcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHsgY2hlY2tTY2VuYXJpb3M6IGNoZWNrU2NlbmFyaW9zIH0pXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VGFza0J5SWQodGFza0lkOiBzdHJpbmcpOiBQcm9taXNlPFNlcnZlclRhc2sgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgdGFza3MgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQHRhc2svKmBdKVxuICAgICAgICAgICAgLmpzb248R2V0VGFza3NTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIHRhc2tzW2BAdGFzay8ke3Rhc2tJZH1gXT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFRhc2tzKCk6IFByb21pc2U8U2VydmVyVGFza1tdPiB7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEB0YXNrLypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldFRhc2tzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRhc2tzKS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5xdWV1ZVRhc2sodGFza0lkOiBzdHJpbmcsIHRhc2tJbmZvOiBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge1xuICAgICAgICAgICAgICAgICAgICBbYEB0YXNrLyR7dGFza0lkfWBdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50YXNrSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0YXNrSWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYW5jZWxUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbYEB0YXNrLyR7dGFza0lkfWBdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEV4cGVydEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvcmxvZ0V4cGVydCkpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRXJyb3JMb2dQZGYoZXJyb3JMb2dOYW1lOiBzdHJpbmcsIHByb3BzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcInByZXNlbnRhdGlvbnMvZXJyb3JMb2cvcHJpbnRcIiksIHtcbiAgICAgICAgICAgIGVycm9yTG9nTmFtZTogZXJyb3JMb2dOYW1lLFxuICAgICAgICAgICAgcHJvcHNEcml2ZU5hbWU6IHByb3BzTmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNsZWFyRHJhZnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjbGVhclwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvbnZlcnREcmFmdEZyb21QcmV2R2Z2KHsgcHJldkdmdkRyYWZ0SWQsIGdmdiB9OiBDb252ZXJ0RHJhZnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJ0XCIpKS53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgaWQ6IHByZXZHZnZEcmFmdElkLFxuICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kQ2hhbmdlU2V0KGRhdGE6IFNlcnZlckNoYW5nZVNldCwgY3VycmVudERhdGFWZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPElTZW5kQ2hhbmdlU2V0UmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGRhdGFWZXJzaW9uOiBjdXJyZW50RGF0YVZlcnNpb24gfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZGF0YSlcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwOSk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXdhcm5pbmctY29tbWVudHNcbiAgICAgICAgLy9UT0RPOiDQv9C+0YHQu9C1INCy0YvQv9GD0YHQutCwINC30LDQtNCw0YfQuCBodHRwczovL3l0LnNrYmtvbnR1ci5ydS9pc3N1ZS9GUy03NjY1INC+0YLRgNC10YTQsNC60YLQvtGA0LjRgtGMINC4INC+0YHRgtCw0LLQuNGC0Ywg0YLQvtC70YzQutC+IFwiZGF0YVJlc3VsdC5kYXRhVmVyc2lvblwiICjQv9GA0LDQstC60LAg0L3QsNGB0YLRgNC+0LXQuiDRgdC10YDQuNCw0LvQuNC30LDRgtC+0YDQsClcbiAgICAgICAgY29uc3QgZ2V0U3VjY2Vzc1Jlc3VsdCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFSZXN1bHQgPSBhd2FpdCByZXN1bHQuanNvbjx7IGRhdGFWZXJzaW9uPzogbnVtYmVyOyBEYXRhVmVyc2lvbj86IG51bWJlciB9PigpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhVmVyc2lvbjpcbiAgICAgICAgICAgICAgICAgICAgZGF0YVJlc3VsdD8uZGF0YVZlcnNpb24gPz9cbiAgICAgICAgICAgICAgICAgICAgZGF0YVJlc3VsdD8uRGF0YVZlcnNpb24gPz9cbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFwiSW52YWxpZCBkYXRhVmVyc2lvbiBhZnRlciBhcHBseWluZyBjaGFuZ2Ugc2V0LlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgZ2V0U3VjY2Vzc1Jlc3VsdCgpIDogcmVzdWx0LnN0YXR1cztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VuZENoYW5nZVNldFN5bmMoZGF0YTogU2VydmVyQ2hhbmdlU2V0LCBjdXJyZW50RGF0YVZlcnNpb246IG51bWJlcik6IElTZW5kQ2hhbmdlU2V0UmVzdWx0IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5odHRwQ2xpZW50LnBvc3RTeW5jKFxuICAgICAgICAgICAgdGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpLFxuICAgICAgICAgICAgeyBkYXRhVmVyc2lvbjogY3VycmVudERhdGFWZXJzaW9uIH0sXG4gICAgICAgICAgICBkYXRhXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXdhcm5pbmctY29tbWVudHNcbiAgICAgICAgLy9UT0RPOiDQv9C+0YHQu9C1INCy0YvQv9GD0YHQutCwINC30LDQtNCw0YfQuCBodHRwczovL3l0LnNrYmtvbnR1ci5ydS9pc3N1ZS9GUy03NjY1INC+0YLRgNC10YTQsNC60YLQvtGA0LjRgtGMINC4INC+0YHRgtCw0LLQuNGC0Ywg0YLQvtC70YzQutC+IFwiZGF0YVJlc3VsdC5kYXRhVmVyc2lvblwiICjQv9GA0LDQstC60LAg0L3QsNGB0YLRgNC+0LXQuiDRgdC10YDQuNCw0LvQuNC30LDRgtC+0YDQsClcbiAgICAgICAgY29uc3QgZ2V0U3VjY2Vzc1Jlc3VsdFN5bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUmVzdWx0ID0gcmVzdWx0Lmpzb248eyBkYXRhVmVyc2lvbj86IG51bWJlcjsgRGF0YVZlcnNpb24/OiBudW1iZXIgfT4oKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YVZlcnNpb246XG4gICAgICAgICAgICAgICAgICAgIGRhdGFSZXN1bHQ/LmRhdGFWZXJzaW9uID8/XG4gICAgICAgICAgICAgICAgICAgIGRhdGFSZXN1bHQ/LkRhdGFWZXJzaW9uID8/XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChcIkludmFsaWQgZGF0YVZlcnNpb24gYWZ0ZXIgYXBwbHlpbmcgY2hhbmdlIHNldC5cIiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyA9PSAyMDAgPyBnZXRTdWNjZXNzUmVzdWx0U3luYygpIDogcmVzdWx0LnN0YXR1cztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0UmVxdWlzaXRlcyhyZXF1aXNpdGVMaXN0OiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8U2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJlcXVpc2l0ZUxpc3QpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldElubmVyKHBhdGhzOiB1bmRlZmluZWQgfCByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRocylcbiAgICAgICAgICAgIC5qc29uPFNlcnZlcklubmVyUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcnRpYWxJbm5lcihydWxlczogW1wiKlwiXSB8IHN0cmluZ1tdLCBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyKTogUHJvbWlzZTxTZXJ2ZXJJbm5lclJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtcGFydGlhbC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMobWF4SW5zdGFuY2VDb3VudCAhPSB1bmRlZmluZWQgJiYgeyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50LnRvU3RyaW5nKCkgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocnVsZXMpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJJbm5lclJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRQYXJ0aWFsSW5uZXJBc0pzb25UcmVlKFxuICAgICAgICBydWxlczogW1wiKlwiXSB8IHN0cmluZ1tdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxTZXJ2ZXJKc29uUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGZvcm1hdDogXCJKc29uVHJlZVwiIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJ1bGVzKVxuICAgICAgICAgICAgLmpzb248U2VydmVySnNvblJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSYXdQYXJ0aWFsSW5uZXJBc0pzb25UcmVlKFxuICAgICAgICBydWxlczogcmVhZG9ubHkgc3RyaW5nW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPFNlcnZlclJhd1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtcGFydGlhbC1pbm5lcjJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJ1bGVzKVxuICAgICAgICAgICAgLmpzb248U2VydmVyUmF3UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGFWZXJzaW9uKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9nZXQtZGF0YS12ZXJzaW9uXCIpKS5qc29uPG51bWJlcj4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXhwbGFuYXRvcnlOb3RlKCk6IFByb21pc2U8Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5leHBsYW5hdG9yeU5vdGUpKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEF0dGFjaG1lbnRCeUlkKGF0dGFjaG1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBdHRhY2hJbmZvPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAYXR0YWNobWVudC8ke2F0dGFjaG1lbnRJZH1gXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiByZXN1bHRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudElkfWBdPy52YWx1ZSA/PyByZWplY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsQXR0YWNobWVudHMoKTogUHJvbWlzZTxBdHRhY2hJbmZvW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEBhdHRhY2htZW50LypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlc3VsdCkubWFwKHggPT4geC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBhdHRhY2htZW50SWRzLm1hcChpZCA9PiBgQGF0dGFjaG1lbnQvJHtpZH1gKSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzOiByZWFkb25seSBBdHRhY2hJbmZvW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHMpIHtcbiAgICAgICAgICAgIGNoYW5nZWRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudC5pZH1gXSA9IHtcbiAgICAgICAgICAgICAgICBjb250ZW50VXJpOiBhdHRhY2htZW50LmNvbnRlbnRVcmksXG4gICAgICAgICAgICAgICAgaWQ6IGF0dGFjaG1lbnQuaWQsXG4gICAgICAgICAgICAgICAgbWV0YTogYXR0YWNobWVudC5tZXRhLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDogY2hhbmdlZCxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRQcmVzZW50YXRpb24ocHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlLCBjb250ZW50OiBzdHJpbmcgfCB1bmtub3duKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5odHRwQ2xpZW50LnB1dCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGUpKTtcbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC53aXRoUmF3Qm9keShjb250ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0J1ZmZlcihjb250ZW50KSkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aFJhd0JvZHkoY29udGVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC53aXRoSnNvbkJvZHkoY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcmVxdWVzdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcGF0Y2hQcmVzZW50YXRpb24oXG4gICAgICAgIHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSxcbiAgICAgICAgcHJlc2VudGF0aW9uQ29udGVudDogUHJlc2VudGF0aW9uQ29udGVudFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSkud2l0aEpzb25Cb2R5KHByZXNlbnRhdGlvbkNvbnRlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTxGaWxlUHJvcGVydGllcyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldChgdjEvZmlsZXMvZ2V0LXByb3BlcnRpZXNgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGRyaXZlVXJpOiBkcml2ZVVyaSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPEZpbGVQcm9wZXJ0aWVzPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMoZHJpdmVVcmk6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9wcmVwYXJlLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYsIGRyaXZlVXJpOiBkcml2ZVVyaSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3JDb2RlID09PSBcIkZ1ZlNpemVUb29MYXJnZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZ1ZlNpemVUb29MYXJnZUVycm9yKGVycm9yRGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248RmlsZVByb3BlcnRpZXM+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvZmlsZXMvdXBsb2FkLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhKc29uQm9keShkcml2ZVVyaXMpXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSwgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLCBzb3VyY2VzVG90YWxDb3VudDogMCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4oKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlcnZlckVycm9yOiBTZXJ2ZXJFcnJvcnMuVW5rbm93bkVycm9yLFxuICAgICAgICAgICAgICAgIGludmFsaWRTb3VyY2VEcml2ZUNvbnRlbnROYW1lczogXCJcIixcbiAgICAgICAgICAgICAgICBzb3VyY2VzVG90YWxDb3VudDogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYWNjZXB0VHJhbnNmZXJUeXBlKFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICB0cmFuc2ZlclR5cGU6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8U2VydmVyRXJyb3JSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9L3RyYW5zZmVyL2NvbWJpbmVgKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBmdWZEcml2ZVVyaTogZnVmRHJpdmVVcmksIHR5cGVJZDogdHJhbnNmZXJUeXBlIH0pXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRGdWZCeURyaXZlVXJpKGRyaXZlVXJpOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnB1dCh0aGlzLmdldERyYWZ0VXJsKFwic2V0LWZ1ZlwiKSkud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb21iaW5lRnVmQnlEcml2ZVVyaShcbiAgICAgICAgZHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZCxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2NvbWJpbmUtd2l0aC1mdWZcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZnVmRHJpdmVVcmk6IGRyaXZlVXJpLCBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPENvbWJpbmVGdWZSZXN1bHQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG11bHRpcGxlQ29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW10sXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2RcbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9jb21iaW5lLXdpdGgtZnVmc1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpcyk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxDb21iaW5lRnVmUmVzdWx0PigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBub3JtYWxpemVCeVJ1bGVzKHJ1bGVzOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcInRlc3Qtbm9ybWFsaXplXCIpKS53aXRoSnNvbkJvZHkocnVsZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24ocHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdFJlbGF0ZWRVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9LyR7ZHJhZnRSZWxhdGVkVXJsfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy8ke3ByZXNlbnRhdGlvblR5cGUudG9TdHJpbmcoKX1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0QWxsQ2hlY2tib3hlc0ZvcjExMzEwMyhlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9jaGVjay1hbGxcIik7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh1cmkpLndpdGhRdWVyeVBhcmFtcyh7IHNldEVuYWJsZWQ6IGVuYWJsZWQgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEluc3RhbmNlc0J5VGV4dChcbiAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICBwYXRoc1ByZWZpeDogc3RyaW5nLFxuICAgICAgICBwYXRoc1RvU2VhcmNoOiBzdHJpbmdbXSxcbiAgICAgICAgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlclxuICAgICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgbWF4SW5zdGFuY2VDb3VudFBhcmFtcyA9IG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkID8geyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50IH0gOiB7fTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBzZWFyY2hTdHJpbmc6IHRleHQsIHBhdGhzUHJlZml4OiBwYXRoc1ByZWZpeCwgLi4ubWF4SW5zdGFuY2VDb3VudFBhcmFtcyB9O1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvc2VhcmNoLWJ5LXN0cmluZ1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMocGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRoc1RvU2VhcmNoKVxuICAgICAgICAgICAgLmpzb248c3RyaW5nW10+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGN1c3RvbU5vcm1hbGl6ZShub3JtYWxpemVySWQ6IHN0cmluZywgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IG5vcm1hbGl6ZXJJZDogbm9ybWFsaXplcklkIH07XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL2N1c3RvbS1ub3JtYWxpemVcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHBhcmFtcylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aFByZWZpeGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0RW1wbG95ZWVzKHJlcXVlc3Q6IEltcG9ydEVtcGxveWVlc1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHRoaXMuZ2V0RHJhZnRVcmwoXCJzdGFmZlwiKSkud2l0aEpzb25Cb2R5KHJlcXVlc3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkZWxldGVJbnN0YW5jZXMobXVsdGlwbGljaXR5UGF0aDogc3RyaW5nLCBpbnN0YW5jZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7IG11bHRpcGxpY2l0eVBhdGg6IG11bHRpcGxpY2l0eVBhdGgsIGluc3RhbmNlTnVtYmVyczogaW5zdGFuY2VzIH07XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9kZWxldGUtaW5zdGFuY2VzXCIpKS53aXRoSnNvbkJvZHkocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJ1bk1hc3NBY3Rpb24oYWN0aW9uSWQ6IHN0cmluZywgcGFyYW1ldGVycz86IE1hc3NBY3Rpb25QYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyBhY3Rpb25JZDogYWN0aW9uSWQgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvbWFzcy1hY3Rpb25cIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJpbnQodHlwZTogUHJpbnRUeXBlLCBib2R5Pzogc3RyaW5nW10pOiBQcm9taXNlPFByaW50UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy9pbm5lci9wcmludC8ke3R5cGV9YCkpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGJvZHkpXG4gICAgICAgICAgICAuanNvbjxQcmludFJlc3BvbnNlPigpO1xuICAgIH1cbn1cbiJdfQ==
@@ -76,6 +76,10 @@ class FakeCandyApiDraftClient {
76
76
  return Promise.resolve();
77
77
  }
78
78
 
79
+ runMassAction(actionId, parameters) {
80
+ return Promise.resolve();
81
+ }
82
+
79
83
  acceptTransferType(fufDriveUri, transferType, abortSignal) {
80
84
  return Promise.resolve(undefined);
81
85
  }
@@ -196,6 +200,10 @@ class FakeCandyApiDraftClient {
196
200
  throw new _Errors.NotImplementedError();
197
201
  }
198
202
 
203
+ getRawPartialInnerAsJsonTree(rules, maxInstanceCount) {
204
+ throw new _Errors.NotImplementedError();
205
+ }
206
+
199
207
  getTaskById(taskId) {
200
208
  return Promise.resolve(undefined);
201
209
  }
@@ -212,11 +220,13 @@ class FakeCandyApiDraftClient {
212
220
  return Promise.resolve(undefined);
213
221
  }
214
222
 
215
- async sendChangeSet(data) {
216
- return Promise.resolve(undefined);
223
+ async sendChangeSet(data, currentDataVersion) {
224
+ return Promise.resolve({
225
+ dataVersion: 0
226
+ });
217
227
  }
218
228
 
219
- sendChangeSetSync(data) {
229
+ sendChangeSetSync(data, currentDataVersion) {
220
230
  return 200;
221
231
  }
222
232
 
@@ -248,7 +258,11 @@ class FakeCandyApiDraftClient {
248
258
  return Promise.resolve(undefined);
249
259
  }
250
260
 
261
+ getDataVersion() {
262
+ return Promise.resolve(0);
263
+ }
264
+
251
265
  }
252
266
 
253
267
  exports.FakeCandyApiDraftClient = FakeCandyApiDraftClient;
254
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9GYWtlQ2FuZHlBcGlDbGllbnQudHMiXSwibmFtZXMiOlsiRmFrZUNhbmR5QXBpQ2xpZW50IiwiZGlnZXN0Q2xpZW50IiwiRmFrZURpZ2VzdEFwaUNsaWVudCIsImNyZWF0ZURpZ2VzdEFwaUNsaWVudCIsImRyYWZ0RnVsbElkIiwiY3JlYXRlUGlja2xpc3QiLCJnSWQiLCJkYXRhIiwiZ2V0QWxsR2Z2cyIsImFib3J0U2lnbmFsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGVja0FsaXZlIiwidW5kZWZpbmVkIiwiY3JlYXRlRHJhZnQiLCJucyIsImdmdiIsImJvZHkiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZm9yRHJhZnQiLCJGYWtlQ2FuZHlBcGlEcmFmdENsaWVudCIsImNyZWF0ZURyYWZ0RnJvbURyaXZlIiwiZnVmRHJpdmVVcmkiLCJjcmVhdGVFbXB0eURyYWZ0IiwiZ2V0SW5mb0J5SW5ucyIsImlubnMiLCJnZXRGZWF0dXJlRmxhZ3NXaXRob3V0UHJvbWlzZSIsImZlYXR1cmVGbGFncyIsImdldEZlYXR1cmVGbGFncyIsInJlc3BvbnNlIiwiY2FuZHlUZXN0RmVhdHVyZSIsImRlbGV0ZUluc3RhbmNlcyIsIm11bHRpcGxpY2l0eVBhdGgiLCJpbnN0YW5jZXMiLCJpbXBvcnRFbXBsb3llZXMiLCJyZXF1ZXN0IiwiYWNjZXB0VHJhbnNmZXJUeXBlIiwidHJhbnNmZXJUeXBlIiwiY2FuY2VsVGFzayIsInRhc2tJZCIsImNsZWFyRHJhZnQiLCJjb252ZXJ0RHJhZnRGcm9tUHJldkdmdiIsImNyZWF0ZU9yVXBkYXRlQXR0YWNobWVudHMiLCJhdHRhY2htZW50cyIsImVucXVldWVUYXNrIiwidGFza0luZm8iLCJnZXRBbGxBdHRhY2htZW50cyIsImdldEFsbFRhc2tzIiwiZ2V0QXR0YWNobWVudEJ5SWQiLCJhdHRhY2htZW50SWQiLCJnZXRFcnJvckxvZyIsImdldEVycm9yTG9nV2l0aENoZWNrU2NlbmFyaW9zIiwiY2hlY2tTY2VuYXJpb3MiLCJnZXRFeHBlcnRFcnJvckxvZyIsImdldEV4cGxhbmF0b3J5Tm90ZSIsInByaW50IiwidHlwZSIsImdldEZpbGVQcm9wZXJ0aWVzIiwiZHJpdmVVcmkiLCJwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMiLCJ1cGxvYWRBbmRHZXRGaWxlUHJvcGVydGllcyIsImRyaXZlVXJpcyIsInNlcnZlckVycm9yIiwiU2VydmVyRXJyb3JzIiwiVW5rbm93bkVycm9yIiwic291cmNlc1RvdGFsQ291bnQiLCJpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXMiLCJnZXRIcmVmRG93bmxvYWRGdWYiLCJnZXRIcmVmRG93bmxvYWRJbm5lciIsImdldEhyZWZUb0NvbnZlcnRhdGlvbkxvZyIsImdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbyIsImdldEhyZWZUb0Rvd25sb2FkRm9ybXNDbGllbnRJbmZvIiwiZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZiIsImdldEhyZWZUb0Vycm9yTG9nUGRmIiwiZXJyb3JMb2dOYW1lIiwicHJvcHNOYW1lIiwiZ2V0SHJlZlRvSW5uZXJFZGl0b3IiLCJnZXRSZXF1aXNpdGVzIiwicmVxdWlzaXRlTGlzdCIsImdldElubmVyIiwicGF0aHMiLCJnZXRQYXJ0aWFsSW5uZXIiLCJydWxlcyIsIm1heEluc3RhbmNlQ291bnQiLCJnZXRQYXJ0aWFsSW5uZXJBc0pzb25UcmVlIiwiZ2V0VGFza0J5SWQiLCJub3JtYWxpemVCeVJ1bGVzIiwicGF0Y2hQcmVzZW50YXRpb24iLCJjb250ZW50IiwicmVtb3ZlQXR0YWNobWVudHMiLCJhdHRhY2htZW50SWRzIiwic2VuZENoYW5nZVNldCIsInNlbmRDaGFuZ2VTZXRTeW5jIiwic2V0RnVmQnlEcml2ZVVyaSIsImNvbWJpbmVGdWZCeURyaXZlVXJpIiwiY29tYmluZU1ldGhvZCIsIm11bHRpcGxlQ29tYmluZUZ1ZkJ5RHJpdmVVcmkiLCJzZXRQcmVzZW50YXRpb24iLCJzZXRBbGxDaGVja2JveGVzRm9yMTEzMTAzIiwiZW5hYmxlZCIsInNlYXJjaEluc3RhbmNlc0J5VGV4dCIsInRleHQiLCJwYXRoUHJlZml4IiwicGF0aHNUb1NlYXJjaCIsImN1c3RvbU5vcm1hbGl6ZSIsIm5vcm1hbGl6ZXJJZCIsInBhdGhQcmVmaXhlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQXFCQTs7QUFDQTs7QUFLTyxNQUFNQSxrQkFBTixDQUFvRDtBQUFBO0FBQUEsU0FDdENDLFlBRHNDLEdBQ3ZCLElBQUlDLHdDQUFKLEVBRHVCO0FBQUE7O0FBR2hEQyxFQUFBQSxxQkFBcUIsQ0FBQ0MsV0FBRCxFQUE2QztBQUNyRSxXQUFPLEtBQUtILFlBQVo7QUFDSDs7QUFFTUksRUFBQUEsY0FBYyxDQUFDQyxHQUFELEVBQWNDLElBQWQsRUFBOEM7QUFDL0QsU0FBS04sWUFBTCxDQUFrQkksY0FBbEIsQ0FBaUNDLEdBQWpDLEVBQXNDQyxJQUF0QztBQUNIOztBQUVNQyxFQUFBQSxVQUFVLENBQUNDLFdBQUQsRUFBK0M7QUFDNUQsV0FBT0MsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDSDs7QUFFTUMsRUFBQUEsVUFBVSxHQUFrQjtBQUMvQixXQUFPRixPQUFPLENBQUNDLE9BQVIsQ0FBZ0JFLFNBQWhCLENBQVA7QUFDSDs7QUFJTUMsRUFBQUEsV0FBVyxDQUFDQyxFQUFELEVBQWFDLEdBQWIsRUFBc0NDLElBQXRDLEVBQW1GO0FBQ2pHLFVBQU0sSUFBSUMsMkJBQUosRUFBTjtBQUNIOztBQUVNQyxFQUFBQSxRQUFRLENBQUNmLFdBQUQsRUFBaUQ7QUFDNUQsV0FBTyxJQUFJZ0IsdUJBQUosRUFBUDtBQUNIOztBQUVNQyxFQUFBQSxvQkFBb0IsQ0FDdkJOLEVBRHVCLEVBRXZCTyxXQUZ1QixFQUd2QmIsV0FIdUIsRUFJSztBQUM1QixVQUFNLElBQUlTLDJCQUFKLEVBQU47QUFDSDs7QUFFTUssRUFBQUEsZ0JBQWdCLENBQUNSLEVBQUQsRUFBYUMsR0FBYixFQUEwQlAsV0FBMUIsRUFBbUY7QUFDdEcsVUFBTSxJQUFJUywyQkFBSixFQUFOO0FBQ0g7O0FBRU1NLEVBQUFBLGFBQWEsQ0FBQ3BCLFdBQUQsRUFBMkJxQixJQUEzQixFQUErRTtBQUMvRixVQUFNLElBQUlQLDJCQUFKLEVBQU47QUFDSDs7QUFFTVEsRUFBQUEsNkJBQTZCLENBQUNDLFlBQUQsRUFBMkQ7QUFDM0YsV0FBT0EsWUFBUDtBQUNIOztBQUVNQyxFQUFBQSxlQUFlLEdBQWtDO0FBQ3BELFVBQU1DLFFBQThCLEdBQUc7QUFBRUMsTUFBQUEsZ0JBQWdCLEVBQUU7QUFBcEIsS0FBdkM7QUFDQSxXQUFPcEIsT0FBTyxDQUFDQyxPQUFSLENBQWdCa0IsUUFBaEIsQ0FBUDtBQUNIOztBQXBEc0Q7Ozs7QUF1RHBELE1BQU1ULHVCQUFOLENBQThEO0FBQzFEVyxFQUFBQSxlQUFlLENBQUNDLGdCQUFELEVBQTJCQyxTQUEzQixFQUErRDtBQUNqRixXQUFPdkIsT0FBTyxDQUFDQyxPQUFSLEVBQVA7QUFDSDs7QUFFTXVCLEVBQUFBLGVBQWUsQ0FBQ0MsT0FBRCxFQUFpRDtBQUNuRSxXQUFPekIsT0FBTyxDQUFDQyxPQUFSLEVBQVA7QUFDSDs7QUFFTXlCLEVBQUFBLGtCQUFrQixDQUNyQmQsV0FEcUIsRUFFckJlLFlBRnFCLEVBR3JCNUIsV0FIcUIsRUFJbUI7QUFDeEMsV0FBT0MsT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxTQUFoQixDQUFQO0FBQ0g7O0FBRU15QixFQUFBQSxVQUFVLENBQUNDLE1BQUQsRUFBZ0M7QUFDN0MsV0FBTzdCLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsU0FBaEIsQ0FBUDtBQUNIOztBQUVNMkIsRUFBQUEsVUFBVSxHQUFrQjtBQUMvQixXQUFPOUIsT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxTQUFoQixDQUFQO0FBQ0g7O0FBRU00QixFQUFBQSx1QkFBdUIsQ0FBQ04sT0FBRCxFQUE4QztBQUN4RSxXQUFPekIsT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxTQUFoQixDQUFQO0FBQ0g7O0FBRU02QixFQUFBQSx5QkFBeUIsQ0FBQ0MsV0FBRCxFQUFvRDtBQUNoRixXQUFPakMsT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxTQUFoQixDQUFQO0FBQ0g7O0FBRU0rQixFQUFBQSxXQUFXLENBQUNMLE1BQUQsRUFBaUJNLFFBQWpCLEVBQStFO0FBQzdGLFdBQU9uQyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0JFLFNBQWhCLENBQVA7QUFDSDs7QUFFTWlDLEVBQUFBLGlCQUFpQixHQUEwQjtBQUM5QyxXQUFPcEMsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDSDs7QUFFTW9DLEVBQUFBLFdBQVcsR0FBMEI7QUFDeEMsV0FBT3JDLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0g7O0FBRU1xQyxFQUFBQSxpQkFBaUIsQ0FBQ0MsWUFBRCxFQUE0QztBQUNoRSxVQUFNLElBQUkvQiwyQkFBSixFQUFOO0FBQ0g7O0FBRU1nQyxFQUFBQSxXQUFXLEdBQTRCO0FBQzFDLFVBQU0sSUFBSWhDLDJCQUFKLEVBQU47QUFDSDs7QUFFeUMsUUFBN0JpQyw2QkFBNkIsQ0FBQ0MsY0FBRCxFQUErRDtBQUNyRyxVQUFNLElBQUlsQywyQkFBSixFQUFOO0FBQ0g7O0FBRU1tQyxFQUFBQSxpQkFBaUIsR0FBNEI7QUFDaEQsVUFBTSxJQUFJbkMsMkJBQUosRUFBTjtBQUNIOztBQUVNb0MsRUFBQUEsa0JBQWtCLEdBQTJDO0FBQ2hFLFVBQU0sSUFBSXBDLDJCQUFKLEVBQU47QUFDSDs7QUFFTXFDLEVBQUFBLEtBQUssQ0FBQ0MsSUFBRCxFQUFrQnZDLElBQWxCLEVBQTJEO0FBQ25FLFVBQU0sSUFBSUMsMkJBQUosRUFBTjtBQUNIOztBQUVNdUMsRUFBQUEsaUJBQWlCLENBQUNDLFFBQUQsRUFBd0Q7QUFDNUUsV0FBT2hELE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsU0FBaEIsQ0FBUDtBQUNIOztBQUVNOEMsRUFBQUEsMkJBQTJCLENBQUNELFFBQUQsRUFBbUIxQyxHQUFuQixFQUFxRTtBQUNuRyxXQUFPTixPQUFPLENBQUNDLE9BQVIsQ0FBZ0JFLFNBQWhCLENBQVA7QUFDSDs7QUFFTStDLEVBQUFBLDBCQUEwQixDQUM3QkMsU0FENkIsRUFFN0I3QyxHQUY2QixFQUc3QlAsV0FINkIsRUFJUTtBQUNyQyxXQUFPQyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0I7QUFDbkJtRCxNQUFBQSxXQUFXLEVBQUVDLDZCQUFhQyxZQURQO0FBRW5CQyxNQUFBQSxpQkFBaUIsRUFBRSxDQUZBO0FBR25CQyxNQUFBQSw4QkFBOEIsRUFBRTtBQUhiLEtBQWhCLENBQVA7QUFLSDs7QUFFTUMsRUFBQUEsa0JBQWtCLEdBQVc7QUFDaEMsV0FBTyxFQUFQO0FBQ0g7O0FBRU1DLEVBQUFBLG9CQUFvQixHQUFXO0FBQ2xDLFdBQU8sRUFBUDtBQUNIOztBQUVNQyxFQUFBQSx3QkFBd0IsR0FBVztBQUN0QyxXQUFPLEVBQVA7QUFDSDs7QUFFTUMsRUFBQUEsMkJBQTJCLEdBQVc7QUFDekMsV0FBTyxFQUFQO0FBQ0g7O0FBRU1DLEVBQUFBLGdDQUFnQyxHQUFXO0FBQzlDLFdBQU8sRUFBUDtBQUNIOztBQUVNQyxFQUFBQSx5QkFBeUIsR0FBVztBQUN2QyxXQUFPLEVBQVA7QUFDSDs7QUFFTUMsRUFBQUEsb0JBQW9CLENBQUNDLFlBQUQsRUFBdUJDLFNBQXZCLEVBQWtEO0FBQ3pFLFdBQU8sRUFBUDtBQUNIOztBQUVNQyxFQUFBQSxvQkFBb0IsR0FBVztBQUNsQyxXQUFPLEVBQVA7QUFDSDs7QUFFeUIsUUFBYkMsYUFBYSxDQUFDQyxhQUFELEVBQXNFO0FBQzVGLFdBQU8sRUFBUDtBQUNIOztBQUVvQixRQUFSQyxRQUFRLENBQUNDLEtBQUQsRUFBcUU7QUFDdEYsV0FBTyxFQUFQO0FBQ0g7O0FBRU1DLEVBQUFBLGVBQWUsQ0FBQ0MsS0FBRCxFQUEyQkMsZ0JBQTNCLEVBQW9GO0FBQ3RHLFVBQU0sSUFBSWpFLDJCQUFKLEVBQU47QUFDSDs7QUFFTWtFLEVBQUFBLHlCQUF5QixDQUFDRixLQUFELEVBQTJCQyxnQkFBM0IsRUFBbUY7QUFDL0csVUFBTSxJQUFJakUsMkJBQUosRUFBTjtBQUNIOztBQUVNbUUsRUFBQUEsV0FBVyxDQUFDOUMsTUFBRCxFQUFrRDtBQUNoRSxXQUFPN0IsT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxTQUFoQixDQUFQO0FBQ0g7O0FBRU15RSxFQUFBQSxnQkFBZ0IsQ0FBQ0osS0FBRCxFQUErQjtBQUNsRCxXQUFPeEUsT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxTQUFoQixDQUFQO0FBQ0g7O0FBRU0wRSxFQUFBQSxpQkFBaUIsQ0FBQy9CLElBQUQsRUFBOEJnQyxPQUE5QixFQUEyRTtBQUMvRixXQUFPOUUsT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxTQUFoQixDQUFQO0FBQ0g7O0FBRU00RSxFQUFBQSxpQkFBaUIsQ0FBQ0MsYUFBRCxFQUFrRDtBQUN0RSxXQUFPaEYsT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxTQUFoQixDQUFQO0FBQ0g7O0FBRXlCLFFBQWI4RSxhQUFhLENBQUNwRixJQUFELEVBQXVDO0FBQzdELFdBQU9HLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsU0FBaEIsQ0FBUDtBQUNIOztBQUVNK0UsRUFBQUEsaUJBQWlCLENBQUNyRixJQUFELEVBQXdDO0FBQzVELFdBQU8sR0FBUDtBQUNIOztBQUVNc0YsRUFBQUEsZ0JBQWdCLENBQUNuQyxRQUFELEVBQWtDO0FBQ3JELFdBQU9oRCxPQUFPLENBQUNDLE9BQVIsQ0FBZ0JFLFNBQWhCLENBQVA7QUFDSDs7QUFFTWlGLEVBQUFBLG9CQUFvQixDQUN2QnBDLFFBRHVCLEVBRXZCcUMsYUFGdUIsRUFHYztBQUNyQyxXQUFPckYsT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxTQUFoQixDQUFQO0FBQ0g7O0FBRU1tRixFQUFBQSw0QkFBNEIsQ0FDL0JuQyxTQUQrQixFQUUvQmtDLGFBRitCLEVBR007QUFDckMsV0FBT3JGLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsU0FBaEIsQ0FBUDtBQUNIOztBQUVNb0YsRUFBQUEsZUFBZSxDQUFDekMsSUFBRCxFQUE4QmdDLE9BQTlCLEVBQXdFO0FBQzFGLFdBQU85RSxPQUFPLENBQUNDLE9BQVIsQ0FBZ0JFLFNBQWhCLENBQVA7QUFDSDs7QUFFTXFGLEVBQUFBLHlCQUF5QixDQUFDQyxPQUFELEVBQWtDO0FBQzlELFdBQU96RixPQUFPLENBQUNDLE9BQVIsQ0FBZ0JFLFNBQWhCLENBQVA7QUFDSDs7QUFFTXVGLEVBQUFBLHFCQUFxQixDQUN4QkMsSUFEd0IsRUFFeEJDLFVBRndCLEVBR3hCQyxhQUh3QixFQUl4QnBCLGdCQUp3QixFQUtQO0FBQ2pCLFdBQU96RSxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsRUFBaEIsQ0FBUDtBQUNIOztBQUVNNkYsRUFBQUEsZUFBZSxDQUFDQyxZQUFELEVBQXVCQyxZQUF2QixFQUE4RDtBQUNoRixXQUFPaEcsT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxTQUFoQixDQUFQO0FBQ0g7O0FBdE1nRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGlja2xpc3REYXRhSXRlbSB9IGZyb20gXCIuLi8uLi9FbmdpbmUvc3JjL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSBcIi4uL0Vycm9yc1wiO1xuaW1wb3J0IHsgSHR0cFN0YXR1c0NvZGUgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9JSHR0cENsaWVudFwiO1xuXG5pbXBvcnQgdHlwZSB7IENoZWNrU2NlbmFyaW9UeXBlLCBJQ2FuZHlBcGlDbGllbnQsIElDYW5keUFwaURyYWZ0Q2xpZW50IH0gZnJvbSBcIi4vSUNhbmR5QXBpQ2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVySW5uZXJSZXNwb25zZSwgU2VydmVySnNvblJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvR2V0SW5uZXIvU2VydmVySW5uZXJSZXNwb25zZVwiO1xuaW1wb3J0IHsgRmlsZVByb3BlcnRpZXMsIFNlcnZlckVycm9yUmVzcG9uc2UsIFVwbG9hZEZpbGVQcm9wZXJ0aWVzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvRmlsZVByb3BlcnRpZXNcIjtcbmltcG9ydCB7IENyZWF0ZURyYWZ0UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9DcmVhdGVEcmFmdC9DcmVhdGVEcmFmdFJlc3BvbnNlXCI7XG5pbXBvcnQgeyBDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0V4cGxhbmF0b3J5Tm90ZS9DcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZVwiO1xuaW1wb3J0IHsgRHJhZnRGdWxsSWQgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEZ1bGxJZFwiO1xuaW1wb3J0IHsgU2VydmVyQ2hhbmdlU2V0IH0gZnJvbSBcIi4vVHlwZXMvQ2hhbmdlU2V0L1NlcnZlckNoYW5nZVNldFwiO1xuaW1wb3J0IHsgU2VydmVyVGFzaywgVmVyaWZ5QW5kRml4Rm5zUmVxdWlyZW1lbnRzVGFza0luZm8gfSBmcm9tIFwiLi9UeXBlcy9UYXNrcy9UYXNrc1wiO1xuaW1wb3J0IHsgR2V0QnlJbm5SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzVHlwZXNcIjtcbmltcG9ydCB7IEF0dGFjaEluZm8gfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9BdHRhY21lbnRzXCI7XG5pbXBvcnQgeyBEcmFmdFByZXNlbnRhdGlvblR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmVzZW50YXRpb25zL0RyYWZ0UHJlc2VudGF0aW9uVHlwZVwiO1xuaW1wb3J0IHsgQ29udmVydERyYWZ0UmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9Db252ZXJ0RHJhZnRSZXF1ZXN0XCI7XG5pbXBvcnQgeyBQcmVzZW50YXRpb25Db250ZW50IH0gZnJvbSBcIi4vVHlwZXMvUHJlc2VudGF0aW9ucy9QcmVzZW50YXRpb25Db250ZW50XCI7XG5pbXBvcnQgeyBTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2VcIjtcbmltcG9ydCB7IENvbWJpbmVGdWZSZXN1bHQsIEZ1ZkNvbWJpbmVNZXRob2QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9GZWF0dXJlRmxhZ3MvRmVhdHVyZUZsYWdzUmVzcG9uc2VcIjtcbmltcG9ydCB7IElEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi9EaWdlc3RBcGlDbGllbnQvSURpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgRmFrZURpZ2VzdEFwaUNsaWVudCB9IGZyb20gXCIuL0RpZ2VzdEFwaUNsaWVudC9GYWtlcy9GYWtlRGlnZXN0QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBTZXJ2ZXJFcnJvcnMgfSBmcm9tIFwiLi9DYW5keUFwaUNsaWVudFwiO1xuaW1wb3J0IHsgSW1wb3J0RW1wbG95ZWVzUmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL1N0YWZmL0ltcG9ydEVtcGxveWVlc1JlcXVlc3RcIjtcbmltcG9ydCB7IFByaW50VHlwZSB9IGZyb20gXCIuL1R5cGVzL1ByaW50L1ByaW50VHlwZVwiO1xuaW1wb3J0IHsgUHJpbnRSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL1ByaW50L1ByaW50UmVzcG9uc2VcIjtcblxuZXhwb3J0IGNsYXNzIEZha2VDYW5keUFwaUNsaWVudCBpbXBsZW1lbnRzIElDYW5keUFwaUNsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWdlc3RDbGllbnQgPSBuZXcgRmFrZURpZ2VzdEFwaUNsaWVudCgpO1xuXG4gICAgcHVibGljIGNyZWF0ZURpZ2VzdEFwaUNsaWVudChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpOiBJRGlnZXN0QXBpQ2xpZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlnZXN0Q2xpZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVQaWNrbGlzdChnSWQ6IHN0cmluZywgZGF0YTogUGlja2xpc3REYXRhSXRlbVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlnZXN0Q2xpZW50LmNyZWF0ZVBpY2tsaXN0KGdJZCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbEdmdnMoYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoZWNrQWxpdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBjcmVhdGVEcmFmdChuczogc3RyaW5nLCBnZnY6IHVuZGVmaW5lZCwgYm9keTogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcgfCB1bmRlZmluZWQsIGJvZHk/OiBCdWZmZXIpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yRHJhZnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgICAgICByZXR1cm4gbmV3IEZha2VDYW5keUFwaURyYWZ0Q2xpZW50KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURyYWZ0RnJvbURyaXZlKFxuICAgICAgICBuczogc3RyaW5nLFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUVtcHR5RHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SW5mb0J5SW5ucyhkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGlubnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxHZXRCeUlublJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZlYXR1cmVGbGFnc1dpdGhvdXRQcm9taXNlKGZlYXR1cmVGbGFnczogRmVhdHVyZUZsYWdzUmVzcG9uc2UpOiBGZWF0dXJlRmxhZ3NSZXNwb25zZSB7XG4gICAgICAgIHJldHVybiBmZWF0dXJlRmxhZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZlYXR1cmVGbGFncygpOiBQcm9taXNlPEZlYXR1cmVGbGFnc1Jlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBGZWF0dXJlRmxhZ3NSZXNwb25zZSA9IHsgY2FuZHlUZXN0RmVhdHVyZTogXCJ0cnVlXCIgfTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmFrZUNhbmR5QXBpRHJhZnRDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlEcmFmdENsaWVudCB7XG4gICAgcHVibGljIGRlbGV0ZUluc3RhbmNlcyhtdWx0aXBsaWNpdHlQYXRoOiBzdHJpbmcsIGluc3RhbmNlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbXBvcnRFbXBsb3llZXMocmVxdWVzdDogSW1wb3J0RW1wbG95ZWVzUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjY2VwdFRyYW5zZmVyVHlwZShcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgdHJhbnNmZXJUeXBlOiBzdHJpbmcsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFNlcnZlckVycm9yUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYW5jZWxUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJEcmFmdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb252ZXJ0RHJhZnRGcm9tUHJldkdmdihyZXF1ZXN0OiBDb252ZXJ0RHJhZnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlT3JVcGRhdGVBdHRhY2htZW50cyhhdHRhY2htZW50czogcmVhZG9ubHkgQXR0YWNoSW5mb1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5xdWV1ZVRhc2sodGFza0lkOiBzdHJpbmcsIHRhc2tJbmZvOiBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbEF0dGFjaG1lbnRzKCk6IFByb21pc2U8QXR0YWNoSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxUYXNrcygpOiBQcm9taXNlPFNlcnZlclRhc2tbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXR0YWNobWVudEJ5SWQoYXR0YWNobWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEF0dGFjaEluZm8+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyhjaGVja1NjZW5hcmlvczogQ2hlY2tTY2VuYXJpb1R5cGVbXSk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXhwZXJ0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFeHBsYW5hdG9yeU5vdGUoKTogUHJvbWlzZTxDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludCh0eXBlOiBQcmludFR5cGUsIGJvZHk/OiBzdHJpbmdbXSk6IFByb21pc2U8UHJpbnRSZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTxGaWxlUHJvcGVydGllcyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nLCBnZnY6IHN0cmluZyk6IFByb21pc2U8RmlsZVByb3BlcnRpZXMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGxvYWRBbmRHZXRGaWxlUHJvcGVydGllcyhcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXSxcbiAgICAgICAgZ2Z2OiBzdHJpbmcsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFVwbG9hZEZpbGVQcm9wZXJ0aWVzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICBzZXJ2ZXJFcnJvcjogU2VydmVyRXJyb3JzLlVua25vd25FcnJvcixcbiAgICAgICAgICAgIHNvdXJjZXNUb3RhbENvdW50OiAwLFxuICAgICAgICAgICAgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRJbm5lcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkRm9ybXNDbGllbnRJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9FcnJvckxvZ1BkZihlcnJvckxvZ05hbWU6IHN0cmluZywgcHJvcHNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvSW5uZXJFZGl0b3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFJlcXVpc2l0ZXMocmVxdWlzaXRlTGlzdDogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldElubmVyKHBhdGhzOiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcnRpYWxJbm5lcihydWxlczogcmVhZG9ubHkgc3RyaW5nW10sIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXIpOiBQcm9taXNlPFNlcnZlcklubmVyUmVzcG9uc2U+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyQXNKc29uVHJlZShydWxlczogcmVhZG9ubHkgc3RyaW5nW10sIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXIpOiBQcm9taXNlPFNlcnZlckpzb25SZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUYXNrQnlJZCh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8U2VydmVyVGFzayB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5vcm1hbGl6ZUJ5UnVsZXMocnVsZXM6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBhdGNoUHJlc2VudGF0aW9uKHR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSwgY29udGVudDogUHJlc2VudGF0aW9uQ29udGVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VuZENoYW5nZVNldChkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZW5kQ2hhbmdlU2V0U3luYyhkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQpOiBIdHRwU3RhdHVzQ29kZSB7XG4gICAgICAgIHJldHVybiAyMDA7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZ1ZkJ5RHJpdmVVcmkoZHJpdmVVcmk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbWJpbmVGdWZCeURyaXZlVXJpKFxuICAgICAgICBkcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBGdWZDb21iaW5lTWV0aG9kXG4gICAgKTogUHJvbWlzZTxDb21iaW5lRnVmUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbXVsdGlwbGVDb21iaW5lRnVmQnlEcml2ZVVyaShcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXSxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZFxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFByZXNlbnRhdGlvbih0eXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUsIGNvbnRlbnQ6IHN0cmluZyB8IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBbGxDaGVja2JveGVzRm9yMTEzMTAzKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWFyY2hJbnN0YW5jZXNCeVRleHQoXG4gICAgICAgIHRleHQ6IHN0cmluZyxcbiAgICAgICAgcGF0aFByZWZpeDogc3RyaW5nLFxuICAgICAgICBwYXRoc1RvU2VhcmNoOiBzdHJpbmdbXSxcbiAgICAgICAgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlclxuICAgICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGN1c3RvbU5vcm1hbGl6ZShub3JtYWxpemVySWQ6IHN0cmluZywgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxufVxuIl19
268
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9GYWtlQ2FuZHlBcGlDbGllbnQudHMiXSwibmFtZXMiOlsiRmFrZUNhbmR5QXBpQ2xpZW50IiwiZGlnZXN0Q2xpZW50IiwiRmFrZURpZ2VzdEFwaUNsaWVudCIsImNyZWF0ZURpZ2VzdEFwaUNsaWVudCIsImRyYWZ0RnVsbElkIiwiY3JlYXRlUGlja2xpc3QiLCJnSWQiLCJkYXRhIiwiZ2V0QWxsR2Z2cyIsImFib3J0U2lnbmFsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGVja0FsaXZlIiwidW5kZWZpbmVkIiwiY3JlYXRlRHJhZnQiLCJucyIsImdmdiIsImJvZHkiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZm9yRHJhZnQiLCJGYWtlQ2FuZHlBcGlEcmFmdENsaWVudCIsImNyZWF0ZURyYWZ0RnJvbURyaXZlIiwiZnVmRHJpdmVVcmkiLCJjcmVhdGVFbXB0eURyYWZ0IiwiZ2V0SW5mb0J5SW5ucyIsImlubnMiLCJnZXRGZWF0dXJlRmxhZ3NXaXRob3V0UHJvbWlzZSIsImZlYXR1cmVGbGFncyIsImdldEZlYXR1cmVGbGFncyIsInJlc3BvbnNlIiwiY2FuZHlUZXN0RmVhdHVyZSIsImRlbGV0ZUluc3RhbmNlcyIsIm11bHRpcGxpY2l0eVBhdGgiLCJpbnN0YW5jZXMiLCJpbXBvcnRFbXBsb3llZXMiLCJyZXF1ZXN0IiwicnVuTWFzc0FjdGlvbiIsImFjdGlvbklkIiwicGFyYW1ldGVycyIsImFjY2VwdFRyYW5zZmVyVHlwZSIsInRyYW5zZmVyVHlwZSIsImNhbmNlbFRhc2siLCJ0YXNrSWQiLCJjbGVhckRyYWZ0IiwiY29udmVydERyYWZ0RnJvbVByZXZHZnYiLCJjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJlbnF1ZXVlVGFzayIsInRhc2tJbmZvIiwiZ2V0QWxsQXR0YWNobWVudHMiLCJnZXRBbGxUYXNrcyIsImdldEF0dGFjaG1lbnRCeUlkIiwiYXR0YWNobWVudElkIiwiZ2V0RXJyb3JMb2ciLCJnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyIsImNoZWNrU2NlbmFyaW9zIiwiZ2V0RXhwZXJ0RXJyb3JMb2ciLCJnZXRFeHBsYW5hdG9yeU5vdGUiLCJwcmludCIsInR5cGUiLCJnZXRGaWxlUHJvcGVydGllcyIsImRyaXZlVXJpIiwicHJlcGFyZUFuZEdldEZpbGVQcm9wZXJ0aWVzIiwidXBsb2FkQW5kR2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaXMiLCJzZXJ2ZXJFcnJvciIsIlNlcnZlckVycm9ycyIsIlVua25vd25FcnJvciIsInNvdXJjZXNUb3RhbENvdW50IiwiaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzIiwiZ2V0SHJlZkRvd25sb2FkRnVmIiwiZ2V0SHJlZkRvd25sb2FkSW5uZXIiLCJnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2ciLCJnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8iLCJnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbyIsImdldEhyZWZUb0Rvd25sb2FkSW5uZXJGdWYiLCJnZXRIcmVmVG9FcnJvckxvZ1BkZiIsImVycm9yTG9nTmFtZSIsInByb3BzTmFtZSIsImdldEhyZWZUb0lubmVyRWRpdG9yIiwiZ2V0UmVxdWlzaXRlcyIsInJlcXVpc2l0ZUxpc3QiLCJnZXRJbm5lciIsInBhdGhzIiwiZ2V0UGFydGlhbElubmVyIiwicnVsZXMiLCJtYXhJbnN0YW5jZUNvdW50IiwiZ2V0UGFydGlhbElubmVyQXNKc29uVHJlZSIsImdldFJhd1BhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJnZXRUYXNrQnlJZCIsIm5vcm1hbGl6ZUJ5UnVsZXMiLCJwYXRjaFByZXNlbnRhdGlvbiIsImNvbnRlbnQiLCJyZW1vdmVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRJZHMiLCJzZW5kQ2hhbmdlU2V0IiwiY3VycmVudERhdGFWZXJzaW9uIiwiZGF0YVZlcnNpb24iLCJzZW5kQ2hhbmdlU2V0U3luYyIsInNldEZ1ZkJ5RHJpdmVVcmkiLCJjb21iaW5lRnVmQnlEcml2ZVVyaSIsImNvbWJpbmVNZXRob2QiLCJtdWx0aXBsZUNvbWJpbmVGdWZCeURyaXZlVXJpIiwic2V0UHJlc2VudGF0aW9uIiwic2V0QWxsQ2hlY2tib3hlc0ZvcjExMzEwMyIsImVuYWJsZWQiLCJzZWFyY2hJbnN0YW5jZXNCeVRleHQiLCJ0ZXh0IiwicGF0aFByZWZpeCIsInBhdGhzVG9TZWFyY2giLCJjdXN0b21Ob3JtYWxpemUiLCJub3JtYWxpemVySWQiLCJwYXRoUHJlZml4ZXMiLCJnZXREYXRhVmVyc2lvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQW9CQTs7QUFDQTs7QUFPTyxNQUFNQSxrQkFBTixDQUFvRDtBQUFBO0FBQUEsU0FDdENDLFlBRHNDLEdBQ3ZCLElBQUlDLHdDQUFKLEVBRHVCO0FBQUE7O0FBR2hEQyxFQUFBQSxxQkFBcUIsQ0FBQ0MsV0FBRCxFQUE2QztBQUNyRSxXQUFPLEtBQUtILFlBQVo7QUFDSDs7QUFFTUksRUFBQUEsY0FBYyxDQUFDQyxHQUFELEVBQWNDLElBQWQsRUFBOEM7QUFDL0QsU0FBS04sWUFBTCxDQUFrQkksY0FBbEIsQ0FBaUNDLEdBQWpDLEVBQXNDQyxJQUF0QztBQUNIOztBQUVNQyxFQUFBQSxVQUFVLENBQUNDLFdBQUQsRUFBK0M7QUFDNUQsV0FBT0MsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDSDs7QUFFTUMsRUFBQUEsVUFBVSxHQUFrQjtBQUMvQixXQUFPRixPQUFPLENBQUNDLE9BQVIsQ0FBZ0JFLFNBQWhCLENBQVA7QUFDSDs7QUFJTUMsRUFBQUEsV0FBVyxDQUFDQyxFQUFELEVBQWFDLEdBQWIsRUFBc0NDLElBQXRDLEVBQW1GO0FBQ2pHLFVBQU0sSUFBSUMsMkJBQUosRUFBTjtBQUNIOztBQUVNQyxFQUFBQSxRQUFRLENBQUNmLFdBQUQsRUFBaUQ7QUFDNUQsV0FBTyxJQUFJZ0IsdUJBQUosRUFBUDtBQUNIOztBQUVNQyxFQUFBQSxvQkFBb0IsQ0FDdkJOLEVBRHVCLEVBRXZC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QUFBQSxnQkFBZ0IsQ0FBQ3RDLFFBQUQsRUFBa0M7QUFDckQsV0FBT25ELE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsU0FBaEIsQ0FBUDtBQUNIOztBQUVNdUYsRUFBQUEsb0JBQW9CLENBQ3ZCdkMsUUFEdUIsRUFFdkJ3QyxhQUZ1QixFQUdjO0FBQ3JDLFdBQU8zRixPQUFPLENBQUNDLE9BQVIsQ0FBZ0JFLFNBQWhCLENBQVA7QUFDSDs7QUFFTXlGLEVBQUFBLDRCQUE0QixDQUMvQnRDLFNBRCtCLEVBRS9CcUMsYUFGK0IsRUFHTTtBQUNyQyxXQUFPM0YsT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxTQUFoQixDQUFQO0FBQ0g7O0FBRU0wRixFQUFBQSxlQUFlLENBQUM1QyxJQUFELEVBQThCaUMsT0FBOUIsRUFBd0U7QUFDMUYsV0FBT2xGLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsU0FBaEIsQ0FBUDtBQUNIOztBQUVNMkYsRUFBQUEseUJBQXlCLENBQUNDLE9BQUQsRUFBa0M7QUFDOUQsV0FBTy9GLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsU0FBaEIsQ0FBUDtBQUNIOztBQUVNNkYsRUFBQUEscUJBQXFCLENBQ3hCQyxJQUR3QixFQUV4QkMsVUFGd0IsRUFHeEJDLGFBSHdCLEVBSXhCdkIsZ0JBSndCLEVBS1A7QUFDakIsV0FBTzVFLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixFQUFoQixDQUFQO0FBQ0g7O0FBRU1tRyxFQUFBQSxlQUFlLENBQUNDLFlBQUQsRUFBdUJDLFlBQXZCLEVBQThEO0FBQ2hGLFdBQU90RyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0JFLFNBQWhCLENBQVA7QUFDSDs7QUFFTW9HLEVBQUFBLGNBQWMsR0FBb0I7QUFDckMsV0FBT3ZHLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixDQUFoQixDQUFQO0FBQ0g7O0FBck5nRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGlja2xpc3REYXRhSXRlbSB9IGZyb20gXCIuLi8uLi9FbmdpbmUvc3JjL0VuZ2luZS9Db3JlL1BpY2tsaXN0cy9QaWNrbGlzdFR5cGVzXCI7XG5pbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSBcIi4uL0Vycm9yc1wiO1xuXG5pbXBvcnQgdHlwZSB7IENoZWNrU2NlbmFyaW9UeXBlLCBJQ2FuZHlBcGlDbGllbnQsIElDYW5keUFwaURyYWZ0Q2xpZW50LCBJU2VuZENoYW5nZVNldFJlc3VsdCB9IGZyb20gXCIuL0lDYW5keUFwaUNsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlcklubmVyUmVzcG9uc2UsIFNlcnZlckpzb25SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlcklubmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IEZpbGVQcm9wZXJ0aWVzLCBTZXJ2ZXJFcnJvclJlc3BvbnNlLCBVcGxvYWRGaWxlUHJvcGVydGllc1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0ZpbGVQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgeyBDcmVhdGVEcmFmdFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQ3JlYXRlRHJhZnQvQ3JlYXRlRHJhZnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9FeHBsYW5hdG9yeU5vdGUvQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2VcIjtcbmltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcbmltcG9ydCB7IFNlcnZlckNoYW5nZVNldCB9IGZyb20gXCIuL1R5cGVzL0NoYW5nZVNldC9TZXJ2ZXJDaGFuZ2VTZXRcIjtcbmltcG9ydCB7IFNlcnZlclRhc2ssIFZlcmlmeUFuZEZpeEZuc1JlcXVpcmVtZW50c1Rhc2tJbmZvIH0gZnJvbSBcIi4vVHlwZXMvVGFza3MvVGFza3NcIjtcbmltcG9ydCB7IEdldEJ5SW5uUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9Gb2N1cy9Gb2N1c1R5cGVzXCI7XG5pbXBvcnQgeyBBdHRhY2hJbmZvIH0gZnJvbSBcIi4vVHlwZXMvQXR0YWNobWVudHMvQXR0YWNtZW50c1wiO1xuaW1wb3J0IHsgRHJhZnRQcmVzZW50YXRpb25UeXBlIH0gZnJvbSBcIi4vVHlwZXMvUHJlc2VudGF0aW9ucy9EcmFmdFByZXNlbnRhdGlvblR5cGVcIjtcbmltcG9ydCB7IENvbnZlcnREcmFmdFJlcXVlc3QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29udmVydERyYWZ0UmVxdWVzdFwiO1xuaW1wb3J0IHsgUHJlc2VudGF0aW9uQ29udGVudCB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvUHJlc2VudGF0aW9uQ29udGVudFwiO1xuaW1wb3J0IHsgU2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvR2V0SW5uZXIvU2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBDb21iaW5lRnVmUmVzdWx0LCBGdWZDb21iaW5lTWV0aG9kIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbWJpbmVGdWZSZXN1bHRcIjtcbmltcG9ydCB7IEZlYXR1cmVGbGFnc1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRmVhdHVyZUZsYWdzL0ZlYXR1cmVGbGFnc1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBJRGlnZXN0QXBpQ2xpZW50IH0gZnJvbSBcIi4vRGlnZXN0QXBpQ2xpZW50L0lEaWdlc3RBcGlDbGllbnRcIjtcbmltcG9ydCB7IEZha2VEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi9EaWdlc3RBcGlDbGllbnQvRmFrZXMvRmFrZURpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgU2VydmVyRXJyb3JzIH0gZnJvbSBcIi4vQ2FuZHlBcGlDbGllbnRcIjtcbmltcG9ydCB7IEltcG9ydEVtcGxveWVlc1JlcXVlc3QgfSBmcm9tIFwiLi9UeXBlcy9TdGFmZi9JbXBvcnRFbXBsb3llZXNSZXF1ZXN0XCI7XG5pbXBvcnQgeyBNYXNzQWN0aW9uUGFyYW1ldGVycyB9IGZyb20gXCIuL1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmludC9QcmludFR5cGVcIjtcbmltcG9ydCB7IFByaW50UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9QcmludC9QcmludFJlc3BvbnNlXCI7XG5pbXBvcnQgeyBTZXJ2ZXJSYXdSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJhd1Jlc3BvbnNlXCI7XG5cbmV4cG9ydCBjbGFzcyBGYWtlQ2FuZHlBcGlDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlnZXN0Q2xpZW50ID0gbmV3IEZha2VEaWdlc3RBcGlDbGllbnQoKTtcblxuICAgIHB1YmxpYyBjcmVhdGVEaWdlc3RBcGlDbGllbnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSURpZ2VzdEFwaUNsaWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpZ2VzdENsaWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUGlja2xpc3QoZ0lkOiBzdHJpbmcsIGRhdGE6IFBpY2tsaXN0RGF0YUl0ZW1bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpZ2VzdENsaWVudC5jcmVhdGVQaWNrbGlzdChnSWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxHZnZzKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGVja0FsaXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQsIGJvZHk6IEJ1ZmZlcik6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT47XG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nIHwgdW5kZWZpbmVkLCBib2R5PzogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvckRyYWZ0KGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCk6IElDYW5keUFwaURyYWZ0Q2xpZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWtlQ2FuZHlBcGlEcmFmdENsaWVudCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEcmFmdEZyb21Ecml2ZShcbiAgICAgICAgbnM6IHN0cmluZyxcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVFbXB0eURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEluZm9CeUlubnMoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkLCBpbm5zOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8R2V0QnlJbm5SZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGZWF0dXJlRmxhZ3NXaXRob3V0UHJvbWlzZShmZWF0dXJlRmxhZ3M6IEZlYXR1cmVGbGFnc1Jlc3BvbnNlKTogRmVhdHVyZUZsYWdzUmVzcG9uc2Uge1xuICAgICAgICByZXR1cm4gZmVhdHVyZUZsYWdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGZWF0dXJlRmxhZ3MoKTogUHJvbWlzZTxGZWF0dXJlRmxhZ3NSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZTogRmVhdHVyZUZsYWdzUmVzcG9uc2UgPSB7IGNhbmR5VGVzdEZlYXR1cmU6IFwidHJ1ZVwiIH07XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZha2VDYW5keUFwaURyYWZ0Q2xpZW50IGltcGxlbWVudHMgSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgIHB1YmxpYyBkZWxldGVJbnN0YW5jZXMobXVsdGlwbGljaXR5UGF0aDogc3RyaW5nLCBpbnN0YW5jZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW1wb3J0RW1wbG95ZWVzKHJlcXVlc3Q6IEltcG9ydEVtcGxveWVlc1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5NYXNzQWN0aW9uKGFjdGlvbklkOiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBNYXNzQWN0aW9uUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjY2VwdFRyYW5zZmVyVHlwZShcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgdHJhbnNmZXJUeXBlOiBzdHJpbmcsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFNlcnZlckVycm9yUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYW5jZWxUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJEcmFmdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb252ZXJ0RHJhZnRGcm9tUHJldkdmdihyZXF1ZXN0OiBDb252ZXJ0RHJhZnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlT3JVcGRhdGVBdHRhY2htZW50cyhhdHRhY2htZW50czogcmVhZG9ubHkgQXR0YWNoSW5mb1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5xdWV1ZVRhc2sodGFza0lkOiBzdHJpbmcsIHRhc2tJbmZvOiBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbEF0dGFjaG1lbnRzKCk6IFByb21pc2U8QXR0YWNoSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxUYXNrcygpOiBQcm9taXNlPFNlcnZlclRhc2tbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXR0YWNobWVudEJ5SWQoYXR0YWNobWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEF0dGFjaEluZm8+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyhjaGVja1NjZW5hcmlvczogQ2hlY2tTY2VuYXJpb1R5cGVbXSk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXhwZXJ0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFeHBsYW5hdG9yeU5vdGUoKTogUHJvbWlzZTxDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludCh0eXBlOiBQcmludFR5cGUsIGJvZHk/OiBzdHJpbmdbXSk6IFByb21pc2U8UHJpbnRSZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTxGaWxlUHJvcGVydGllcyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nLCBnZnY6IHN0cmluZyk6IFByb21pc2U8RmlsZVByb3BlcnRpZXMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGxvYWRBbmRHZXRGaWxlUHJvcGVydGllcyhcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXSxcbiAgICAgICAgZ2Z2OiBzdHJpbmcsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFVwbG9hZEZpbGVQcm9wZXJ0aWVzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICBzZXJ2ZXJFcnJvcjogU2VydmVyRXJyb3JzLlVua25vd25FcnJvcixcbiAgICAgICAgICAgIHNvdXJjZXNUb3RhbENvdW50OiAwLFxuICAgICAgICAgICAgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRJbm5lcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkRm9ybXNDbGllbnRJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9FcnJvckxvZ1BkZihlcnJvckxvZ05hbWU6IHN0cmluZywgcHJvcHNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvSW5uZXJFZGl0b3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFJlcXVpc2l0ZXMocmVxdWlzaXRlTGlzdDogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldElubmVyKHBhdGhzOiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcnRpYWxJbm5lcihydWxlczogcmVhZG9ubHkgc3RyaW5nW10sIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXIpOiBQcm9taXNlPFNlcnZlcklubmVyUmVzcG9uc2U+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyQXNKc29uVHJlZShydWxlczogcmVhZG9ubHkgc3RyaW5nW10sIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXIpOiBQcm9taXNlPFNlcnZlckpzb25SZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSYXdQYXJ0aWFsSW5uZXJBc0pzb25UcmVlKFxuICAgICAgICBydWxlczogcmVhZG9ubHkgc3RyaW5nW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPFNlcnZlclJhd1Jlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRhc2tCeUlkKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTxTZXJ2ZXJUYXNrIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm9ybWFsaXplQnlSdWxlcyhydWxlczogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGF0Y2hQcmVzZW50YXRpb24odHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlLCBjb250ZW50OiBQcmVzZW50YXRpb25Db250ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlQXR0YWNobWVudHMoYXR0YWNobWVudElkczogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kQ2hhbmdlU2V0KGRhdGE6IFNlcnZlckNoYW5nZVNldCwgY3VycmVudERhdGFWZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPElTZW5kQ2hhbmdlU2V0UmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBkYXRhVmVyc2lvbjogMCB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VuZENoYW5nZVNldFN5bmMoZGF0YTogU2VydmVyQ2hhbmdlU2V0LCBjdXJyZW50RGF0YVZlcnNpb246IG51bWJlcik6IElTZW5kQ2hhbmdlU2V0UmVzdWx0IHtcbiAgICAgICAgcmV0dXJuIDIwMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RnVmQnlEcml2ZVVyaShkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2RcbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtdWx0aXBsZUNvbWJpbmVGdWZCeURyaXZlVXJpKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBGdWZDb21iaW5lTWV0aG9kXG4gICAgKTogUHJvbWlzZTxDb21iaW5lRnVmUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UHJlc2VudGF0aW9uKHR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSwgY29udGVudDogc3RyaW5nIHwgdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFsbENoZWNrYm94ZXNGb3IxMTMxMDMoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaEluc3RhbmNlc0J5VGV4dChcbiAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICBwYXRoUHJlZml4OiBzdHJpbmcsXG4gICAgICAgIHBhdGhzVG9TZWFyY2g6IHN0cmluZ1tdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3VzdG9tTm9ybWFsaXplKG5vcm1hbGl6ZXJJZDogc3RyaW5nLCBwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGF0YVZlcnNpb24oKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgwKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isServerRawResponseRootItem = void 0;
7
+
8
+ const isServerRawResponseRootItem = item => item["@"] != undefined;
9
+
10
+ exports.isServerRawResponseRootItem = isServerRawResponseRootItem;
11
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSYXdSZXNwb25zZS50cyJdLCJuYW1lcyI6WyJpc1NlcnZlclJhd1Jlc3BvbnNlUm9vdEl0ZW0iLCJpdGVtIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBZ0JPLE1BQU1BLDJCQUEyQixHQUNwQ0MsSUFEdUMsSUFFSEEsSUFBSSxDQUFDLEdBQUQsQ0FBSixJQUFhQyxTQUY5QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFBhdGhXaXRoSW5uZXJGaWVsZE5hbWUgPSBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nSW5uZXJWaWV3TW9kZWwge1xuICAgIFtwYXRoOiBQYXRoV2l0aElubmVyRmllbGROYW1lXTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlclJhd1Jlc3BvbnNlUm9vdEl0ZW0ge1xuICAgIFwiQFwiOiBTdHJpbmdJbm5lclZpZXdNb2RlbDtcbn1cblxuZXhwb3J0IHR5cGUgUGF0aFdpdGhNdWx0aXBsaWNpdHlJbnN0YW5jZU51bWJlciA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJSYXdSZXNwb25zZUl0ZW0ge1xuICAgIFtwYXRoOiBQYXRoV2l0aE11bHRpcGxpY2l0eUluc3RhbmNlTnVtYmVyXTogU3RyaW5nSW5uZXJWaWV3TW9kZWw7XG59XG5cbmV4cG9ydCBjb25zdCBpc1NlcnZlclJhd1Jlc3BvbnNlUm9vdEl0ZW0gPSAoXG4gICAgaXRlbTogU2VydmVyUmF3UmVzcG9uc2VSb290SXRlbSB8IFNlcnZlclJhd1Jlc3BvbnNlSXRlbVxuKTogaXRlbSBpcyBTZXJ2ZXJSYXdSZXNwb25zZVJvb3RJdGVtID0+IGl0ZW1bXCJAXCJdICE9IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgU2VydmVyUmF3UmVzcG9uc2UgPSBSZWFkb25seTxbU2VydmVyUmF3UmVzcG9uc2VSb290SXRlbSwgLi4uU2VydmVyUmF3UmVzcG9uc2VJdGVtW11dPjtcbiJdfQ==
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbXX0=