@kontur.candy/tools 2.169.0 → 2.170.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.
Files changed (38) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/distr/Common/CandyApiClient/CandyApiClient.js +27 -7
  3. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +8 -2
  4. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
  5. package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +1 -1
  6. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +1 -1
  7. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +1 -1
  8. package/distr/Common/FormPathUtils.js +14 -0
  9. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +3 -3
  10. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +3 -3
  11. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +3 -3
  12. package/distr/Tools/src/BuildTasks/ReadFormSource.js +3 -2
  13. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +3 -4
  14. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +13 -9
  15. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +59 -115
  16. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +17 -3
  17. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +2 -2
  18. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +69 -25
  19. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +3 -6
  20. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +181 -17
  21. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/WellKnownDirectories.js +11 -0
  22. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +7 -1
  23. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +21 -11
  24. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +4 -2
  25. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +3 -2
  26. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +5 -2
  27. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +8 -4
  28. package/distr/Tools/src/Commons/FormGlobsUtils.js +80 -2
  29. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +12 -4
  30. package/distr/Tools/src/Commons/TasksCore/Observe.js +5 -1
  31. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +4 -4
  32. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  33. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  34. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +60 -47
  35. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  36. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +42 -29
  37. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  38. package/package.json +1 -1
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.BuildServerBackendResourcesUpdatesController = void 0;
8
8
  var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime/helpers/applyDecoratedDescriptor"));
9
9
  var _fs = require("fs");
10
+ var _path = _interopRequireDefault(require("path"));
10
11
  var _lodash = _interopRequireDefault(require("lodash"));
11
12
  var _AsyncUtils = require("../../../../../Common/AsyncUtils");
12
13
  var _Methods = require("../../../Commons/HttpServer/AttributeRouting/Methods");
@@ -14,6 +15,7 @@ var _Params = require("../../../Commons/HttpServer/AttributeRouting/Params");
14
15
  var _Results = require("../../../Commons/HttpServer/AttributeRouting/Results");
15
16
  var _SingletonController = require("../../../Commons/HttpServer/ExpressWrapper/SingletonController");
16
17
  var _GlobToRegexp = require("./GlobToRegexp");
18
+ var _WellKnownDirectories = require("./Directories/WellKnownDirectories");
17
19
  var _dec, _class;
18
20
  let BuildServerBackendResourcesUpdatesController = (_dec = (0, _Methods.httpGet)("/updates-observer/check-last-update-long-poll", _Results.httpReturn.PlainText, (0, _Params.httpQueryParam)("prevLastUpdate", _Params.httpType.Number)), (_class = class BuildServerBackendResourcesUpdatesController extends _SingletonController.SingletonController {
19
21
  constructor(allFarmConfig) {
@@ -21,6 +23,7 @@ let BuildServerBackendResourcesUpdatesController = (_dec = (0, _Methods.httpGet)
21
23
  this.lastUpdateTime = 0;
22
24
  this.updateMonitor = new Monitor();
23
25
  this.farmWatchers = void 0;
26
+ this.formWatchers = void 0;
24
27
  this.resourcesWatcher = void 0;
25
28
  this.allFarmConfig = void 0;
26
29
  this.farmWatchingRegexps = ["forms/*/schemas/*.rng.xml", "forms/*/converters/*", "forms/*/mergers/*",
@@ -28,13 +31,20 @@ let BuildServerBackendResourcesUpdatesController = (_dec = (0, _Methods.httpGet)
28
31
  // forms/*/presentations.json в этом классе возникает событие об измении этого файла и мы генерим очень много
29
32
  // лишних событий об измении ресурсов и CandyApi зависает. Я пока не смог разобраться почему это так.
30
33
  // "forms/*/presentations.json",
31
- "forms/*/form.json", "forms/*/sugar/*.xml", "forms/*/normalize/*.xml", "forms/*/unmap/*.xml", "forms/*/map/*.xml", "forms/*/patch/*.xslt", "picklists/*"].map(_GlobToRegexp.globToRegexp);
34
+ `forms/*/${_WellKnownDirectories.WellKnownDirectories.FormJsonFileName}`, "forms/*/sugar/*.xml", "forms/*/normalize/*.xml", "forms/*/unmap/*.xml", "forms/*/map/*.xml", "forms/*/patch/*.xslt", "picklists/*"].map(_GlobToRegexp.globToRegexp);
35
+ this.formsWatchingRegexps = [`forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/schemas/*.rng.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/converters/*`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/mergers/*`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/presentations.json`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/${_WellKnownDirectories.WellKnownDirectories.FormJsonFileName}`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/sugar/*.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/normalize/*.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/unmap/*.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/map/*.xml`, `forms/**/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}/patch/*.xslt`].map(_GlobToRegexp.globToRegexp);
32
36
  this.handleFarmFSUpdate = (eventType, filePath) => {
33
37
  if (this.farmWatchingRegexps.some(x => x.test(filePath))) {
34
38
  this.lastUpdateTime = Date.now();
35
39
  this.updateMonitor.pulseAll();
36
40
  }
37
41
  };
42
+ this.handleFormFSUpdate = (eventType, filePath) => {
43
+ if (this.formsWatchingRegexps.some(x => x.test(filePath))) {
44
+ this.lastUpdateTime = Date.now();
45
+ this.updateMonitor.pulseAll();
46
+ }
47
+ };
38
48
  this.allFarmConfig = allFarmConfig;
39
49
  this.lastUpdateTime = Date.now();
40
50
  }
@@ -42,6 +52,9 @@ let BuildServerBackendResourcesUpdatesController = (_dec = (0, _Methods.httpGet)
42
52
  this.farmWatchers = this.allFarmConfig.map(config => (0, _fs.watch)(config.farmDirectory, {
43
53
  recursive: true
44
54
  }, _lodash.default.debounce(this.handleFarmFSUpdate, 200)));
55
+ this.formWatchers = this.allFarmConfig.map(config => (0, _fs.watch)(_path.default.normalize(_path.default.join(config.farmDirectory, "..")), {
56
+ recursive: true
57
+ }, _lodash.default.debounce(this.handleFormFSUpdate, 200)));
45
58
  }
46
59
  async getLastUpdateTime(prevLastUpdateTime) {
47
60
  if (prevLastUpdateTime == undefined || prevLastUpdateTime < this.lastUpdateTime) {
@@ -51,8 +64,9 @@ let BuildServerBackendResourcesUpdatesController = (_dec = (0, _Methods.httpGet)
51
64
  return this.lastUpdateTime.toString();
52
65
  }
53
66
  async afterStop() {
54
- var _this$farmWatchers, _this$resourcesWatche;
67
+ var _this$farmWatchers, _this$formWatchers, _this$resourcesWatche;
55
68
  (_this$farmWatchers = this.farmWatchers) === null || _this$farmWatchers === void 0 ? void 0 : _this$farmWatchers.map(i => i.close());
69
+ (_this$formWatchers = this.formWatchers) === null || _this$formWatchers === void 0 ? void 0 : _this$formWatchers.map(i => i.close());
56
70
  (_this$resourcesWatche = this.resourcesWatcher) === null || _this$resourcesWatche === void 0 ? void 0 : _this$resourcesWatche.close();
57
71
  }
58
72
  }, ((0, _applyDecoratedDescriptor2.default)(_class.prototype, "getLastUpdateTime", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "getLastUpdateTime"), _class.prototype)), _class));
@@ -75,4 +89,4 @@ class Monitor {
75
89
  }
76
90
  }
77
91
  }
78
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnMiLCJyZXF1aXJlIiwiX2xvZGFzaCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfQXN5bmNVdGlscyIsIl9NZXRob2RzIiwiX1BhcmFtcyIsIl9SZXN1bHRzIiwiX1NpbmdsZXRvbkNvbnRyb2xsZXIiLCJfR2xvYlRvUmVnZXhwIiwiX2RlYyIsIl9jbGFzcyIsIkJ1aWxkU2VydmVyQmFja2VuZFJlc291cmNlc1VwZGF0ZXNDb250cm9sbGVyIiwiaHR0cEdldCIsImh0dHBSZXR1cm4iLCJQbGFpblRleHQiLCJodHRwUXVlcnlQYXJhbSIsImh0dHBUeXBlIiwiTnVtYmVyIiwiU2luZ2xldG9uQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWxsRmFybUNvbmZpZyIsImxhc3RVcGRhdGVUaW1lIiwidXBkYXRlTW9uaXRvciIsIk1vbml0b3IiLCJmYXJtV2F0Y2hlcnMiLCJyZXNvdXJjZXNXYXRjaGVyIiwiZmFybVdhdGNoaW5nUmVnZXhwcyIsIm1hcCIsImdsb2JUb1JlZ2V4cCIsImhhbmRsZUZhcm1GU1VwZGF0ZSIsImV2ZW50VHlwZSIsImZpbGVQYXRoIiwic29tZSIsIngiLCJ0ZXN0IiwiRGF0ZSIsIm5vdyIsInB1bHNlQWxsIiwiYmVmb3JlU3RhcnQiLCJjb25maWciLCJ3YXRjaCIsImZhcm1EaXJlY3RvcnkiLCJyZWN1cnNpdmUiLCJfIiwiZGVib3VuY2UiLCJnZXRMYXN0VXBkYXRlVGltZSIsInByZXZMYXN0VXBkYXRlVGltZSIsInVuZGVmaW5lZCIsInRvU3RyaW5nIiwiUHJvbWlzZSIsInJhY2UiLCJ3YWl0IiwiZGVsYXkiLCJhZnRlclN0b3AiLCJfdGhpcyRmYXJtV2F0Y2hlcnMiLCJfdGhpcyRyZXNvdXJjZXNXYXRjaGUiLCJpIiwiY2xvc2UiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yMiIsImRlZmF1bHQiLCJwcm90b3R5cGUiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJleHBvcnRzIiwiYXdhaXRlcnMiLCJ3YWl0UHJvbWlzZUhhbmRsZXIiLCJyZXNvbHZlIiwicHVzaCIsImF3YWl0ZXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvQ0xJQ29tbWFuZHMvQnVpbGRTZXJ2ZXIvUmVzb3VyY2VzQ29udHJvbGxlcnMvQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzVXBkYXRlc0NvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRlNXYXRjaGVyLCB3YXRjaCB9IGZyb20gXCJmc1wiO1xuXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgeyBGYXJtQ29uZmlnIH0gZnJvbSBcIlRvb2xzL3NyYy9DYW5keUNMSVwiO1xuXG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQXN5bmNVdGlsc1wiO1xuaW1wb3J0IHsgaHR0cEdldCB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9NZXRob2RzXCI7XG5pbXBvcnQgeyBodHRwUXVlcnlQYXJhbSwgaHR0cFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUGFyYW1zXCI7XG5pbXBvcnQgeyBodHRwUmV0dXJuIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1Jlc3VsdHNcIjtcbmltcG9ydCB7IFNpbmdsZXRvbkNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0V4cHJlc3NXcmFwcGVyL1NpbmdsZXRvbkNvbnRyb2xsZXJcIjtcblxuaW1wb3J0IHsgZ2xvYlRvUmVnZXhwIH0gZnJvbSBcIi4vR2xvYlRvUmVnZXhwXCI7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFNlcnZlckJhY2tlbmRSZXNvdXJjZXNVcGRhdGVzQ29udHJvbGxlciBleHRlbmRzIFNpbmdsZXRvbkNvbnRyb2xsZXIge1xuICAgIHByaXZhdGUgbGFzdFVwZGF0ZVRpbWUgPSAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlTW9uaXRvcjogTW9uaXRvciA9IG5ldyBNb25pdG9yKCk7XG4gICAgcHJpdmF0ZSBmYXJtV2F0Y2hlcnM/OiBGU1dhdGNoZXJbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlc1dhdGNoZXI/OiBGU1dhdGNoZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGxGYXJtQ29uZmlnOiBGYXJtQ29uZmlnW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYXJtV2F0Y2hpbmdSZWdleHBzID0gW1xuICAgICAgICBcImZvcm1zLyovc2NoZW1hcy8qLnJuZy54bWxcIixcbiAgICAgICAgXCJmb3Jtcy8qL2NvbnZlcnRlcnMvKlwiLFxuICAgICAgICBcImZvcm1zLyovbWVyZ2Vycy8qXCIsXG4gICAgICAgIC8vIE5PVEUg0KLRg9GCINGC0LDQutC+0LUg0LTQtdC70L46INC/0L7Rh9C10LzRgy3RgtC+INC40L3QvtCz0LTQsCAo0LjQvdC+0LPQtNCwLCDRgtC+INC10YHRgtGMINC90LUg0LLRgdC10LPQtNCwISksINC60L7Qs9C00LAg0L3QsNC8INC/0YDQuNGF0L7QtNC40YIg0LfQsNC/0YDQvtGBINC90LBcbiAgICAgICAgLy8gZm9ybXMvKi9wcmVzZW50YXRpb25zLmpzb24g0LIg0Y3RgtC+0Lwg0LrQu9Cw0YHRgdC1INCy0L7Qt9C90LjQutCw0LXRgiDRgdC+0LHRi9GC0LjQtSDQvtCxINC40LfQvNC10L3QuNC4INGN0YLQvtCz0L4g0YTQsNC50LvQsCDQuCDQvNGLINCz0LXQvdC10YDQuNC8INC+0YfQtdC90Ywg0LzQvdC+0LPQvlxuICAgICAgICAvLyDQu9C40YjQvdC40YUg0YHQvtCx0YvRgtC40Lkg0L7QsSDQuNC30LzQtdC90LjQuCDRgNC10YHRg9GA0YHQvtCyINC4IENhbmR5QXBpINC30LDQstC40YHQsNC10YIuINCvINC/0L7QutCwINC90LUg0YHQvNC+0LMg0YDQsNC30L7QsdGA0LDRgtGM0YHRjyDQv9C+0YfQtdC80YMg0Y3RgtC+INGC0LDQui5cbiAgICAgICAgLy8gXCJmb3Jtcy8qL3ByZXNlbnRhdGlvbnMuanNvblwiLFxuICAgICAgICBcImZvcm1zLyovZm9ybS5qc29uXCIsXG4gICAgICAgIFwiZm9ybXMvKi9zdWdhci8qLnhtbFwiLFxuICAgICAgICBcImZvcm1zLyovbm9ybWFsaXplLyoueG1sXCIsXG4gICAgICAgIFwiZm9ybXMvKi91bm1hcC8qLnhtbFwiLFxuICAgICAgICBcImZvcm1zLyovbWFwLyoueG1sXCIsXG4gICAgICAgIFwiZm9ybXMvKi9wYXRjaC8qLnhzbHRcIixcbiAgICAgICAgXCJwaWNrbGlzdHMvKlwiLFxuICAgIF0ubWFwKGdsb2JUb1JlZ2V4cCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYWxsRmFybUNvbmZpZzogRmFybUNvbmZpZ1tdKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxsRmFybUNvbmZpZyA9IGFsbEZhcm1Db25maWc7XG4gICAgICAgIHRoaXMubGFzdFVwZGF0ZVRpbWUgPSBEYXRlLm5vdygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBiZWZvcmVTdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mYXJtV2F0Y2hlcnMgPSB0aGlzLmFsbEZhcm1Db25maWcubWFwKGNvbmZpZyA9PlxuICAgICAgICAgICAgd2F0Y2goY29uZmlnLmZhcm1EaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0sIF8uZGVib3VuY2UodGhpcy5oYW5kbGVGYXJtRlNVcGRhdGUsIDIwMCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXG4gICAgICAgIFwiL3VwZGF0ZXMtb2JzZXJ2ZXIvY2hlY2stbGFzdC11cGRhdGUtbG9uZy1wb2xsXCIsXG4gICAgICAgIGh0dHBSZXR1cm4uUGxhaW5UZXh0LFxuICAgICAgICBodHRwUXVlcnlQYXJhbShcInByZXZMYXN0VXBkYXRlXCIsIGh0dHBUeXBlLk51bWJlcilcbiAgICApXG4gICAgcHVibGljIGFzeW5jIGdldExhc3RVcGRhdGVUaW1lKHByZXZMYXN0VXBkYXRlVGltZT86IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmIChwcmV2TGFzdFVwZGF0ZVRpbWUgPT0gdW5kZWZpbmVkIHx8IHByZXZMYXN0VXBkYXRlVGltZSA8IHRoaXMubGFzdFVwZGF0ZVRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxhc3RVcGRhdGVUaW1lLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFt0aGlzLnVwZGF0ZU1vbml0b3Iud2FpdCgpLCBkZWxheSg2MDAwMCldKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFVwZGF0ZVRpbWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYWZ0ZXJTdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmZhcm1XYXRjaGVycz8ubWFwKGkgPT4gaS5jbG9zZSgpKTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNXYXRjaGVyPy5jbG9zZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlRmFybUZTVXBkYXRlID0gKGV2ZW50VHlwZTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZhcm1XYXRjaGluZ1JlZ2V4cHMuc29tZSh4ID0+IHgudGVzdChmaWxlUGF0aCkpKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RVcGRhdGVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9uaXRvci5wdWxzZUFsbCgpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuY2xhc3MgTW9uaXRvciB7XG4gICAgcHJpdmF0ZSBhd2FpdGVyczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcblxuICAgIHB1YmxpYyB3YWl0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UodGhpcy53YWl0UHJvbWlzZUhhbmRsZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwdWxzZUFsbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXdhaXRlcnMgPSBbLi4udGhpcy5hd2FpdGVyc107XG4gICAgICAgIHRoaXMuYXdhaXRlcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBhd2FpdGVyIG9mIGF3YWl0ZXJzKSB7XG4gICAgICAgICAgICBhd2FpdGVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHdhaXRQcm9taXNlSGFuZGxlciA9IChyZXNvbHZlOiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgIHRoaXMuYXdhaXRlcnMucHVzaChyZXNvbHZlKTtcbiAgICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLEdBQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUdBLElBQUFHLFdBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFFBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLG9CQUFBLEdBQUFQLE9BQUE7QUFFQSxJQUFBUSxhQUFBLEdBQUFSLE9BQUE7QUFBOEMsSUFBQVMsSUFBQSxFQUFBQyxNQUFBO0FBQUEsSUFFakNDLDRDQUE0QyxJQUFBRixJQUFBLEdBbUNwRCxJQUFBRyxnQkFBTyxFQUNKLCtDQUErQyxFQUMvQ0MsbUJBQVUsQ0FBQ0MsU0FBUyxFQUNwQixJQUFBQyxzQkFBYyxFQUFDLGdCQUFnQixFQUFFQyxnQkFBUSxDQUFDQyxNQUFNLENBQ3BELENBQUMsR0FBQVAsTUFBQSxHQXZDRSxNQUFNQyw0Q0FBNEMsU0FBU08sd0NBQW1CLENBQUM7RUF1QjNFQyxXQUFXQSxDQUFDQyxhQUEyQixFQUFFO0lBQzVDLEtBQUss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
92
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnMiLCJyZXF1aXJlIiwiX3BhdGgiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2xvZGFzaCIsIl9Bc3luY1V0aWxzIiwiX01ldGhvZHMiLCJfUGFyYW1zIiwiX1Jlc3VsdHMiLCJfU2luZ2xldG9uQ29udHJvbGxlciIsIl9HbG9iVG9SZWdleHAiLCJfV2VsbEtub3duRGlyZWN0b3JpZXMiLCJfZGVjIiwiX2NsYXNzIiwiQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzVXBkYXRlc0NvbnRyb2xsZXIiLCJodHRwR2V0IiwiaHR0cFJldHVybiIsIlBsYWluVGV4dCIsImh0dHBRdWVyeVBhcmFtIiwiaHR0cFR5cGUiLCJOdW1iZXIiLCJTaW5nbGV0b25Db250cm9sbGVyIiwiY29uc3RydWN0b3IiLCJhbGxGYXJtQ29uZmlnIiwibGFzdFVwZGF0ZVRpbWUiLCJ1cGRhdGVNb25pdG9yIiwiTW9uaXRvciIsImZhcm1XYXRjaGVycyIsImZvcm1XYXRjaGVycyIsInJlc291cmNlc1dhdGNoZXIiLCJmYXJtV2F0Y2hpbmdSZWdleHBzIiwiV2VsbEtub3duRGlyZWN0b3JpZXMiLCJGb3JtSnNvbkZpbGVOYW1lIiwibWFwIiwiZ2xvYlRvUmVnZXhwIiwiZm9ybXNXYXRjaGluZ1JlZ2V4cHMiLCJDYW5keVN1YmRpcmVjdG9yeU5hbWUiLCJoYW5kbGVGYXJtRlNVcGRhdGUiLCJldmVudFR5cGUiLCJmaWxlUGF0aCIsInNvbWUiLCJ4IiwidGVzdCIsIkRhdGUiLCJub3ciLCJwdWxzZUFsbCIsImhhbmRsZUZvcm1GU1VwZGF0ZSIsImJlZm9yZVN0YXJ0IiwiY29uZmlnIiwid2F0Y2giLCJmYXJtRGlyZWN0b3J5IiwicmVjdXJzaXZlIiwiXyIsImRlYm91bmNlIiwicGF0aCIsIm5vcm1hbGl6ZSIsImpvaW4iLCJnZXRMYXN0VXBkYXRlVGltZSIsInByZXZMYXN0VXBkYXRlVGltZSIsInVuZGVmaW5lZCIsInRvU3RyaW5nIiwiUHJvbWlzZSIsInJhY2UiLCJ3YWl0IiwiZGVsYXkiLCJhZnRlclN0b3AiLCJfdGhpcyRmYXJtV2F0Y2hlcnMiLCJfdGhpcyRmb3JtV2F0Y2hlcnMiLCJfdGhpcyRyZXNvdXJjZXNXYXRjaGUiLCJpIiwiY2xvc2UiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yMiIsImRlZmF1bHQiLCJwcm90b3R5cGUiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJleHBvcnRzIiwiYXdhaXRlcnMiLCJ3YWl0UHJvbWlzZUhhbmRsZXIiLCJyZXNvbHZlIiwicHVzaCIsImF3YWl0ZXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvQ0xJQ29tbWFuZHMvQnVpbGRTZXJ2ZXIvUmVzb3VyY2VzQ29udHJvbGxlcnMvQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzVXBkYXRlc0NvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRlNXYXRjaGVyLCB3YXRjaCB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHsgRmFybUNvbmZpZyB9IGZyb20gXCJUb29scy9zcmMvQ2FuZHlDTElcIjtcblxuaW1wb3J0IHsgZGVsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0FzeW5jVXRpbHNcIjtcbmltcG9ydCB7IGh0dHBHZXQgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvTWV0aG9kc1wiO1xuaW1wb3J0IHsgaHR0cFF1ZXJ5UGFyYW0sIGh0dHBUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1BhcmFtc1wiO1xuaW1wb3J0IHsgaHR0cFJldHVybiB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9SZXN1bHRzXCI7XG5pbXBvcnQgeyBTaW5nbGV0b25Db250cm9sbGVyIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9FeHByZXNzV3JhcHBlci9TaW5nbGV0b25Db250cm9sbGVyXCI7XG5cbmltcG9ydCB7IGdsb2JUb1JlZ2V4cCB9IGZyb20gXCIuL0dsb2JUb1JlZ2V4cFwiO1xuaW1wb3J0IHsgV2VsbEtub3duRGlyZWN0b3JpZXMgfSBmcm9tIFwiLi9EaXJlY3Rvcmllcy9XZWxsS25vd25EaXJlY3Rvcmllc1wiO1xuXG5leHBvcnQgY2xhc3MgQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzVXBkYXRlc0NvbnRyb2xsZXIgZXh0ZW5kcyBTaW5nbGV0b25Db250cm9sbGVyIHtcbiAgICBwcml2YXRlIGxhc3RVcGRhdGVUaW1lID0gMDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVwZGF0ZU1vbml0b3I6IE1vbml0b3IgPSBuZXcgTW9uaXRvcigpO1xuICAgIHByaXZhdGUgZmFybVdhdGNoZXJzPzogRlNXYXRjaGVyW107XG4gICAgcHJpdmF0ZSBmb3JtV2F0Y2hlcnM/OiBGU1dhdGNoZXJbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlc1dhdGNoZXI/OiBGU1dhdGNoZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGxGYXJtQ29uZmlnOiBGYXJtQ29uZmlnW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYXJtV2F0Y2hpbmdSZWdleHBzID0gW1xuICAgICAgICBcImZvcm1zLyovc2NoZW1hcy8qLnJuZy54bWxcIixcbiAgICAgICAgXCJmb3Jtcy8qL2NvbnZlcnRlcnMvKlwiLFxuICAgICAgICBcImZvcm1zLyovbWVyZ2Vycy8qXCIsXG4gICAgICAgIC8vIE5PVEUg0KLRg9GCINGC0LDQutC+0LUg0LTQtdC70L46INC/0L7Rh9C10LzRgy3RgtC+INC40L3QvtCz0LTQsCAo0LjQvdC+0LPQtNCwLCDRgtC+INC10YHRgtGMINC90LUg0LLRgdC10LPQtNCwISksINC60L7Qs9C00LAg0L3QsNC8INC/0YDQuNGF0L7QtNC40YIg0LfQsNC/0YDQvtGBINC90LBcbiAgICAgICAgLy8gZm9ybXMvKi9wcmVzZW50YXRpb25zLmpzb24g0LIg0Y3RgtC+0Lwg0LrQu9Cw0YHRgdC1INCy0L7Qt9C90LjQutCw0LXRgiDRgdC+0LHRi9GC0LjQtSDQvtCxINC40LfQvNC10L3QuNC4INGN0YLQvtCz0L4g0YTQsNC50LvQsCDQuCDQvNGLINCz0LXQvdC10YDQuNC8INC+0YfQtdC90Ywg0LzQvdC+0LPQvlxuICAgICAgICAvLyDQu9C40YjQvdC40YUg0YHQvtCx0YvRgtC40Lkg0L7QsSDQuNC30LzQtdC90LjQuCDRgNC10YHRg9GA0YHQvtCyINC4IENhbmR5QXBpINC30LDQstC40YHQsNC10YIuINCvINC/0L7QutCwINC90LUg0YHQvNC+0LMg0YDQsNC30L7QsdGA0LDRgtGM0YHRjyDQv9C+0YfQtdC80YMg0Y3RgtC+INGC0LDQui5cbiAgICAgICAgLy8gXCJmb3Jtcy8qL3ByZXNlbnRhdGlvbnMuanNvblwiLFxuICAgICAgICBgZm9ybXMvKi8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkZvcm1Kc29uRmlsZU5hbWV9YCxcbiAgICAgICAgXCJmb3Jtcy8qL3N1Z2FyLyoueG1sXCIsXG4gICAgICAgIFwiZm9ybXMvKi9ub3JtYWxpemUvKi54bWxcIixcbiAgICAgICAgXCJmb3Jtcy8qL3VubWFwLyoueG1sXCIsXG4gICAgICAgIFwiZm9ybXMvKi9tYXAvKi54bWxcIixcbiAgICAgICAgXCJmb3Jtcy8qL3BhdGNoLyoueHNsdFwiLFxuICAgICAgICBcInBpY2tsaXN0cy8qXCIsXG4gICAgXS5tYXAoZ2xvYlRvUmVnZXhwKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1zV2F0Y2hpbmdSZWdleHBzID0gW1xuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L3NjaGVtYXMvKi5ybmcueG1sYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9jb252ZXJ0ZXJzLypgLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L21lcmdlcnMvKmAsXG4gICAgICAgIGBmb3Jtcy8qKi8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkNhbmR5U3ViZGlyZWN0b3J5TmFtZX0vcHJlc2VudGF0aW9ucy5qc29uYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkZvcm1Kc29uRmlsZU5hbWV9YCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9zdWdhci8qLnhtbGAsXG4gICAgICAgIGBmb3Jtcy8qKi8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkNhbmR5U3ViZGlyZWN0b3J5TmFtZX0vbm9ybWFsaXplLyoueG1sYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS91bm1hcC8qLnhtbGAsXG4gICAgICAgIGBmb3Jtcy8qKi8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkNhbmR5U3ViZGlyZWN0b3J5TmFtZX0vbWFwLyoueG1sYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9wYXRjaC8qLnhzbHRgLFxuICAgIF0ubWFwKGdsb2JUb1JlZ2V4cCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYWxsRmFybUNvbmZpZzogRmFybUNvbmZpZ1tdKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxsRmFybUNvbmZpZyA9IGFsbEZhcm1Db25maWc7XG4gICAgICAgIHRoaXMubGFzdFVwZGF0ZVRpbWUgPSBEYXRlLm5vdygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBiZWZvcmVTdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mYXJtV2F0Y2hlcnMgPSB0aGlzLmFsbEZhcm1Db25maWcubWFwKGNvbmZpZyA9PlxuICAgICAgICAgICAgd2F0Y2goY29uZmlnLmZhcm1EaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0sIF8uZGVib3VuY2UodGhpcy5oYW5kbGVGYXJtRlNVcGRhdGUsIDIwMCkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZm9ybVdhdGNoZXJzID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChjb25maWcgPT5cbiAgICAgICAgICAgIHdhdGNoKFxuICAgICAgICAgICAgICAgIHBhdGgubm9ybWFsaXplKHBhdGguam9pbihjb25maWcuZmFybURpcmVjdG9yeSwgXCIuLlwiKSksXG4gICAgICAgICAgICAgICAgeyByZWN1cnNpdmU6IHRydWUgfSxcbiAgICAgICAgICAgICAgICBfLmRlYm91bmNlKHRoaXMuaGFuZGxlRm9ybUZTVXBkYXRlLCAyMDApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXG4gICAgICAgIFwiL3VwZGF0ZXMtb2JzZXJ2ZXIvY2hlY2stbGFzdC11cGRhdGUtbG9uZy1wb2xsXCIsXG4gICAgICAgIGh0dHBSZXR1cm4uUGxhaW5UZXh0LFxuICAgICAgICBodHRwUXVlcnlQYXJhbShcInByZXZMYXN0VXBkYXRlXCIsIGh0dHBUeXBlLk51bWJlcilcbiAgICApXG4gICAgcHVibGljIGFzeW5jIGdldExhc3RVcGRhdGVUaW1lKHByZXZMYXN0VXBkYXRlVGltZT86IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmIChwcmV2TGFzdFVwZGF0ZVRpbWUgPT0gdW5kZWZpbmVkIHx8IHByZXZMYXN0VXBkYXRlVGltZSA8IHRoaXMubGFzdFVwZGF0ZVRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxhc3RVcGRhdGVUaW1lLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFt0aGlzLnVwZGF0ZU1vbml0b3Iud2FpdCgpLCBkZWxheSg2MDAwMCldKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFVwZGF0ZVRpbWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYWZ0ZXJTdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmZhcm1XYXRjaGVycz8ubWFwKGkgPT4gaS5jbG9zZSgpKTtcbiAgICAgICAgdGhpcy5mb3JtV2F0Y2hlcnM/Lm1hcChpID0+IGkuY2xvc2UoKSk7XG4gICAgICAgIHRoaXMucmVzb3VyY2VzV2F0Y2hlcj8uY2xvc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZUZhcm1GU1VwZGF0ZSA9IChldmVudFR5cGU6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGhpcy5mYXJtV2F0Y2hpbmdSZWdleHBzLnNvbWUoeCA9PiB4LnRlc3QoZmlsZVBhdGgpKSkge1xuICAgICAgICAgICAgdGhpcy5sYXN0VXBkYXRlVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1vbml0b3IucHVsc2VBbGwoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZUZvcm1GU1VwZGF0ZSA9IChldmVudFR5cGU6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGhpcy5mb3Jtc1dhdGNoaW5nUmVnZXhwcy5zb21lKHggPT4geC50ZXN0KGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFVwZGF0ZVRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVNb25pdG9yLnB1bHNlQWxsKCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5jbGFzcyBNb25pdG9yIHtcbiAgICBwcml2YXRlIGF3YWl0ZXJzOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuXG4gICAgcHVibGljIHdhaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSh0aGlzLndhaXRQcm9taXNlSGFuZGxlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHB1bHNlQWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhd2FpdGVycyA9IFsuLi50aGlzLmF3YWl0ZXJzXTtcbiAgICAgICAgdGhpcy5hd2FpdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGF3YWl0ZXIgb2YgYXdhaXRlcnMpIHtcbiAgICAgICAgICAgIGF3YWl0ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2FpdFByb21pc2VIYW5kbGVyID0gKHJlc29sdmU6ICgpID0+IHZvaWQpID0+IHtcbiAgICAgICAgdGhpcy5hd2FpdGVycy5wdXNoKHJlc29sdmUpO1xuICAgIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsR0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUcsT0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBR0EsSUFBQUksV0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsb0JBQUEsR0FBQVIsT0FBQTtBQUVBLElBQUFTLGFBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLHFCQUFBLEdBQUFWLE9BQUE7QUFBMEUsSUFBQVcsSUFBQSxFQUFBQyxNQUFBO0FBQUEsSUFFN0RDLDRDQUE0QyxJQUFBRixJQUFBLEdBdURwRCxJQUFBRyxnQkFBTyxFQUNKLCtDQUErQyxFQUMvQ0MsbUJBQVUsQ0FBQ0MsU0FBUyxFQUNw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
@@ -76,7 +76,7 @@ let BuildServerBuildFormsController = (_dec = (0, _Methods.httpGet)("/:update.ho
76
76
  const result = [];
77
77
  const farmFormJsons = (await Promise.all(this.allFarmDirectory.map(i => i.getAllFormJsonFiles()))).flat();
78
78
  for (const farmFormJson of farmFormJsons) {
79
- result.push(`${farmFormJson.gfv}.normalize`);
79
+ result.push(`${farmFormJson.gfv}.json`);
80
80
  }
81
81
  return result;
82
82
  }
@@ -118,4 +118,4 @@ let BuildServerBuildFormsController = (_dec = (0, _Methods.httpGet)("/:update.ho
118
118
  }
119
119
  }, ((0, _applyDecoratedDescriptor2.default)(_class.prototype, "getDevServerUpdateJson", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "getDevServerUpdateJson"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getDevServerUpdateJs", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, "getDevServerUpdateJs"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getDevServerUpdateJsMap", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, "getDevServerUpdateJsMap"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getFormScript", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, "getFormScript"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getFormStyle", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, "getFormStyle"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getFormImages", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, "getFormImages"), _class.prototype)), _class));
120
120
  exports.BuildServerBuildFormsController = BuildServerBuildFormsController;
121
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWltZVR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfUmVzb2x2ZUZvcm1JbmZvIiwiX01ldGhvZHMiLCJfTm90Rm91bmRXZWJFcnJvciIsIl9QYXJhbXMiLCJfUmVzdWx0cyIsIl9TdHJlYW1SZXN1bHRIYW5kbGVyIiwiX1NpbmdsZXRvbkNvbnRyb2xsZXIiLCJfU3RhdGljTG9nZ2VyIiwiX0J1aWxkRm9ybURldlNlcnZlciIsIl9GYXJtRGlyZWN0b3J5IiwiX2RlYyIsIl9kZWMyIiwiX2RlYzMiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJfY2xhc3MiLCJCdWlsZFNlcnZlckJ1aWxkRm9ybXNDb250cm9sbGVyIiwiaHR0cEdldCIsImh0dHBSZXR1cm4iLCJTdHJlYW1XaXRoTWltZSIsImh0dHBVcmxQYXJhbSIsImh0dHBUeXBlIiwiU3RyaW5nIiwiU3RyZWFtIiwiU2luZ2xldG9uQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWxsRmFybUNvbmZpZyIsImNhbmR5TW9kdWxlc0RpcmVjdG9yeSIsInVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMiLCJlbmdpbmVEaXJlY3RvcnkiLCJidWlsZERlYnVnT25seSIsIm5pZ2h0bHkiLCJhbGxGYXJtRGlyZWN0b3J5IiwiYWxsRmFybURpcmVjdG9yeVBhdGgiLCJuZXh0RnJlZVBvcnQiLCJkZXZTZXJ2ZXJzIiwibWFwIiwiZmFybSIsIkZhcm1EaXJlY3RvcnkiLCJmYXJtRGlyZWN0b3J5IiwiZ2V0RGV2U2VydmVyVXBkYXRlSnNvbiIsInVwZGF0ZU5hbWUiLCJnZXRGaXJzdEV4aXN0c0ZpbGVBc1N0cmVhbUZyb21EZXZTZXJ2ZXIiLCJnZXREZXZTZXJ2ZXJVcGRhdGVKcyIsImdldERldlNlcnZlclVwZGF0ZUpzTWFwIiwiZ2V0Rm9ybVNjcmlwdCIsImZpbGVOYW1lIiwiZmlsZU5hbWVXaXRob3V0RXh0IiwiZ2Z2IiwiYnVpbGRGb3JtRGV2U2VydmVyIiwiZ2V0T3JDcmVhdGVCdWlsZEZvcm1EZXZTZXJ2ZXIiLCJTdHJlYW1SZXN1bHQiLCJnZXRGaWxlQXNTdHJlYW0iLCJnZXRGb3JtU3R5bGUiLCJ0aGVtZSIsInJlcGxhY2UiLCJnZXRGb3JtSW1hZ2VzIiwibWltZSIsImxvb2t1cCIsImZpbGVuYW1lIiwibWltZVR5cGUiLCJkZXZTZXJ2ZXIiLCJPYmplY3QiLCJ2YWx1ZXMiLCJ1bmRlZmluZWQiLCJOb3RGb3VuZFdlYkVycm9yIiwiZ2V0QWxsQXR0YWNobWVudFBhdGhGaWxlTmFtZXMiLCJyZXN1bHQiLCJmYXJtRm9ybUpzb25zIiwiUHJvbWlzZSIsImFsbCIsImkiLCJnZXRBbGxGb3JtSnNvbkZpbGVzIiwiZmxhdCIsImZhcm1Gb3JtSnNvbiIsInB1c2giLCJnZXRBdHRhY2htZW50UGF0aHNGaWxlQ29udGVudCIsInJlc3VsdFN0cmVhbSIsImdldEdlbmVyYXRlZEZpbGVBc1N0cmVhbSIsImdldEFsbE5vcm1hbGl6YXRpb25GaWxlTmFtZXMiLCJfZm9ybUNvbmZpZyRzZXR0aW5ncyQiLCJfZm9ybUNvbmZpZyRzZXR0aW5ncyIsImZvcm1Kc29uUGF0aCIsImdldEZvcm1Kc29uUGF0aCIsImZpbHRlciIsIkVycm9yIiwiZm9ybUNvbmZpZyIsInJlYWRGb3JtQ29uZmlnIiwiZ2V0TG9nZ2VyIiwidXNlU2VydmVyU2lkZUZMYW5nTm9ybWFsaXphdGlvbiIsInNldHRpbmdzIiwiZ2V0Tm9ybWFsaXphdGlvbkZpbGVDb250ZW50IiwiQnVpbGRGb3JtRGV2U2VydmVyIiwic3RhcnQiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yMiIsImRlZmF1bHQiLCJwcm90b3R5cGUiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL0NMSUNvbW1hbmRzL0J1aWxkU2VydmVyL1Jlc291cmNlc0NvbnRyb2xsZXJzL0J1aWxkU2VydmVyQnVpbGRGb3Jtc0NvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1pbWUgZnJvbSBcIm1pbWUtdHlwZXNcIjtcbmltcG9ydCB7IEZhcm1Db25maWcgfSBmcm9tIFwiVG9vbHMvc3JjL0NhbmR5Q0xJXCI7XG5cbmltcG9ydCB7IHJlYWRGb3JtQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL0J1aWxkVGFza3MvUmVzb2x2ZUZvcm1JbmZvXCI7XG5pbXBvcnQgeyBodHRwR2V0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL01ldGhvZHNcIjtcbmltcG9ydCB7IE5vdEZvdW5kV2ViRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvTm90Rm91bmRXZWJFcnJvclwiO1xuaW1wb3J0IHsgaHR0cFR5cGUsIGh0dHBVcmxQYXJhbSB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9QYXJhbXNcIjtcbmltcG9ydCB7IGh0dHBSZXR1cm4gfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUmVzdWx0c1wiO1xuaW1wb3J0IHsgU3RyZWFtUmVzdWx0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1Jlc3VsdHMvU3RyZWFtUmVzdWx0SGFuZGxlclwiO1xuaW1wb3J0IHsgU2luZ2xldG9uQ29udHJvbGxlciB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvRXhwcmVzc1dyYXBwZXIvU2luZ2xldG9uQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvTG9nZ2luZy9TdGF0aWNMb2dnZXJcIjtcblxuaW1wb3J0IHsgQnVpbGRGb3JtRGV2U2VydmVyIH0gZnJvbSBcIi4vRGV2U2VydmVycy9CdWlsZEZvcm1EZXZTZXJ2ZXJcIjtcbmltcG9ydCB7IEZhcm1EaXJlY3RvcnkgfSBmcm9tIFwiLi9EaXJlY3Rvcmllcy9GYXJtRGlyZWN0b3J5XCI7XG5pbXBvcnQgeyBJR2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlciB9IGZyb20gXCIuL0lHZW5lcmF0ZWRTZXJ2ZXJTaWRlU291cmNlc1Byb3ZpZGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFNlcnZlckJ1aWxkRm9ybXNDb250cm9sbGVyXG4gICAgZXh0ZW5kcyBTaW5nbGV0b25Db250cm9sbGVyXG4gICAgaW1wbGVtZW50cyBJR2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlclxue1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxsRmFybURpcmVjdG9yeTogRmFybURpcmVjdG9yeVtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgbmV4dEZyZWVQb3J0ID0gMTIwMDE7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXZTZXJ2ZXJzOiB7IFtnZnY6IHN0cmluZ106IHVuZGVmaW5lZCB8IEJ1aWxkRm9ybURldlNlcnZlciB9ID0ge307XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYW5keU1vZHVsZXNEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsbEZhcm1Db25maWc6IEZhcm1Db25maWdbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmdpbmVEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5pZ2h0bHk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBidWlsZERlYnVnT25seTogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgYWxsRmFybUNvbmZpZzogRmFybUNvbmZpZ1tdLFxuICAgICAgICBjYW5keU1vZHVsZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgdXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlczogYm9vbGVhbixcbiAgICAgICAgZW5naW5lRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGJ1aWxkRGVidWdPbmx5OiBib29sZWFuLFxuICAgICAgICBuaWdodGx5OiBib29sZWFuID0gZmFsc2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uaWdodGx5ID0gbmlnaHRseTtcbiAgICAgICAgdGhpcy5hbGxGYXJtRGlyZWN0b3J5ID0gYWxsRmFybUNvbmZpZy5tYXAoZmFybSA9PiBuZXcgRmFybURpcmVjdG9yeShmYXJtLmZhcm1EaXJlY3RvcnkpKTtcbiAgICAgICAgdGhpcy5hbGxGYXJtRGlyZWN0b3J5UGF0aCA9IGFsbEZhcm1Db25maWcubWFwKGZhcm0gPT4gZmFybS5mYXJtRGlyZWN0b3J5KTtcbiAgICAgICAgdGhpcy5jYW5keU1vZHVsZXNEaXJlY3RvcnkgPSBjYW5keU1vZHVsZXNEaXJlY3Rvcnk7XG4gICAgICAgIHRoaXMuYWxsRmFybUNvbmZpZyA9IGFsbEZhcm1Db25maWc7XG4gICAgICAgIHRoaXMudXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlcyA9IHVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXM7XG4gICAgICAgIHRoaXMuZW5naW5lRGlyZWN0b3J5ID0gZW5naW5lRGlyZWN0b3J5O1xuICAgICAgICB0aGlzLmJ1aWxkRGVidWdPbmx5ID0gYnVpbGREZWJ1Z09ubHk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXG4gICAgICAgIFwiLzp1cGRhdGUuaG90LXVwZGF0ZS5qc29uXCIsXG4gICAgICAgIGh0dHBSZXR1cm4uU3RyZWFtV2l0aE1pbWUoXCJhcHBsaWNhdGlvbi9qc29uXCIpLFxuICAgICAgICBodHRwVXJsUGFyYW0oXCJ1cGRhdGVcIiwgaHR0cFR5cGUuU3RyaW5nKVxuICAgIClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0RGV2U2VydmVyVXBkYXRlSnNvbih1cGRhdGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFN0cmVhbVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRGaXJzdEV4aXN0c0ZpbGVBc1N0cmVhbUZyb21EZXZTZXJ2ZXIoYHN0YXRpYy8ke3VwZGF0ZU5hbWV9LmhvdC11cGRhdGUuanNvbmApO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFxuICAgICAgICBcIi86dXBkYXRlLmhvdC11cGRhdGUuanNcIixcbiAgICAgICAgaHR0cFJldHVybi5TdHJlYW1XaXRoTWltZShcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiksXG4gICAgICAgIGh0dHBVcmxQYXJhbShcInVwZGF0ZVwiLCBodHRwVHlwZS5TdHJpbmcpXG4gICAgKVxuICAgIHB1YmxpYyBhc3luYyBnZXREZXZTZXJ2ZXJVcGRhdGVKcyh1cGRhdGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFN0cmVhbVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRGaXJzdEV4aXN0c0ZpbGVBc1N0cmVhbUZyb21EZXZTZXJ2ZXIoYHN0YXRpYy8ke3VwZGF0ZU5hbWV9LmhvdC11cGRhdGUuanNgKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcbiAgICAgICAgXCIvOnVwZGF0ZS5ob3QtdXBkYXRlLmpzLm1hcFwiLFxuICAgICAgICBodHRwUmV0dXJuLlN0cmVhbVdpdGhNaW1lKFwiYXBwbGljYXRpb24vanNvblwiKSxcbiAgICAgICAgaHR0cFVybFBhcmFtKFwidXBkYXRlXCIsIGh0dHBUeXBlLlN0cmluZylcbiAgICApXG4gICAgcHVibGljIGFzeW5jIGdldERldlNlcnZlclVwZGF0ZUpzTWFwKHVwZGF0ZU5hbWU6IHN0cmluZyk6IFByb21pc2U8U3RyZWFtUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEZpcnN0RXhpc3RzRmlsZUFzU3RyZWFtRnJvbURldlNlcnZlcihgc3RhdGljLyR7dXBkYXRlTmFtZX0uaG90LXVwZGF0ZS5qcy5tYXBgKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcbiAgICAgICAgL15cXC9wdWJsaWNcXC9zY3JpcHRzXFwvKCgoXFxkezYsN30pKC5bXFx3XFwtXSopPygubWluKT8pLmpzKSQvaSxcbiAgICAgICAgaHR0cFJldHVybi5TdHJlYW1XaXRoTWltZShcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiksXG4gICAgICAgIGh0dHBVcmxQYXJhbShcIjBcIiwgaHR0cFR5cGUuU3RyaW5nKSxcbiAgICAgICAgaHR0cFVybFBhcmFtKFwiMVwiLCBodHRwVHlwZS5TdHJpbmcpLFxuICAgICAgICBodHRwVXJsUGFyYW0oXCIyXCIsIGh0dHBUeXBlLlN0cmluZylcbiAgICApXG4gICAgcHVibGljIGFzeW5jIGdldEZvcm1TY3JpcHQoZmlsZU5hbWU6IHN0cmluZywgZmlsZU5hbWVXaXRob3V0RXh0OiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYnVpbGRGb3JtRGV2U2VydmVyID0gYXdhaXQgdGhpcy5nZXRPckNyZWF0ZUJ1aWxkRm9ybURldlNlcnZlcihnZnYpO1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbVJlc3VsdChhd2FpdCBidWlsZEZvcm1EZXZTZXJ2ZXIuZ2V0RmlsZUFzU3RyZWFtKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvJHtmaWxlTmFtZX1gKSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXG4gICAgICAgIC9eXFwvcHVibGljXFwvc3R5bGVzXFwvKCgoXFxkezYsN30pKC5bXFx3XFwtXSopPygubWluKT8pLmNzcykkL2ksXG4gICAgICAgIGh0dHBSZXR1cm4uU3RyZWFtV2l0aE1pbWUoXCJ0ZXh0L2Nzc1wiKSxcbiAgICAgICAgaHR0cFVybFBhcmFtKFwiMFwiLCBodHRwVHlwZS5TdHJpbmcpLFxuICAgICAgICBodHRwVXJsUGFyYW0oXCIxXCIsIGh0dHBUeXBlLlN0cmluZyksXG4gICAgICAgIGh0dHBVcmxQYXJhbShcIjJcIiwgaHR0cFR5cGUuU3RyaW5nKSxcbiAgICAgICAgaHR0cFVybFBhcmFtKFwiM1wiLCBodHRwVHlwZS5TdHJpbmcpXG4gICAgKVxuICAgIHB1YmxpYyBhc3luYyBnZXRGb3JtU3R5bGUoXG4gICAgICAgIGZpbGVOYW1lOiBzdHJpbmcsXG4gICAgICAgIGZpbGVOYW1lV2l0aG91dEV4dDogc3RyaW5nLFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgdGhlbWU6IHVuZGVmaW5lZCB8IHN0cmluZ1xuICAgICk6IFByb21pc2U8U3RyZWFtUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkRm9ybURldlNlcnZlciA9IGF3YWl0IHRoaXMuZ2V0T3JDcmVhdGVCdWlsZEZvcm1EZXZTZXJ2ZXIoZ2Z2KTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1SZXN1bHQoXG4gICAgICAgICAgICBhd2FpdCBidWlsZEZvcm1EZXZTZXJ2ZXIuZ2V0RmlsZUFzU3RyZWFtKGBzdGF0aWMvcHVibGljL3N0eWxlcy8ke2ZpbGVOYW1lLnJlcGxhY2UodGhlbWUgPz8gXCJcIiwgXCJcIil9YClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9wdWJsaWMvaW1hZ2VzLzpmaWxlbmFtZVwiLCBodHRwUmV0dXJuLlN0cmVhbSwgaHR0cFVybFBhcmFtKFwiZmlsZW5hbWVcIiwgaHR0cFR5cGUuU3RyaW5nKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0Rm9ybUltYWdlcyhmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0Rmlyc3RFeGlzdHNGaWxlQXNTdHJlYW1Gcm9tRGV2U2VydmVyKFxuICAgICAgICAgICAgYHN0YXRpYy9wdWJsaWMvaW1hZ2VzLyR7ZmlsZU5hbWV9YCxcbiAgICAgICAgICAgIG1pbWUubG9va3VwKGZpbGVOYW1lKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0Rmlyc3RFeGlzdHNGaWxlQXNTdHJlYW1Gcm9tRGV2U2VydmVyKGZpbGVuYW1lOiBzdHJpbmcsIG1pbWVUeXBlPzogc3RyaW5nIHwgZmFsc2UpIHtcbiAgICAgICAgZm9yIChjb25zdCBkZXZTZXJ2ZXIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmRldlNlcnZlcnMpKSB7XG4gICAgICAgICAgICBpZiAoZGV2U2VydmVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyZWFtUmVzdWx0KGF3YWl0IGRldlNlcnZlci5nZXRGaWxlQXNTdHJlYW0oZmlsZW5hbWUpLCBtaW1lVHlwZSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRyeSBuZXh0IHNlcnZlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRXZWJFcnJvcihcIkZpbGUgbm90IGZvdW5kXCIsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxBdHRhY2htZW50UGF0aEZpbGVOYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgY29uc3QgZmFybUZvcm1Kc29ucyA9IChhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmFsbEZhcm1EaXJlY3RvcnkubWFwKGkgPT4gaS5nZXRBbGxGb3JtSnNvbkZpbGVzKCkpKSkuZmxhdCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1Gb3JtSnNvbiBvZiBmYXJtRm9ybUpzb25zKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChgJHtmYXJtRm9ybUpzb24uZ2Z2fS5ub3JtYWxpemVgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBdHRhY2htZW50UGF0aHNGaWxlQ29udGVudChnZnY6IHN0cmluZyk6IFByb21pc2U8Tm9kZUpTLlJlYWRhYmxlU3RyZWFtPiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkRm9ybURldlNlcnZlciA9IGF3YWl0IHRoaXMuZ2V0T3JDcmVhdGVCdWlsZEZvcm1EZXZTZXJ2ZXIoZ2Z2KTtcbiAgICAgICAgY29uc3QgcmVzdWx0U3RyZWFtID0gYXdhaXQgYnVpbGRGb3JtRGV2U2VydmVyLmdldEdlbmVyYXRlZEZpbGVBc1N0cmVhbShgQXR0YWNobWVudFBhdGhzLmpzb25gKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFN0cmVhbTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsTm9ybWFsaXphdGlvbkZpbGVOYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgY29uc3QgZmFybUZvcm1Kc29ucyA9IChhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmFsbEZhcm1EaXJlY3RvcnkubWFwKGkgPT4gaS5nZXRBbGxGb3JtSnNvbkZpbGVzKCkpKSkuZmxhdCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1Gb3JtSnNvbiBvZiBmYXJtRm9ybUpzb25zKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtSnNvblBhdGggPSAoXG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5hbGxGYXJtRGlyZWN0b3J5Lm1hcChpID0+IGkuZ2V0Rm9ybUpzb25QYXRoKGZhcm1Gb3JtSnNvbi5nZnYpKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpID0+IGkgIT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGlmIChmb3JtSnNvblBhdGhbMF0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYGdmdiAke2Zhcm1Gb3JtSnNvbi5nZnZ9IG5vdCBmb3VuZCBpbiBjb25maWcgZGlyYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmb3JtQ29uZmlnID0gYXdhaXQgcmVhZEZvcm1Db25maWcoZm9ybUpzb25QYXRoWzBdLCBnZXRMb2dnZXIoKSk7XG4gICAgICAgICAgICBjb25zdCB1c2VTZXJ2ZXJTaWRlRkxhbmdOb3JtYWxpemF0aW9uID0gZm9ybUNvbmZpZy5zZXR0aW5ncz8udXNlU2VydmVyU2lkZUZMYW5nTm9ybWFsaXphdGlvbiA/PyBmYWxzZTtcbiAgICAgICAgICAgIGlmICh1c2VTZXJ2ZXJTaWRlRkxhbmdOb3JtYWxpemF0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7ZmFybUZvcm1Kc29uLmdmdn0ubm9ybWFsaXplYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Tm9ybWFsaXphdGlvbkZpbGVDb250ZW50KGdmdjogc3RyaW5nKTogUHJvbWlzZTxOb2RlSlMuUmVhZGFibGVTdHJlYW0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRGb3JtRGV2U2VydmVyID0gYXdhaXQgdGhpcy5nZXRPckNyZWF0ZUJ1aWxkRm9ybURldlNlcnZlcihnZnYpO1xuICAgICAgICBjb25zdCByZXN1bHRTdHJlYW0gPSBhd2FpdCBidWlsZEZvcm1EZXZTZXJ2ZXIuZ2V0R2VuZXJhdGVkRmlsZUFzU3RyZWFtKGBTZXJ2ZXJTaWRlLm5vcm1hbGl6ZWApO1xuICAgICAgICByZXR1cm4gcmVzdWx0U3RyZWFtO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0T3JDcmVhdGVCdWlsZEZvcm1EZXZTZXJ2ZXIoZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEJ1aWxkRm9ybURldlNlcnZlcj4ge1xuICAgICAgICBsZXQgZGV2U2VydmVyID0gdGhpcy5kZXZTZXJ2ZXJzW2dmdl07XG4gICAgICAgIGlmIChkZXZTZXJ2ZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkZXZTZXJ2ZXIgPSBuZXcgQnVpbGRGb3JtRGV2U2VydmVyKFxuICAgICAgICAgICAgICAgIHRoaXMubmV4dEZyZWVQb3J0KyssXG4gICAgICAgICAgICAgICAgdGhpcy5hbGxGYXJtRGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgICAgICBnZnYsXG4gICAgICAgICAgICAgICAgdGhpcy5jYW5keU1vZHVsZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgdGhpcy5hbGxGYXJtQ29uZmlnLFxuICAgICAgICAgICAgICAgIHRoaXMudXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlcyxcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRGVidWdPbmx5LFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIHRoaXMubmlnaHRseVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZGV2U2VydmVyc1tnZnZdID0gZGV2U2VydmVyO1xuICAgICAgICAgICAgYXdhaXQgZGV2U2VydmVyLnN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRldlNlcnZlcjtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsVUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBR0EsSUFBQUMsZ0JBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGlCQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxRQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxvQkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sb0JBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLGFBQUEsR0FBQVIsT0FBQTtBQUVBLElBQUFTLG1CQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxjQUFBLEdBQUFWLE9BQUE7QUFBNEQsSUFBQVcsSUFBQSxFQUFBQyxLQUFBLEVBQUFDLEtBQUEsRUFBQUMsS0FBQSxFQUFBQyxLQUFBLEVBQUFDLEtBQUEsRUFBQUMsTUFBQTtBQUFBLElBRy9DQywrQkFBK0IsSUFBQVAsSUFBQSxHQWtDdkMsSUFBQVEsZ0JBQU8sRUFDSiwwQkFBMEIsRUFDMUJDLG1CQUFVLENBQUNDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUM3QyxJQUFBQyxvQkFBWSxFQUFDLFFBQVEsRUFBRUMsZ0JBQVEsQ0FBQ0MsTUFBTSxDQUMxQyxDQUFDLEVBQUFaLEtBQUEsR0FLQSxJQUFBTyxnQkFBTyxFQUNKLHdCQUF3QixFQUN4QkMsbUJBQVUsQ0FBQ0MsY0FBYyxDQUFDLHdCQUF3QixDQUFDLEVBQ25ELElBQUFDLG9CQUFZLEVBQUMsUUFBUSxFQUFFQyxnQkFBUSxDQUFDQyxNQUFNLENBQzFDLENBQUMsRUFBQVgsS0FBQSxHQUtBLElBQUFNLGdCQUFPLEVBQ0osNEJBQTRCLEVBQzVCQyxtQkFBVSxDQUFDQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsRUFDN0MsSUFBQUMsb0JBQVksRUFBQyxRQUFRLEVBQUVDLGdCQUFRLENBQUNDLE1BQU0sQ0FDMUMsQ0FBQyxFQUFBVixLQUFBLEdBS0EsSUFBQUssZ0JBQU8sRUFDSiwwREFBMEQsRUFDMURDLG1CQUFVLENBQUNDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUNuRCxJQUFBQyxvQkFBWSxFQUFDLEdBQUcsRUFBRUMsZ0JBQVEsQ0FBQ0MsTUFBTSxDQUFDLEVBQ2xDLElBQUFGLG9CQUFZLEVBQUMsR0FBRyxFQUFFQyxnQkFBUSxDQUFDQyxNQUFNLENBQUMsRUFDbEMsSUFBQUYsb0JBQVksRUFBQyxHQUFHLEVBQUVDLGdCQUFRLENBQUNDLE1BQU0sQ0FDckMsQ0FBQyxFQUFBVCxLQUFBLEdBTUEsSUFBQUksZ0JBQU8sRUFDSiwwREFBMEQsRUFDMURDLG1CQUFVLENBQUNDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFDckMsSUFBQUMsb0JBQVksRUFBQyxHQUFHLEVBQUVDLGdCQUFRLENBQUNDLE1BQU0sQ0FBQyxFQUNsQyxJQUFBRixvQkFBWSxFQUFDLEdBQUcsRUFBRUMsZ0JBQVEsQ0FBQ0MsTUFBTSxDQUFDLEVBQ2xDLElBQUFGLG9CQUFZLEVBQUMsR0FBRyxFQUFFQyxnQkFBUSxDQUFDQyxNQUFNLENBQUMsRUFDbEMsSUFBQUYsb0JBQVksRUFBQyxHQUFHLEVBQUVDLGdCQUFRLENBQUNDLE1BQU0sQ0FDckMsQ0FBQyxFQUFBUixLQUFBLEdBYUEsSUFBQUcsZ0JBQU8sRUFBQywwQkFBMEIsRUFBRUMsbUJBQVUsQ0FBQ0ssTUFBTSxFQUFFLElBQUFILG9CQUFZLEVBQUMsVUFBVSxFQUFFQyxnQkFBUSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxHQUFBUCxNQUFBLEdBN0YvRixNQUFNQywrQkFBK0IsU0FDaENRLHdDQUFtQixDQUUvQjtFQVlXQyxXQUFXQSxDQUNkQyxhQUEyQixFQUMzQkMscUJBQTZCLEVBQzdCQyw0QkFBcUMsRUFDckNDLGVBQXVCLEVBQ3ZCQyxjQUF1QixFQUN2QkMsT0FBZ0IsR0FBRyxLQUFLLEVBQzFCO0lBQ0UsS0FBSyxDQUFDLENBQUM7SUFBQyxLQW5CS0MsZ0JBQWdCO0lBQUEsS0FDaEJDLG9CQUFvQjtJQUFBLEtBQzdCQyxZQUFZLEdBQUcsS0FBSztJQUFBLEtBQ1hDLFVBQVUsR0FBc0QsQ0FBQyxDQUFDO0lBQUEsS0FDbEVSLHFCQUFxQjtJQUFBLEtBQ3JCRCxhQUFhO0lBQUEsS0FDYkUsNEJBQTRCO0lBQUEsS0FDNUJDLGVBQWU7SUFBQSxLQUNmRSxPQUFPO0lBQUEsS0FDUEQsY0FBYztJQVczQixJQUFJLENBQUNDLE9BQU8sR0FBR0EsT0FBTztJQUN0QixJQUFJLENBQUNDLGdCQUFnQixHQUFHTixhQUFhLENBQUNVLEdBQUcsQ0FBQ0MsSUFBSSxJQUFJLElBQUlDLDRCQUFhLENBQUNELElBQUksQ0FBQ0UsYUFBYSxDQUFDLENBQUM7SUFDeEYsSUFBSSxDQUFDTixvQkFBb0IsR0FBR1AsYUFBYSxDQUFDVSxHQUFHLENBQUNDLElBQUksSUFBSUEsSUFBSSxDQUFDRSxhQUFhLENBQUM7SUFDekUsSUFBSSxDQUFDWixxQkFBcUIsR0FBR0EscUJBQXFCO0lBQ2xELElBQUksQ0FBQ0QsYUFBYSxHQUFHQSxhQUFhO0lBQ2xDLElBQUksQ0FBQ0UsNEJBQTRCLEdBQUdBLDRCQUE0QjtJQUNoRSxJQUFJLENBQUNDLGVBQWUsR0FBR0EsZUFBZTtJQUN0QyxJQUFJLENBQUNDLGNBQWMsR0FBR0EsY0FBYztFQUN4QztFQUVBLE1BS2FVLHNCQUFzQkEsQ0FBQ0MsVUFBa0IsRUFBeUI7SUFDM0UsT0FBTyxNQUFNLElBQUksQ0FBQ0MsdUNBQXVDLENBQUUsVUFBU0QsVUFBVyxrQkFBaUIsQ0FBQztFQUNyRztFQUVBLE1BS2FFLG9CQUFvQkEsQ0FBQ0YsVUFBa0IsRUFBeUI7SUFDekUsT0FBTyxNQUFNLElBQUksQ0FBQ0MsdUNBQXVDLENBQUUsVUFBU0QsVUFBVyxnQkFBZSxDQUFDO0VBQ25HO0VBRUEsTUFLYUcsdUJBQXVCQSxDQUFDSCxVQUFrQixFQUF5QjtJQUM1RSxPQUFPLE1BQU0sSUFBSSxDQUFDQyx1Q0FBdUMsQ0FBRSxVQUFTRCxVQUFXLG9CQUFtQixDQUFDO0VBQ3ZHO0VBRUEsTUFPYUksYUFBYUEsQ0FBQ0MsUUFBZ0IsRUFBRUMsa0JBQTBCLEVBQUVDLEdBQVcsRUFBeUI7SUFDekcsTUFBTUMsa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUNDLDZCQUE2QixDQUFDRixHQUFHLENBQUM7SUFDeEUsT0FBTyxJQUFJRyxpQ0FBWSxDQUFDLE1BQU1GLGtCQUFrQixDQUFDRyxlQUFlLENBQUUseUJBQXdCTixRQUFTLEVBQUMsQ0FBQyxDQUFDO0VBQzFHO0VBRUEsTUFRYU8sWUFBWUEsQ0FDckJQLFFBQWdCLEVBQ2hCQyxrQkFBMEIsRUFDMUJDLEdBQVcsRUFDWE0sS0FBeUIsRUFDSjtJQUNyQixNQUFNTCxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQ0MsNkJBQTZCLENBQUNGLEdBQUcsQ0FBQztJQUN4RSxPQUFPLElBQUlHLGlDQUFZLENBQ25CLE1BQU1GLGtCQUFrQixDQUFDRyxlQUFlLENBQUUsd0JBQXVCTixRQUFRLENBQUNTLE9BQU8sQ0FBQ0QsS0FBSyxhQUFMQSxLQUFLLGNBQUxBLEtBQUssR0FBSSxFQUFFLEVBQUUsRUFBRSxDQUFFLEVBQUMsQ0FDeEcsQ0FBQztFQUNMO0VBRUEsTUFDYUUsYUFBYUEsQ0FBQ1YsUUFBZ0IsRUFBeUI7SUFDaEUsT0FBTyxNQUFNLElBQUksQ0FBQ0osdUNBQXVDLENBQ3BELHdCQUF1QkksUUFBUyxFQUFDLEVBQ2xDVyxrQkFBSSxDQUFDQyxNQUFNLENBQUNaLFFBQVEsQ0FDeEIsQ0FBQztFQUNMO0VBRUEsTUFBY0osdUNBQXVDQSxDQUFDaUIsUUFBZ0IsRUFBRUMsUUFBeUIsRUFBRTtJQUMvRixLQUFLLE1BQU1DLFNBQVMsSUFBSUMsTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDNUIsVUFBVSxDQUFDLEVBQUU7TUFDcEQsSUFBSTBCLFNBQVMsSUFBSUcsU0FBUyxFQUFFO1FBQ3hCLElBQUk7VUFDQSxPQUFPLElBQUliLGlDQUFZLENBQUMsTUFBTVUsU0FBUyxDQUFDVCxlQUFlLENBQUNPLFFBQVEsQ0FBQyxFQUFFQyxRQUFRLENBQUM7UUFDaEYsQ0FBQyxDQUFDLE1BQU07VUFDSjtRQUFBO01BRVI7SUFDSjtJQUNBLE1BQU0sSUFBSUssa0NBQWdCLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO0VBQ3REO0VBRUEsTUFBYUMsNkJBQTZCQSxDQUFBLEVBQXNCO0lBQzVELE1BQU1DLE1BQWdCLEdBQUcsRUFBRTtJQUMzQixNQUFNQyxhQUFhLEdBQUcsQ0FBQyxNQUFNQyxPQUFPLENBQUNDLEdBQUcsQ0FBQyxJQUFJLENBQUN0QyxnQkFBZ0IsQ0FBQ0ksR0FBRyxDQUFDbUMsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVDLElBQUksQ0FBQyxDQUFDO0lBQ3pHLEtBQUssTUFBTUMsWUFBWSxJQUFJTixhQUFhLEVBQUU7TUFDdENELE1BQU0sQ0FBQ1EsSUFBSSxDQUFFLEdBQUVELFlBQVksQ0FBQzFCLEdBQUksWUFBVyxDQUFDO0lBQ2hEO0lBQ0EsT0FBT21CLE1BQU07RUFDakI7RUFFQSxNQUFhUyw2QkFBNkJBLENBQUM1QixHQUFXLEVBQWtDO0lBQ3BGLE1BQU1DLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDQyw2QkFBNkIsQ0FBQ0YsR0FBRyxDQUFDO0lBQ3hFLE1BQU02QixZQUFZLEdBQUcsTUFBTTVCLGtCQUFrQixDQUFDNkIsd0JBQXdCLENBQUUsc0JBQXFCLENBQUM7SUFDOUYsT0FBT0QsWUFBWTtFQUN2QjtFQUVBLE1BQWFFLDRCQUE0QkEsQ0FBQSxFQUFzQjtJQUMzRCxNQUFNWixNQUFnQixHQUFHLEVBQUU7SUFDM0IsTUFBTUMsYUFBYSxHQUFHLENBQUMsTUFBTUMsT0FBTyxDQUFDQyxHQUFHLENBQUMsSUFBSSxDQUFDdEMsZ0JBQWdCLENBQUNJLEdBQUcsQ0FBQ21DLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFQyxJQUFJLENBQUMsQ0FBQztJQUN6RyxLQUFLLE1BQU1DLFlBQVksSUFBSU4sYUFBYSxFQUFFO01BQUEsSUFBQVkscUJBQUEsRUFBQUMsb0JBQUE7TUFDdEMsTUFBTUMsWUFBWSxHQUFHLENBQ2pCLE1BQU1iLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLElBQUksQ0FBQ3RDLGdCQUFnQixDQUFDSSxHQUFHLENBQUNtQyxDQUFDLElBQUlBLENBQUMsQ0FBQ1ksZUFBZSxDQUFDVCxZQUFZLENBQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBRXJGeUIsSUFBSSxDQUFDLENBQUMsQ0FDTlcsTUFBTSxDQUFDYixDQUFDLElBQUlBLENBQUMsSUFBSVAsU0FBUyxDQUFDO01BQ2hDLElBQUlrQixZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUlsQixTQUFTLEVBQUU7UUFDOUIsTUFBTXFCLEtBQUssQ0FBRSxPQUFNWCxZQUFZLENBQUMxQixHQUFJLDBCQUF5QixDQUFDO01BQ2xFO01BQ0EsTUFBTXNDLFVBQVUsR0FBRyxNQUFNLElBQUFDLCtCQUFjLEVBQUNMLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFBTSx1QkFBUyxFQUFDLENBQUMsQ0FBQztNQUNyRSxNQUFNQywrQkFBK0IsSUFBQVQscUJBQUEsSUFBQUMsb0JBQUEsR0FBR0ssVUFBVSxDQUFDSSxRQUFRLGNBQUFULG9CQUFBLHVCQUFuQkEsb0JBQUEsQ0FBcUJRLCtCQUErQixjQUFBVCxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLEtBQUs7TUFDckcsSUFBSVMsK0JBQStCLEVBQUU7UUFDakN0QixNQUFNLENBQUNRLElBQUksQ0FBRSxHQUFFRCxZQUFZLENBQUMxQixHQUFJLFlBQVcsQ0FBQztNQUNoRDtJQUNKO0lBQ0EsT0FBT21CLE1BQU07RUFDakI7RUFFQSxNQUFhd0IsMkJBQTJCQSxDQUFDM0MsR0FBVyxFQUFrQztJQUNsRixNQUFNQyxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQ0MsNkJBQTZCLENBQUNGLEdBQUcsQ0FBQztJQUN4RSxNQUFNNkIsWUFBWSxHQUFHLE1BQU01QixrQkFBa0IsQ0FBQzZCLHdCQUF3QixDQUFFLHNCQUFxQixDQUFDO0lBQzlGLE9BQU9ELFlBQVk7RUFDdkI7RUFFQSxNQUFjM0IsNkJBQTZCQSxDQUFDRixHQUFXLEVBQStCO0lBQ2xGLElBQUlhLFNBQVMsR0FBRyxJQUFJLENBQUMxQixVQUFVLENBQUNhLEdBQUcsQ0FBQztJQUNwQyxJQUFJYSxTQUFTLElBQUlHLFNBQVMsRUFBRTtNQUN4QkgsU0FBUyxHQUFHLElBQUkrQixzQ0FBa0IsQ0FDOUIsSUFBSSxDQUFDMUQsWUFBWSxFQUFFLEVBQ25CLElBQUksQ0FBQ0Qsb0JBQW9CLEVBQ3pCZSxHQUFHLEVBQ0gsSUFBSSxDQUFDckIscUJBQXFCLEVBQzFCLElBQUksQ0FBQ0QsYUFBYSxFQUNsQixJQUFJLENBQUNFLDRCQUE0QixFQUNqQyxJQUFJLENBQUNDLGVBQWUsRUFDcEIsSUFBSSxDQUFDQyxjQUFjLEVBQ25CLEtBQUssRUFDTCxJQUFJLENBQUNDLE9BQ1QsQ0FBQztNQUNELElBQUksQ0FBQ0ksVUFBVSxDQUFDYSxHQUFHLENBQUMsR0FBR2EsU0FBUztNQUNoQyxNQUFNQSxTQUFTLENBQUNnQyxLQUFLLENBQUMsQ0FBQztJQUMzQjtJQUNBLE9BQU9oQyxTQUFTO0VBQ3BCO0FBQ0osQ0FBQyxPQUFBaUMsMEJBQUEsQ0FBQUMsT0FBQSxFQUFBaEYsTUFBQSxDQUFBaUYsU0FBQSw2QkFBQXZGLElBQUEsR0FBQXFELE1BQUEsQ0FBQW1DLHdCQUFBLENBQUFsRixNQUFBLENBQUFpRixTQUFBLDZCQUFBakYsTUFBQSxDQUFBaUYsU0FBQSxPQUFBRiwwQkFBQSxDQUFBQyxPQUFBLEVBQUFoRixNQUFBLENBQUFpRixTQUFBLDJCQUFBdEYsS0FBQSxHQUFBb0QsTUFBQSxDQUFBbUMsd0JBQUEsQ0FBQWxGLE1BQUEsQ0FBQWlGLFNBQUEsMkJBQUFqRixNQUFBLENBQUFpRixTQUFBLE9BQUFGLDBCQUFBLENBQUFDLE9BQUEsRUFBQWhGLE1BQUEsQ0FBQWlGLFNBQUEsOEJBQUFyRixLQUFBLEdBQUFtRCxNQUFBLENBQUFtQyx3QkFBQSxDQUFBbEYsTUFBQSxDQUFBaUYsU0FBQSw4QkFBQWpGLE1BQUEsQ0FBQWlGLFNBQUEsT0FBQUYsMEJBQUEsQ0FBQUMsT0FBQSxFQUFBaEYsTUFBQSxDQUFBaUYsU0FBQSxvQkFBQXBGLEtBQUEsR0FBQWtELE1BQUEsQ0FBQW1DLHdCQUFBLENBQUFsRixNQUFBLENBQUFpRixTQUFBLG9CQUFBakYsTUFBQSxDQUFBaUYsU0FBQSxPQUFBRiwwQkFBQSxDQUFBQyxPQUFBLEVBQUFoRixNQUFBLENBQUFpRixTQUFBLG1CQUFBbkYsS0FBQSxHQUFBaUQsTUFBQSxDQUFBbUMsd0JBQUEsQ0FBQWxGLE1BQUEsQ0FBQWlGLFNBQUEsbUJBQUFqRixNQUFBLENBQUFpRixTQUFBLE9BQUFGLDBCQUFBLENBQUFDLE9BQUEsRUFBQWhGLE1BQUEsQ0FBQWlGLFNBQUEsb0JBQUFsRixLQUFBLEdBQUFnRCxNQUFBLENBQUFtQyx3QkFBQSxDQUFBbEYsTUFBQSxDQUFBaUYsU0FBQSxvQkFBQWpGLE1BQUEsQ0FBQWlGLFNBQUEsSUFBQWpGLE1BQUE7QUFBQW1GLE9BQUEsQ0FBQWxGLCtCQUFBLEdBQUFBLCtCQUFBIn0=
121
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWltZVR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfUmVzb2x2ZUZvcm1JbmZvIiwiX01ldGhvZHMiLCJfTm90Rm91bmRXZWJFcnJvciIsIl9QYXJhbXMiLCJfUmVzdWx0cyIsIl9TdHJlYW1SZXN1bHRIYW5kbGVyIiwiX1NpbmdsZXRvbkNvbnRyb2xsZXIiLCJfU3RhdGljTG9nZ2VyIiwiX0J1aWxkRm9ybURldlNlcnZlciIsIl9GYXJtRGlyZWN0b3J5IiwiX2RlYyIsIl9kZWMyIiwiX2RlYzMiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJfY2xhc3MiLCJCdWlsZFNlcnZlckJ1aWxkRm9ybXNDb250cm9sbGVyIiwiaHR0cEdldCIsImh0dHBSZXR1cm4iLCJTdHJlYW1XaXRoTWltZSIsImh0dHBVcmxQYXJhbSIsImh0dHBUeXBlIiwiU3RyaW5nIiwiU3RyZWFtIiwiU2luZ2xldG9uQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWxsRmFybUNvbmZpZyIsImNhbmR5TW9kdWxlc0RpcmVjdG9yeSIsInVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMiLCJlbmdpbmVEaXJlY3RvcnkiLCJidWlsZERlYnVnT25seSIsIm5pZ2h0bHkiLCJhbGxGYXJtRGlyZWN0b3J5IiwiYWxsRmFybURpcmVjdG9yeVBhdGgiLCJuZXh0RnJlZVBvcnQiLCJkZXZTZXJ2ZXJzIiwibWFwIiwiZmFybSIsIkZhcm1EaXJlY3RvcnkiLCJmYXJtRGlyZWN0b3J5IiwiZ2V0RGV2U2VydmVyVXBkYXRlSnNvbiIsInVwZGF0ZU5hbWUiLCJnZXRGaXJzdEV4aXN0c0ZpbGVBc1N0cmVhbUZyb21EZXZTZXJ2ZXIiLCJnZXREZXZTZXJ2ZXJVcGRhdGVKcyIsImdldERldlNlcnZlclVwZGF0ZUpzTWFwIiwiZ2V0Rm9ybVNjcmlwdCIsImZpbGVOYW1lIiwiZmlsZU5hbWVXaXRob3V0RXh0IiwiZ2Z2IiwiYnVpbGRGb3JtRGV2U2VydmVyIiwiZ2V0T3JDcmVhdGVCdWlsZEZvcm1EZXZTZXJ2ZXIiLCJTdHJlYW1SZXN1bHQiLCJnZXRGaWxlQXNTdHJlYW0iLCJnZXRGb3JtU3R5bGUiLCJ0aGVtZSIsInJlcGxhY2UiLCJnZXRGb3JtSW1hZ2VzIiwibWltZSIsImxvb2t1cCIsImZpbGVuYW1lIiwibWltZVR5cGUiLCJkZXZTZXJ2ZXIiLCJPYmplY3QiLCJ2YWx1ZXMiLCJ1bmRlZmluZWQiLCJOb3RGb3VuZFdlYkVycm9yIiwiZ2V0QWxsQXR0YWNobWVudFBhdGhGaWxlTmFtZXMiLCJyZXN1bHQiLCJmYXJtRm9ybUpzb25zIiwiUHJvbWlzZSIsImFsbCIsImkiLCJnZXRBbGxGb3JtSnNvbkZpbGVzIiwiZmxhdCIsImZhcm1Gb3JtSnNvbiIsInB1c2giLCJnZXRBdHRhY2htZW50UGF0aHNGaWxlQ29udGVudCIsInJlc3VsdFN0cmVhbSIsImdldEdlbmVyYXRlZEZpbGVBc1N0cmVhbSIsImdldEFsbE5vcm1hbGl6YXRpb25GaWxlTmFtZXMiLCJfZm9ybUNvbmZpZyRzZXR0aW5ncyQiLCJfZm9ybUNvbmZpZyRzZXR0aW5ncyIsImZvcm1Kc29uUGF0aCIsImdldEZvcm1Kc29uUGF0aCIsImZpbHRlciIsIkVycm9yIiwiZm9ybUNvbmZpZyIsInJlYWRGb3JtQ29uZmlnIiwiZ2V0TG9nZ2VyIiwidXNlU2VydmVyU2lkZUZMYW5nTm9ybWFsaXphdGlvbiIsInNldHRpbmdzIiwiZ2V0Tm9ybWFsaXphdGlvbkZpbGVDb250ZW50IiwiQnVpbGRGb3JtRGV2U2VydmVyIiwic3RhcnQiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yMiIsImRlZmF1bHQiLCJwcm90b3R5cGUiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL0NMSUNvbW1hbmRzL0J1aWxkU2VydmVyL1Jlc291cmNlc0NvbnRyb2xsZXJzL0J1aWxkU2VydmVyQnVpbGRGb3Jtc0NvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1pbWUgZnJvbSBcIm1pbWUtdHlwZXNcIjtcbmltcG9ydCB7IEZhcm1Db25maWcgfSBmcm9tIFwiVG9vbHMvc3JjL0NhbmR5Q0xJXCI7XG5cbmltcG9ydCB7IHJlYWRGb3JtQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL0J1aWxkVGFza3MvUmVzb2x2ZUZvcm1JbmZvXCI7XG5pbXBvcnQgeyBodHRwR2V0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL01ldGhvZHNcIjtcbmltcG9ydCB7IE5vdEZvdW5kV2ViRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvTm90Rm91bmRXZWJFcnJvclwiO1xuaW1wb3J0IHsgaHR0cFR5cGUsIGh0dHBVcmxQYXJhbSB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9QYXJhbXNcIjtcbmltcG9ydCB7IGh0dHBSZXR1cm4gfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUmVzdWx0c1wiO1xuaW1wb3J0IHsgU3RyZWFtUmVzdWx0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1Jlc3VsdHMvU3RyZWFtUmVzdWx0SGFuZGxlclwiO1xuaW1wb3J0IHsgU2luZ2xldG9uQ29udHJvbGxlciB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvRXhwcmVzc1dyYXBwZXIvU2luZ2xldG9uQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvTG9nZ2luZy9TdGF0aWNMb2dnZXJcIjtcblxuaW1wb3J0IHsgQnVpbGRGb3JtRGV2U2VydmVyIH0gZnJvbSBcIi4vRGV2U2VydmVycy9CdWlsZEZvcm1EZXZTZXJ2ZXJcIjtcbmltcG9ydCB7IEZhcm1EaXJlY3RvcnkgfSBmcm9tIFwiLi9EaXJlY3Rvcmllcy9GYXJtRGlyZWN0b3J5XCI7XG5pbXBvcnQgeyBJR2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlciB9IGZyb20gXCIuL0lHZW5lcmF0ZWRTZXJ2ZXJTaWRlU291cmNlc1Byb3ZpZGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFNlcnZlckJ1aWxkRm9ybXNDb250cm9sbGVyXG4gICAgZXh0ZW5kcyBTaW5nbGV0b25Db250cm9sbGVyXG4gICAgaW1wbGVtZW50cyBJR2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlclxue1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxsRmFybURpcmVjdG9yeTogRmFybURpcmVjdG9yeVtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgbmV4dEZyZWVQb3J0ID0gMTIwMDE7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXZTZXJ2ZXJzOiB7IFtnZnY6IHN0cmluZ106IHVuZGVmaW5lZCB8IEJ1aWxkRm9ybURldlNlcnZlciB9ID0ge307XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYW5keU1vZHVsZXNEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsbEZhcm1Db25maWc6IEZhcm1Db25maWdbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmdpbmVEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5pZ2h0bHk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBidWlsZERlYnVnT25seTogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgYWxsRmFybUNvbmZpZzogRmFybUNvbmZpZ1tdLFxuICAgICAgICBjYW5keU1vZHVsZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgdXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlczogYm9vbGVhbixcbiAgICAgICAgZW5naW5lRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGJ1aWxkRGVidWdPbmx5OiBib29sZWFuLFxuICAgICAgICBuaWdodGx5OiBib29sZWFuID0gZmFsc2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uaWdodGx5ID0gbmlnaHRseTtcbiAgICAgICAgdGhpcy5hbGxGYXJtRGlyZWN0b3J5ID0gYWxsRmFybUNvbmZpZy5tYXAoZmFybSA9PiBuZXcgRmFybURpcmVjdG9yeShmYXJtLmZhcm1EaXJlY3RvcnkpKTtcbiAgICAgICAgdGhpcy5hbGxGYXJtRGlyZWN0b3J5UGF0aCA9IGFsbEZhcm1Db25maWcubWFwKGZhcm0gPT4gZmFybS5mYXJtRGlyZWN0b3J5KTtcbiAgICAgICAgdGhpcy5jYW5keU1vZHVsZXNEaXJlY3RvcnkgPSBjYW5keU1vZHVsZXNEaXJlY3Rvcnk7XG4gICAgICAgIHRoaXMuYWxsRmFybUNvbmZpZyA9IGFsbEZhcm1Db25maWc7XG4gICAgICAgIHRoaXMudXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlcyA9IHVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXM7XG4gICAgICAgIHRoaXMuZW5naW5lRGlyZWN0b3J5ID0gZW5naW5lRGlyZWN0b3J5O1xuICAgICAgICB0aGlzLmJ1aWxkRGVidWdPbmx5ID0gYnVpbGREZWJ1Z09ubHk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXG4gICAgICAgIFwiLzp1cGRhdGUuaG90LXVwZGF0ZS5qc29uXCIsXG4gICAgICAgIGh0dHBSZXR1cm4uU3RyZWFtV2l0aE1pbWUoXCJhcHBsaWNhdGlvbi9qc29uXCIpLFxuICAgICAgICBodHRwVXJsUGFyYW0oXCJ1cGRhdGVcIiwgaHR0cFR5cGUuU3RyaW5nKVxuICAgIClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0RGV2U2VydmVyVXBkYXRlSnNvbih1cGRhdGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFN0cmVhbVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRGaXJzdEV4aXN0c0ZpbGVBc1N0cmVhbUZyb21EZXZTZXJ2ZXIoYHN0YXRpYy8ke3VwZGF0ZU5hbWV9LmhvdC11cGRhdGUuanNvbmApO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFxuICAgICAgICBcIi86dXBkYXRlLmhvdC11cGRhdGUuanNcIixcbiAgICAgICAgaHR0cFJldHVybi5TdHJlYW1XaXRoTWltZShcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiksXG4gICAgICAgIGh0dHBVcmxQYXJhbShcInVwZGF0ZVwiLCBodHRwVHlwZS5TdHJpbmcpXG4gICAgKVxuICAgIHB1YmxpYyBhc3luYyBnZXREZXZTZXJ2ZXJVcGRhdGVKcyh1cGRhdGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFN0cmVhbVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRGaXJzdEV4aXN0c0ZpbGVBc1N0cmVhbUZyb21EZXZTZXJ2ZXIoYHN0YXRpYy8ke3VwZGF0ZU5hbWV9LmhvdC11cGRhdGUuanNgKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcbiAgICAgICAgXCIvOnVwZGF0ZS5ob3QtdXBkYXRlLmpzLm1hcFwiLFxuICAgICAgICBodHRwUmV0dXJuLlN0cmVhbVdpdGhNaW1lKFwiYXBwbGljYXRpb24vanNvblwiKSxcbiAgICAgICAgaHR0cFVybFBhcmFtKFwidXBkYXRlXCIsIGh0dHBUeXBlLlN0cmluZylcbiAgICApXG4gICAgcHVibGljIGFzeW5jIGdldERldlNlcnZlclVwZGF0ZUpzTWFwKHVwZGF0ZU5hbWU6IHN0cmluZyk6IFByb21pc2U8U3RyZWFtUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEZpcnN0RXhpc3RzRmlsZUFzU3RyZWFtRnJvbURldlNlcnZlcihgc3RhdGljLyR7dXBkYXRlTmFtZX0uaG90LXVwZGF0ZS5qcy5tYXBgKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcbiAgICAgICAgL15cXC9wdWJsaWNcXC9zY3JpcHRzXFwvKCgoXFxkezYsN30pKC5bXFx3XFwtXSopPygubWluKT8pLmpzKSQvaSxcbiAgICAgICAgaHR0cFJldHVybi5TdHJlYW1XaXRoTWltZShcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiksXG4gICAgICAgIGh0dHBVcmxQYXJhbShcIjBcIiwgaHR0cFR5cGUuU3RyaW5nKSxcbiAgICAgICAgaHR0cFVybFBhcmFtKFwiMVwiLCBodHRwVHlwZS5TdHJpbmcpLFxuICAgICAgICBodHRwVXJsUGFyYW0oXCIyXCIsIGh0dHBUeXBlLlN0cmluZylcbiAgICApXG4gICAgcHVibGljIGFzeW5jIGdldEZvcm1TY3JpcHQoZmlsZU5hbWU6IHN0cmluZywgZmlsZU5hbWVXaXRob3V0RXh0OiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYnVpbGRGb3JtRGV2U2VydmVyID0gYXdhaXQgdGhpcy5nZXRPckNyZWF0ZUJ1aWxkRm9ybURldlNlcnZlcihnZnYpO1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbVJlc3VsdChhd2FpdCBidWlsZEZvcm1EZXZTZXJ2ZXIuZ2V0RmlsZUFzU3RyZWFtKGBzdGF0aWMvcHVibGljL3NjcmlwdHMvJHtmaWxlTmFtZX1gKSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXG4gICAgICAgIC9eXFwvcHVibGljXFwvc3R5bGVzXFwvKCgoXFxkezYsN30pKC5bXFx3XFwtXSopPygubWluKT8pLmNzcykkL2ksXG4gICAgICAgIGh0dHBSZXR1cm4uU3RyZWFtV2l0aE1pbWUoXCJ0ZXh0L2Nzc1wiKSxcbiAgICAgICAgaHR0cFVybFBhcmFtKFwiMFwiLCBodHRwVHlwZS5TdHJpbmcpLFxuICAgICAgICBodHRwVXJsUGFyYW0oXCIxXCIsIGh0dHBUeXBlLlN0cmluZyksXG4gICAgICAgIGh0dHBVcmxQYXJhbShcIjJcIiwgaHR0cFR5cGUuU3RyaW5nKSxcbiAgICAgICAgaHR0cFVybFBhcmFtKFwiM1wiLCBodHRwVHlwZS5TdHJpbmcpXG4gICAgKVxuICAgIHB1YmxpYyBhc3luYyBnZXRGb3JtU3R5bGUoXG4gICAgICAgIGZpbGVOYW1lOiBzdHJpbmcsXG4gICAgICAgIGZpbGVOYW1lV2l0aG91dEV4dDogc3RyaW5nLFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgdGhlbWU6IHVuZGVmaW5lZCB8IHN0cmluZ1xuICAgICk6IFByb21pc2U8U3RyZWFtUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkRm9ybURldlNlcnZlciA9IGF3YWl0IHRoaXMuZ2V0T3JDcmVhdGVCdWlsZEZvcm1EZXZTZXJ2ZXIoZ2Z2KTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1SZXN1bHQoXG4gICAgICAgICAgICBhd2FpdCBidWlsZEZvcm1EZXZTZXJ2ZXIuZ2V0RmlsZUFzU3RyZWFtKGBzdGF0aWMvcHVibGljL3N0eWxlcy8ke2ZpbGVOYW1lLnJlcGxhY2UodGhlbWUgPz8gXCJcIiwgXCJcIil9YClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9wdWJsaWMvaW1hZ2VzLzpmaWxlbmFtZVwiLCBodHRwUmV0dXJuLlN0cmVhbSwgaHR0cFVybFBhcmFtKFwiZmlsZW5hbWVcIiwgaHR0cFR5cGUuU3RyaW5nKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0Rm9ybUltYWdlcyhmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0Rmlyc3RFeGlzdHNGaWxlQXNTdHJlYW1Gcm9tRGV2U2VydmVyKFxuICAgICAgICAgICAgYHN0YXRpYy9wdWJsaWMvaW1hZ2VzLyR7ZmlsZU5hbWV9YCxcbiAgICAgICAgICAgIG1pbWUubG9va3VwKGZpbGVOYW1lKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0Rmlyc3RFeGlzdHNGaWxlQXNTdHJlYW1Gcm9tRGV2U2VydmVyKGZpbGVuYW1lOiBzdHJpbmcsIG1pbWVUeXBlPzogc3RyaW5nIHwgZmFsc2UpIHtcbiAgICAgICAgZm9yIChjb25zdCBkZXZTZXJ2ZXIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmRldlNlcnZlcnMpKSB7XG4gICAgICAgICAgICBpZiAoZGV2U2VydmVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyZWFtUmVzdWx0KGF3YWl0IGRldlNlcnZlci5nZXRGaWxlQXNTdHJlYW0oZmlsZW5hbWUpLCBtaW1lVHlwZSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRyeSBuZXh0IHNlcnZlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRXZWJFcnJvcihcIkZpbGUgbm90IGZvdW5kXCIsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxBdHRhY2htZW50UGF0aEZpbGVOYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgY29uc3QgZmFybUZvcm1Kc29ucyA9IChhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmFsbEZhcm1EaXJlY3RvcnkubWFwKGkgPT4gaS5nZXRBbGxGb3JtSnNvbkZpbGVzKCkpKSkuZmxhdCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1Gb3JtSnNvbiBvZiBmYXJtRm9ybUpzb25zKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChgJHtmYXJtRm9ybUpzb24uZ2Z2fS5qc29uYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QXR0YWNobWVudFBhdGhzRmlsZUNvbnRlbnQoZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPE5vZGVKUy5SZWFkYWJsZVN0cmVhbT4ge1xuICAgICAgICBjb25zdCBidWlsZEZvcm1EZXZTZXJ2ZXIgPSBhd2FpdCB0aGlzLmdldE9yQ3JlYXRlQnVpbGRGb3JtRGV2U2VydmVyKGdmdik7XG4gICAgICAgIGNvbnN0IHJlc3VsdFN0cmVhbSA9IGF3YWl0IGJ1aWxkRm9ybURldlNlcnZlci5nZXRHZW5lcmF0ZWRGaWxlQXNTdHJlYW0oYEF0dGFjaG1lbnRQYXRocy5qc29uYCk7XG4gICAgICAgIHJldHVybiByZXN1bHRTdHJlYW07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbE5vcm1hbGl6YXRpb25GaWxlTmFtZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGZhcm1Gb3JtSnNvbnMgPSAoYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5hbGxGYXJtRGlyZWN0b3J5Lm1hcChpID0+IGkuZ2V0QWxsRm9ybUpzb25GaWxlcygpKSkpLmZsYXQoKTtcbiAgICAgICAgZm9yIChjb25zdCBmYXJtRm9ybUpzb24gb2YgZmFybUZvcm1Kc29ucykge1xuICAgICAgICAgICAgY29uc3QgZm9ybUpzb25QYXRoID0gKFxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yeS5tYXAoaSA9PiBpLmdldEZvcm1Kc29uUGF0aChmYXJtRm9ybUpzb24uZ2Z2KSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoaSA9PiBpICE9IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBpZiAoZm9ybUpzb25QYXRoWzBdID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBnZnYgJHtmYXJtRm9ybUpzb24uZ2Z2fSBub3QgZm91bmQgaW4gY29uZmlnIGRpcmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZm9ybUNvbmZpZyA9IGF3YWl0IHJlYWRGb3JtQ29uZmlnKGZvcm1Kc29uUGF0aFswXSwgZ2V0TG9nZ2VyKCkpO1xuICAgICAgICAgICAgY29uc3QgdXNlU2VydmVyU2lkZUZMYW5nTm9ybWFsaXphdGlvbiA9IGZvcm1Db25maWcuc2V0dGluZ3M/LnVzZVNlcnZlclNpZGVGTGFuZ05vcm1hbGl6YXRpb24gPz8gZmFsc2U7XG4gICAgICAgICAgICBpZiAodXNlU2VydmVyU2lkZUZMYW5nTm9ybWFsaXphdGlvbikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAke2Zhcm1Gb3JtSnNvbi5nZnZ9Lm5vcm1hbGl6ZWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldE5vcm1hbGl6YXRpb25GaWxlQ29udGVudChnZnY6IHN0cmluZyk6IFByb21pc2U8Tm9kZUpTLlJlYWRhYmxlU3RyZWFtPiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkRm9ybURldlNlcnZlciA9IGF3YWl0IHRoaXMuZ2V0T3JDcmVhdGVCdWlsZEZvcm1EZXZTZXJ2ZXIoZ2Z2KTtcbiAgICAgICAgY29uc3QgcmVzdWx0U3RyZWFtID0gYXdhaXQgYnVpbGRGb3JtRGV2U2VydmVyLmdldEdlbmVyYXRlZEZpbGVBc1N0cmVhbShgU2VydmVyU2lkZS5ub3JtYWxpemVgKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFN0cmVhbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldE9yQ3JlYXRlQnVpbGRGb3JtRGV2U2VydmVyKGdmdjogc3RyaW5nKTogUHJvbWlzZTxCdWlsZEZvcm1EZXZTZXJ2ZXI+IHtcbiAgICAgICAgbGV0IGRldlNlcnZlciA9IHRoaXMuZGV2U2VydmVyc1tnZnZdO1xuICAgICAgICBpZiAoZGV2U2VydmVyID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGV2U2VydmVyID0gbmV3IEJ1aWxkRm9ybURldlNlcnZlcihcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRGcmVlUG9ydCsrLFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsRmFybURpcmVjdG9yeVBhdGgsXG4gICAgICAgICAgICAgICAgZ2Z2LFxuICAgICAgICAgICAgICAgIHRoaXMuY2FuZHlNb2R1bGVzRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsRmFybUNvbmZpZyxcbiAgICAgICAgICAgICAgICB0aGlzLnVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5lbmdpbmVEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZERlYnVnT25seSxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICB0aGlzLm5pZ2h0bHlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmRldlNlcnZlcnNbZ2Z2XSA9IGRldlNlcnZlcjtcbiAgICAgICAgICAgIGF3YWl0IGRldlNlcnZlci5zdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXZTZXJ2ZXI7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFDLGdCQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxpQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sb0JBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLG9CQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxhQUFBLEdBQUFSLE9BQUE7QUFFQSxJQUFBUyxtQkFBQSxHQUFBVCxPQUFBO0FB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
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.BuildFormDevServer = void 0;
8
- var _path = _interopRequireDefault(require("path"));
8
+ var path = _interopRequireWildcard(require("path"));
9
9
  var _stream = require("stream");
10
10
  var _https = require("https");
11
11
  var _nodeFetch = _interopRequireDefault(require("node-fetch"));
@@ -17,9 +17,28 @@ var _PublishedVersionUtils = require("../../../../BuildTasks/PublishedVersionUti
17
17
  var _ResolveFormInfo = require("../../../../BuildTasks/ResolveFormInfo");
18
18
  var _AsyncUtils = require("../../../../../../Common/AsyncUtils");
19
19
  var _Observe = require("../../../../Commons/TasksCore/Observe");
20
+ var _FsUtils = require("../../../../Commons/FsUtils");
21
+ var _FormPathUtils = require("../../../../../../Common/FormPathUtils");
22
+ var _TypingUtils = require("../../../../../../Common/TypingUtils");
23
+ var _WellKnownDirectories = require("../Directories/WellKnownDirectories");
20
24
  var _ReportGeneratorErrorToPageBody = require("./ReportGeneratorErrorToPageBody");
21
25
  var _RunFormCompilationViaWebpackDevServer = require("./RunFormCompilationViaWebpackDevServer");
22
26
  var _WebpackHybridFileSystem = require("./WebpackInMemoryUtils/WebpackHybridFileSystem");
27
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
28
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
+ async function buildGfvToPathMap(repositoryRoots) {
30
+ const result = new Map();
31
+ for (const repositoryRoot of repositoryRoots) {
32
+ const formPaths = await (0, _FsUtils.globAsync)(`forms/**/*/${_WellKnownDirectories.WellKnownDirectories.CandySubdirectoryName}`, {
33
+ cwd: repositoryRoot
34
+ });
35
+ for (const formPath of formPaths) {
36
+ const gfv = (0, _FormPathUtils.extractGfvFromFormPath)(formPath);
37
+ result.set(gfv, path.join(repositoryRoot, formPath));
38
+ }
39
+ }
40
+ return result;
41
+ }
23
42
  class BuildFormDevServer {
24
43
  constructor(port, allFarmConfig, gfv, candyModulesDirectory, farmConfigArray, useGeneratorFromLocalSources, engineDirectory, buildDebugOnly, skipCodeReformatting, nightly) {
25
44
  this.port = void 0;
@@ -27,6 +46,7 @@ class BuildFormDevServer {
27
46
  this.gfv = void 0;
28
47
  this.candyModulesDirectory = void 0;
29
48
  this.farmDirectory = void 0;
49
+ this.formPath = void 0;
30
50
  this.farmConfigArray = void 0;
31
51
  this.startParallelLimit = void 0;
32
52
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -38,6 +58,7 @@ class BuildFormDevServer {
38
58
  this.buildDebugOnly = void 0;
39
59
  this.skipCodeReformatting = void 0;
40
60
  this.webpackHybridFileSystem = void 0;
61
+ this.gfvPaths = undefined;
41
62
  this.port = port;
42
63
  this.allFarmConfig = allFarmConfig;
43
64
  this.gfv = gfv;
@@ -50,29 +71,52 @@ class BuildFormDevServer {
50
71
  this.skipCodeReformatting = skipCodeReformatting;
51
72
  this.nightly = nightly;
52
73
  this.farmDirectory = "";
74
+ this.formPath = "";
75
+ }
76
+ async findFormPath(gfv) {
77
+ var _this$gfvPaths;
78
+ this.gfvPaths = (_this$gfvPaths = this.gfvPaths) !== null && _this$gfvPaths !== void 0 ? _this$gfvPaths : await buildGfvToPathMap(this.allFarmConfig.map(x => path.join(x, "..")));
79
+ if (this.gfvPaths.has(gfv)) {
80
+ var _this$gfvPaths$get;
81
+ return {
82
+ formPath: (_this$gfvPaths$get = this.gfvPaths.get(gfv)) !== null && _this$gfvPaths$get !== void 0 ? _this$gfvPaths$get : (0, _TypingUtils.reject)(),
83
+ farmDirectory: path.join("..", "..", "..", "..", "..", "candy.farm")
84
+ };
85
+ }
86
+ let farmDirectory;
87
+ let formDirPath = "";
88
+ const allPossibleFilePath = this.allFarmConfig.map(i => path.join(i, "forms", this.gfv));
89
+ for (const pth of allPossibleFilePath) {
90
+ if (await (0, _fsExtra.pathExists)(pth)) {
91
+ formDirPath = pth;
92
+ farmDirectory = path.join(pth, "..", "..");
93
+ break;
94
+ }
95
+ }
96
+ if (formDirPath === "") {
97
+ throw Error("formDirPath not found");
98
+ }
99
+ if (farmDirectory == undefined || !(await (0, _fsExtra.pathExists)(farmDirectory))) {
100
+ throw Error(`FarmDirectory = ${this.farmDirectory} not exist`);
101
+ }
102
+ return {
103
+ formPath: formDirPath,
104
+ farmDirectory: farmDirectory
105
+ };
53
106
  }
54
107
  start() {
55
108
  return this.startParallelLimit(async () => {
56
109
  if (this.generateChain != undefined) {
57
110
  return;
58
111
  }
59
- const allPossibleFilePath = this.allFarmConfig.map(i => _path.default.join(i, "forms", this.gfv));
60
- let formDirPath = "";
61
- for (const pth of allPossibleFilePath) {
62
- if (await (0, _fsExtra.pathExists)(pth)) {
63
- formDirPath = pth;
64
- this.farmDirectory = _path.default.join(pth, "..", "..");
65
- break;
66
- }
67
- }
68
- if (formDirPath === "") {
69
- throw Error("formDirPath not found");
70
- }
71
- if (!(await (0, _fsExtra.pathExists)(this.farmDirectory))) {
72
- throw Error(`FarmDirectory = ${this.farmDirectory} not exist`);
73
- }
74
- this.webpackHybridFileSystem = new _WebpackHybridFileSystem.WebpackHybridFileSystem(_path.default.join(formDirPath, "form"));
75
- this.generateChain = _Observe.Observe.file(_path.default.join(formDirPath, "form.json")).transform(formJsonFile => (0, _ResolveFormInfo.resolveFormInfo)(formJsonFile, formDirPath, undefined, undefined, undefined, undefined, undefined, this.nightly)).transform(async x => {
112
+ const {
113
+ formPath,
114
+ farmDirectory
115
+ } = await this.findFormPath(this.gfv);
116
+ this.farmDirectory = farmDirectory;
117
+ this.formPath = formPath;
118
+ this.webpackHybridFileSystem = new _WebpackHybridFileSystem.WebpackHybridFileSystem(path.join(this.formPath, "form"));
119
+ this.generateChain = _Observe.Observe.file(path.join(this.formPath, _WellKnownDirectories.WellKnownDirectories.FormJsonFileName)).transform(formJsonFile => (0, _ResolveFormInfo.resolveFormInfo)(formJsonFile, this.formPath, undefined, undefined, undefined, undefined, undefined, this.nightly)).transform(async x => {
76
120
  if (this.useGeneratorFromLocalSources) {
77
121
  return {
78
122
  ...x,
@@ -97,7 +141,7 @@ class BuildFormDevServer {
97
141
  generator: y
98
142
  }), async fi => (0, _AcquireFormGenerator.getGeneratorSourceKey)(fi.generatorSource)).attach(async fi => _Observe.Observe.files(fi.formSourcesPath, "../../controls/**/generator/*", "schemas/**/*", "sugar/**/*", "controls/**/*", "autocalc/**/*", "helpers/**/*", "validations/**/*", "localization/**/*")).do(async fi => {
99
143
  try {
100
- const FormsDirWithHlPath = this.farmConfigArray.find(i => formDirPath.startsWith(i.farmDirectory));
144
+ const FormsDirWithHlPath = this.farmConfigArray.find(i => formPath.startsWith(i.farmDirectory));
101
145
  if (FormsDirWithHlPath == undefined) {
102
146
  throw Error("FormsDirWithHlPath === undefined");
103
147
  }
@@ -107,14 +151,14 @@ class BuildFormDevServer {
107
151
  }, this.webpackHybridFileSystem);
108
152
  } catch (e) {
109
153
  var _this$webpackHybridFi;
110
- const formEntryPointPath = _path.default.join(this.farmDirectory, "forms", this.gfv, "form", "web.js");
154
+ const formEntryPointPath = path.join(this.formPath, "form", "web.js");
111
155
  await ((_this$webpackHybridFi = this.webpackHybridFileSystem) === null || _this$webpackHybridFi === void 0 ? void 0 : _this$webpackHybridFi.writeBatch({
112
156
  [formEntryPointPath]: (0, _ReportGeneratorErrorToPageBody.getReportGeneratorErrorToPageBodyScript)(this.formatError(e))
113
157
  }));
114
158
  }
115
159
  });
116
160
  await this.generateChain.observe();
117
- await (0, _RunFormCompilationViaWebpackDevServer.runFormCompilationViaWebpackDevServer)(this.gfv, this.farmDirectory, _path.default.join(this.farmDirectory, "res"), "local-hash", this.buildDebugOnly, this.webpackHybridFileSystem, this.port);
161
+ await (0, _RunFormCompilationViaWebpackDevServer.runFormCompilationViaWebpackDevServer)(this.gfv, this.farmDirectory, this.formPath, path.join(this.farmDirectory, "res"), "local-hash", this.buildDebugOnly, this.webpackHybridFileSystem, this.port);
118
162
  this.webpackDevServerStarted = true;
119
163
  });
120
164
  }
@@ -123,7 +167,7 @@ class BuildFormDevServer {
123
167
  await (0, _AsyncUtils.delay)(500);
124
168
  }
125
169
  let fileName = "";
126
- const allPossibleFilePath = this.allFarmConfig.map(i => _path.default.join(i, "forms", this.gfv, "form", filename));
170
+ const allPossibleFilePath = this.allFarmConfig.map(i => path.join(i, "forms", this.gfv, "form", filename));
127
171
  for (const pth of allPossibleFilePath) {
128
172
  try {
129
173
  var _this$webpackHybridFi2;
@@ -138,11 +182,11 @@ class BuildFormDevServer {
138
182
  if (fileName === "") {
139
183
  throw Error("getGeneratedFileAsStream filename not found");
140
184
  }
141
- return new Promise((resolve, reject) => {
185
+ return new Promise((resolve, r) => {
142
186
  var _this$webpackHybridFi3;
143
187
  (_this$webpackHybridFi3 = this.webpackHybridFileSystem) === null || _this$webpackHybridFi3 === void 0 ? void 0 : _this$webpackHybridFi3.readFile(fileName, "utf-8", (error, data) => {
144
188
  if (error) {
145
- reject(error);
189
+ r(error);
146
190
  } else {
147
191
  resolve(_stream.Readable.from([data]));
148
192
  }
@@ -173,4 +217,4 @@ class BuildFormDevServer {
173
217
  }
174
218
  }
175
219
  exports.BuildFormDevServer = BuildFormDevServer;
176
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3N0cmVhbSIsIl9odHRwcyIsIl9ub2RlRmV0Y2giLCJfcExpbWl0IiwiX2ZzRXh0cmEiLCJfR2VuZXJhdGVGb3JtIiwiX0FjcXVpcmVGb3JtR2VuZXJhdG9yIiwiX1B1Ymxpc2hlZFZlcnNpb25VdGlscyIsIl9SZXNvbHZlRm9ybUluZm8iLCJfQXN5bmNVdGlscyIsIl9PYnNlcnZlIiwiX1JlcG9ydEdlbmVyYXRvckVycm9yVG9QYWdlQm9keSIsIl9SdW5Gb3JtQ29tcGlsYXRpb25WaWFXZWJwYWNrRGV2U2VydmVyIiwiX1dlYnBhY2tIeWJyaWRGaWxlU3lzdGVtIiwiQnVpbGRGb3JtRGV2U2VydmVyIiwiY29uc3RydWN0b3IiLCJwb3J0IiwiYWxsRmFybUNvbmZpZyIsImdmdiIsImNhbmR5TW9kdWxlc0RpcmVjdG9yeSIsImZhcm1Db25maWdBcnJheSIsInVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMiLCJlbmdpbmVEaXJlY3RvcnkiLCJidWlsZERlYnVnT25seSIsInNraXBDb2RlUmVmb3JtYXR0aW5nIiwibmlnaHRseSIsImZhcm1EaXJlY3RvcnkiLCJzdGFydFBhcmFsbGVsTGltaXQiLCJnZW5lcmF0ZUNoYWluIiwid2VicGFja0RldlNlcnZlclN0YXJ0ZWQiLCJ3ZWJwYWNrSHlicmlkRmlsZVN5c3RlbSIsInBMaW1pdCIsInN0YXJ0IiwidW5kZWZpbmVkIiwiYWxsUG9zc2libGVGaWxlUGF0aCIsIm1hcCIsImkiLCJwYXRoIiwiam9pbiIsImZvcm1EaXJQYXRoIiwicHRoIiwicGF0aEV4aXN0cyIsIkVycm9yIiwiV2VicGFja0h5YnJpZEZpbGVTeXN0ZW0iLCJPYnNlcnZlIiwiZmlsZSIsInRyYW5zZm9ybSIsImZvcm1Kc29uRmlsZSIsInJlc29sdmVGb3JtSW5mbyIsIngiLCJnZW5lcmF0b3JTb3VyY2UiLCJyZXNvbHZlTG9jYWxHZW5lcmF0b3JTb3VyY2UiLCJlbmdpbmVTb3VyY2UiLCJyZXNvbHZlTG9jYWxFbmdpbmVTb3VyY2UiLCJnZW5lcmF0b3JWZXJzaW9uIiwiZW5naW5lVmVyc2lvbiIsInJlc29sdmVHZW5lcmF0b3JWZXJzaW9uIiwicmVzb2x2ZUVuZ2luZVZlcnNpb24iLCJhdHRhY2giLCJmaSIsImdlbmVyYXRvckZhY3RvcnkiLCJ5IiwiZ2VuZXJhdG9yIiwiZ2V0R2VuZXJhdG9yU291cmNlS2V5IiwiZmlsZXMiLCJmb3JtU291cmNlc1BhdGgiLCJkbyIsIkZvcm1zRGlyV2l0aEhsUGF0aCIsImZpbmQiLCJzdGFydHNXaXRoIiwiZ2VuZXJhdGVGb3JtIiwiaGxGYXJtRGlyZWN0b3J5UGF0aCIsInJlc291cmNlc0hhc2giLCJlIiwiX3RoaXMkd2VicGFja0h5YnJpZEZpIiwiZm9ybUVudHJ5UG9pbnRQYXRoIiwid3JpdGVCYXRjaCIsImdldFJlcG9ydEdlbmVyYXRvckVycm9yVG9QYWdlQm9keVNjcmlwdCIsImZvcm1hdEVycm9yIiwib2JzZXJ2ZSIsInJ1bkZvcm1Db21waWxhdGlvblZpYVdlYnBhY2tEZXZTZXJ2ZXIiLCJnZXRHZW5lcmF0ZWRGaWxlQXNTdHJlYW0iLCJmaWxlbmFtZSIsImRlbGF5IiwiZmlsZU5hbWUiLCJfdGhpcyR3ZWJwYWNrSHlicmlkRmkyIiwic3RhdFN5bmMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIl90aGlzJHdlYnBhY2tIeWJyaWRGaTMiLCJyZWFkRmlsZSIsImVycm9yIiwiZGF0YSIsIlJlYWRhYmxlIiwiZnJvbSIsImdldEZpbGVBc1N0cmVhbSIsInJlc3BvbnNlIiwiZmV0Y2giLCJtZXRob2QiLCJhZ2VudCIsIkFnZW50IiwicmVqZWN0VW5hdXRob3JpemVkIiwic3RhdHVzIiwidGV4dFJlc3BvbnNlIiwidGV4dCIsImJvZHkiLCJzdGFjayIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvQ0xJQ29tbWFuZHMvQnVpbGRTZXJ2ZXIvUmVzb3VyY2VzQ29udHJvbGxlcnMvRGV2U2VydmVycy9CdWlsZEZvcm1EZXZTZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IFJlYWRhYmxlIH0gZnJvbSBcInN0cmVhbVwiO1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tIFwiaHR0cHNcIjtcblxuaW1wb3J0IGZldGNoIGZyb20gXCJub2RlLWZldGNoXCI7XG5pbXBvcnQgcExpbWl0LCB7IExpbWl0IH0gZnJvbSBcInAtbGltaXRcIjtcbmltcG9ydCB7IEZhcm1Db25maWcgfSBmcm9tIFwiVG9vbHMvc3JjL0NhbmR5Q0xJXCI7XG5pbXBvcnQgeyBwYXRoRXhpc3RzIH0gZnJvbSBcImZzLWV4dHJhXCI7XG5cbmltcG9ydCB7IGdlbmVyYXRlRm9ybSB9IGZyb20gXCIuLi8uLi8uLi8uLi9CdWlsZFRhc2tzL0Zvcm0vR2VuZXJhdGVGb3JtXCI7XG5pbXBvcnQgeyBnZW5lcmF0b3JGYWN0b3J5LCBnZXRHZW5lcmF0b3JTb3VyY2VLZXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQnVpbGRUYXNrcy9HZW5lcmF0b3IvQWNxdWlyZUZvcm1HZW5lcmF0b3JcIjtcbmltcG9ydCB7XG4gICAgcmVzb2x2ZUVuZ2luZVZlcnNpb24sXG4gICAgcmVzb2x2ZUdlbmVyYXRvclZlcnNpb24sXG4gICAgcmVzb2x2ZUxvY2FsRW5naW5lU291cmNlLFxuICAgIHJlc29sdmVMb2NhbEdlbmVyYXRvclNvdXJjZSxcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL0J1aWxkVGFza3MvUHVibGlzaGVkVmVyc2lvblV0aWxzXCI7XG5pbXBvcnQgeyByZXNvbHZlRm9ybUluZm8gfSBmcm9tIFwiLi4vLi4vLi4vLi4vQnVpbGRUYXNrcy9SZXNvbHZlRm9ybUluZm9cIjtcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9Bc3luY1V0aWxzXCI7XG5pbXBvcnQgeyBSZWFzb25PckVycm9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbnMvRXJyb3JVbnR5cGVkXCI7XG5pbXBvcnQgeyBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbnMvVGFza3NDb3JlL0NoYWluYWJsZVZhbHVlUHJvZHVjZXJcIjtcbmltcG9ydCB7IE9ic2VydmUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9ucy9UYXNrc0NvcmUvT2JzZXJ2ZVwiO1xuXG5pbXBvcnQgeyBnZXRSZXBvcnRHZW5lcmF0b3JFcnJvclRvUGFnZUJvZHlTY3JpcHQgfSBmcm9tIFwiLi9SZXBvcnRHZW5lcmF0b3JFcnJvclRvUGFnZUJvZHlcIjtcbmltcG9ydCB7IHJ1bkZvcm1Db21waWxhdGlvblZpYVdlYnBhY2tEZXZTZXJ2ZXIgfSBmcm9tIFwiLi9SdW5Gb3JtQ29tcGlsYXRpb25WaWFXZWJwYWNrRGV2U2VydmVyXCI7XG5pbXBvcnQgeyBXZWJwYWNrSHlicmlkRmlsZVN5c3RlbSB9IGZyb20gXCIuL1dlYnBhY2tJbk1lbW9yeVV0aWxzL1dlYnBhY2tIeWJyaWRGaWxlU3lzdGVtXCI7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZEZvcm1EZXZTZXJ2ZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxsRmFybUNvbmZpZzogc3RyaW5nW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBnZnY6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhbmR5TW9kdWxlc0RpcmVjdG9yeTogc3RyaW5nO1xuICAgIHByaXZhdGUgZmFybURpcmVjdG9yeTogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmFybUNvbmZpZ0FycmF5OiBGYXJtQ29uZmlnW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGFydFBhcmFsbGVsTGltaXQ6IExpbWl0O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUNoYWluPzogQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxhbnk+O1xuICAgIHByaXZhdGUgd2VicGFja0RldlNlcnZlclN0YXJ0ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmdpbmVEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5pZ2h0bHk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBidWlsZERlYnVnT25seTogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNraXBDb2RlUmVmb3JtYXR0aW5nOiBib29sZWFuO1xuICAgIHByaXZhdGUgd2VicGFja0h5YnJpZEZpbGVTeXN0ZW0/OiBXZWJwYWNrSHlicmlkRmlsZVN5c3RlbTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcG9ydDogbnVtYmVyLFxuICAgICAgICBhbGxGYXJtQ29uZmlnOiBzdHJpbmdbXSxcbiAgICAgICAgZ2Z2OiBzdHJpbmcsXG4gICAgICAgIGNhbmR5TW9kdWxlc0RpcmVjdG9yeTogc3RyaW5nLFxuICAgICAgICBmYXJtQ29uZmlnQXJyYXk6IEZhcm1Db25maWdbXSxcbiAgICAgICAgdXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlczogYm9vbGVhbixcbiAgICAgICAgZW5naW5lRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGJ1aWxkRGVidWdPbmx5OiBib29sZWFuLFxuICAgICAgICBza2lwQ29kZVJlZm9ybWF0dGluZzogYm9vbGVhbixcbiAgICAgICAgbmlnaHRseTogYm9vbGVhblxuICAgICkge1xuICAgICAgICB0aGlzLnBvcnQgPSBwb3J0O1xuICAgICAgICB0aGlzLmFsbEZhcm1Db25maWcgPSBhbGxGYXJtQ29uZmlnO1xuICAgICAgICB0aGlzLmdmdiA9IGdmdjtcbiAgICAgICAgdGhpcy5jYW5keU1vZHVsZXNEaXJlY3RvcnkgPSBjYW5keU1vZHVsZXNEaXJlY3Rvcnk7XG4gICAgICAgIHRoaXMuZmFybUNvbmZpZ0FycmF5ID0gZmFybUNvbmZpZ0FycmF5O1xuICAgICAgICB0aGlzLnN0YXJ0UGFyYWxsZWxMaW1pdCA9IHBMaW1pdCgxKTtcbiAgICAgICAgdGhpcy51c2VHZW5lcmF0b3JGcm9tTG9jYWxTb3VyY2VzID0gdXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlcztcbiAgICAgICAgdGhpcy5lbmdpbmVEaXJlY3RvcnkgPSBlbmdpbmVEaXJlY3Rvcnk7XG4gICAgICAgIHRoaXMuYnVpbGREZWJ1Z09ubHkgPSBidWlsZERlYnVnT25seTtcbiAgICAgICAgdGhpcy5za2lwQ29kZVJlZm9ybWF0dGluZyA9IHNraXBDb2RlUmVmb3JtYXR0aW5nO1xuICAgICAgICB0aGlzLm5pZ2h0bHkgPSBuaWdodGx5O1xuICAgICAgICB0aGlzLmZhcm1EaXJlY3RvcnkgPSBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRQYXJhbGxlbExpbWl0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdlbmVyYXRlQ2hhaW4gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWxsUG9zc2libGVGaWxlUGF0aCA9IHRoaXMuYWxsRmFybUNvbmZpZy5tYXAoaSA9PiBwYXRoLmpvaW4oaSwgXCJmb3Jtc1wiLCB0aGlzLmdmdikpO1xuICAgICAgICAgICAgbGV0IGZvcm1EaXJQYXRoID0gXCJcIjtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHRoIG9mIGFsbFBvc3NpYmxlRmlsZVBhdGgpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhwdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1EaXJQYXRoID0gcHRoO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhcm1EaXJlY3RvcnkgPSBwYXRoLmpvaW4ocHRoLCBcIi4uXCIsIFwiLi5cIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZvcm1EaXJQYXRoID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJmb3JtRGlyUGF0aCBub3QgZm91bmRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShhd2FpdCBwYXRoRXhpc3RzKHRoaXMuZmFybURpcmVjdG9yeSkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYEZhcm1EaXJlY3RvcnkgPSAke3RoaXMuZmFybURpcmVjdG9yeX0gbm90IGV4aXN0YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMud2VicGFja0h5YnJpZEZpbGVTeXN0ZW0gPSBuZXcgV2VicGFja0h5YnJpZEZpbGVTeXN0ZW0ocGF0aC5qb2luKGZvcm1EaXJQYXRoLCBcImZvcm1cIikpO1xuXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlQ2hhaW4gPSBPYnNlcnZlLmZpbGUocGF0aC5qb2luKGZvcm1EaXJQYXRoLCBcImZvcm0uanNvblwiKSlcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtKGZvcm1Kc29uRmlsZSA9PlxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlRm9ybUluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtSnNvbkZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGlyUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmlnaHRseVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgeCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JTb3VyY2U6IHJlc29sdmVMb2NhbEdlbmVyYXRvclNvdXJjZSh0aGlzLmVuZ2luZURpcmVjdG9yeSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lU291cmNlOiByZXNvbHZlTG9jYWxFbmdpbmVTb3VyY2UodGhpcy5lbmdpbmVEaXJlY3RvcnkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LmdlbmVyYXRvclZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2VuZXJhdG9yVmVyc2lvbiBpcyBubyBkZWZpbmVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHguZW5naW5lVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbmdpbmVWZXJzaW9uIGlzIG5vIGRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLngsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yU291cmNlOiBhd2FpdCByZXNvbHZlR2VuZXJhdG9yVmVyc2lvbih4LmdlbmVyYXRvclZlcnNpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZVNvdXJjZTogYXdhaXQgcmVzb2x2ZUVuZ2luZVZlcnNpb24oeC5lbmdpbmVWZXJzaW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRhY2goXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IGdlbmVyYXRvckZhY3RvcnkoZmkuZ2VuZXJhdG9yU291cmNlLCB0aGlzLmNhbmR5TW9kdWxlc0RpcmVjdG9yeSwgZmFsc2UsIHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIChmaSwgeSkgPT4gKHsgLi4uZmksIGdlbmVyYXRvcjogeSB9KSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgZmkgPT4gZ2V0R2VuZXJhdG9yU291cmNlS2V5KGZpLmdlbmVyYXRvclNvdXJjZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybVNvdXJjZXNQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIuLi8uLi9jb250cm9scy8qKi9nZW5lcmF0b3IvKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2hlbWFzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3VnYXIvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250cm9scy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF1dG9jYWxjLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaGVscGVycy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInZhbGlkYXRpb25zLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibG9jYWxpemF0aW9uLyoqLypcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3Jtc0RpcldpdGhIbFBhdGggPSB0aGlzLmZhcm1Db25maWdBcnJheS5maW5kKGkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGlyUGF0aC5zdGFydHNXaXRoKGkuZmFybURpcmVjdG9yeSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoRm9ybXNEaXJXaXRoSGxQYXRoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiRm9ybXNEaXJXaXRoSGxQYXRoID09PSB1bmRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBnZW5lcmF0ZUZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybVNvdXJjZXNQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3Jtc0RpcldpdGhIbFBhdGguaGxGYXJtRGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaS5nZW5lcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcENvZGVSZWZvcm1hdHRpbmc6IHRoaXMuc2tpcENvZGVSZWZvcm1hdHRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc0hhc2g6IFwibG9jYWwtaGFzaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWJwYWNrSHlicmlkRmlsZVN5c3RlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybUVudHJ5UG9pbnRQYXRoID0gcGF0aC5qb2luKHRoaXMuZmFybURpcmVjdG9yeSwgXCJmb3Jtc1wiLCB0aGlzLmdmdiwgXCJmb3JtXCIsIFwid2ViLmpzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy53ZWJwYWNrSHlicmlkRmlsZVN5c3RlbT8ud3JpdGVCYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1FbnRyeVBvaW50UGF0aF06IGdldFJlcG9ydEdlbmVyYXRvckVycm9yVG9QYWdlQm9keVNjcmlwdCh0aGlzLmZvcm1hdEVycm9yKGUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgICAgICBhd2FpdCBydW5Gb3JtQ29tcGlsYXRpb25WaWFXZWJwYWNrRGV2U2VydmVyKFxuICAgICAgICAgICAgICAgIHRoaXMuZ2Z2LFxuICAgICAgICAgICAgICAgIHRoaXMuZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5mYXJtRGlyZWN0b3J5LCBcInJlc1wiKSxcbiAgICAgICAgICAgICAgICBcImxvY2FsLWhhc2hcIixcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRGVidWdPbmx5LFxuICAgICAgICAgICAgICAgIHRoaXMud2VicGFja0h5YnJpZEZpbGVTeXN0ZW0sXG4gICAgICAgICAgICAgICAgdGhpcy5wb3J0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy53ZWJwYWNrRGV2U2VydmVyU3RhcnRlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRHZW5lcmF0ZWRGaWxlQXNTdHJlYW0oZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8Tm9kZUpTLlJlYWRhYmxlU3RyZWFtPiB7XG4gICAgICAgIHdoaWxlICghdGhpcy53ZWJwYWNrRGV2U2VydmVyU3RhcnRlZCkge1xuICAgICAgICAgICAgYXdhaXQgZGVsYXkoNTAwKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBcIlwiO1xuICAgICAgICBjb25zdCBhbGxQb3NzaWJsZUZpbGVQYXRoID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChpID0+IHBhdGguam9pbihpLCBcImZvcm1zXCIsIHRoaXMuZ2Z2LCBcImZvcm1cIiwgZmlsZW5hbWUpKTtcbiAgICAgICAgZm9yIChjb25zdCBwdGggb2YgYWxsUG9zc2libGVGaWxlUGF0aCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy53ZWJwYWNrSHlicmlkRmlsZVN5c3RlbT8uc3RhdFN5bmMocHRoKSkge1xuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHB0aDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlTmFtZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJnZXRHZW5lcmF0ZWRGaWxlQXNTdHJlYW0gZmlsZW5hbWUgbm90IGZvdW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMud2VicGFja0h5YnJpZEZpbGVTeXN0ZW0/LnJlYWRGaWxlKGZpbGVOYW1lLCBcInV0Zi04XCIsIChlcnJvciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoUmVhZGFibGUuZnJvbShbZGF0YV0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZpbGVBc1N0cmVhbShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxOb2RlSlMuUmVhZGFibGVTdHJlYW0+IHtcbiAgICAgICAgd2hpbGUgKCF0aGlzLndlYnBhY2tEZXZTZXJ2ZXJTdGFydGVkKSB7XG4gICAgICAgICAgICBhd2FpdCBkZWxheSg1MDApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vbG9jYWxob3N0OiR7dGhpcy5wb3J0fS8ke2ZpbGVuYW1lfWAsIHtcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICAgIGFnZW50OiBuZXcgQWdlbnQoeyByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPSAyMDApIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRSZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0ZXh0UmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0RXJyb3IoZTogUmVhc29uT3JFcnJvcik6IHN0cmluZyB7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtlfVxcbiR7ZS5zdGFja31gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtlfWA7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsVUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBRUEsSUFBQU0sYUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8scUJBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLHNCQUFBLEdBQUFSLE9BQUE7QUFNQSxJQUFBUyxnQkFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsV0FBQSxHQUFBVixPQUFBO0FBR0EsSUFBQVcsUUFBQSxHQUFBWCxPQUFBO0FBRUEsSUFBQVksK0JBQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLHNDQUFBLEdBQUFiLE9BQUE7QUFDQSxJQUFBYyx3QkFBQSxHQUFBZCxPQUFBO0FBRU8sTUFBTWUsa0JBQWtCLENBQUM7RUFrQnJCQyxXQUFXQSxDQUNkQyxJQUFZLEVBQ1pDLGFB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
220
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX3N0cmVhbSIsIl9odHRwcyIsIl9ub2RlRmV0Y2giLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3BMaW1pdCIsIl9mc0V4dHJhIiwiX0dlbmVyYXRlRm9ybSIsIl9BY3F1aXJlRm9ybUdlbmVyYXRvciIsIl9QdWJsaXNoZWRWZXJzaW9uVXRpbHMiLCJfUmVzb2x2ZUZvcm1JbmZvIiwiX0FzeW5jVXRpbHMiLCJfT2JzZXJ2ZSIsIl9Gc1V0aWxzIiwiX0Zvcm1QYXRoVXRpbHMiLCJfVHlwaW5nVXRpbHMiLCJfV2VsbEtub3duRGlyZWN0b3JpZXMiLCJfUmVwb3J0R2VuZXJhdG9yRXJyb3JUb1BhZ2VCb2R5IiwiX1J1bkZvcm1Db21waWxhdGlvblZpYVdlYnBhY2tEZXZTZXJ2ZXIiLCJfV2VicGFja0h5YnJpZEZpbGVTeXN0ZW0iLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiYnVpbGRHZnZUb1BhdGhNYXAiLCJyZXBvc2l0b3J5Um9vdHMiLCJyZXN1bHQiLCJNYXAiLCJyZXBvc2l0b3J5Um9vdCIsImZvcm1QYXRocyIsImdsb2JBc3luYyIsIldlbGxLbm93bkRpcmVjdG9yaWVzIiwiQ2FuZHlTdWJkaXJlY3RvcnlOYW1lIiwiY3dkIiwiZm9ybVBhdGgiLCJnZnYiLCJleHRyYWN0R2Z2RnJvbUZvcm1QYXRoIiwiam9pbiIsIkJ1aWxkRm9ybURldlNlcnZlciIsImNvbnN0cnVjdG9yIiwicG9ydCIsImFsbEZhcm1Db25maWciLCJjYW5keU1vZHVsZXNEaXJlY3RvcnkiLCJmYXJtQ29uZmlnQXJyYXkiLCJ1c2VHZW5lcmF0b3JGcm9tTG9jYWxTb3VyY2VzIiwiZW5naW5lRGlyZWN0b3J5IiwiYnVpbGREZWJ1Z09ubHkiLCJza2lwQ29kZVJlZm9ybWF0dGluZyIsIm5pZ2h0bHkiLCJmYXJtRGlyZWN0b3J5Iiwic3RhcnRQYXJhbGxlbExpbWl0IiwiZ2VuZXJhdGVDaGFpbiIsIndlYnBhY2tEZXZTZXJ2ZXJTdGFydGVkIiwid2VicGFja0h5YnJpZEZpbGVTeXN0ZW0iLCJnZnZQYXRocyIsInVuZGVmaW5lZCIsInBMaW1pdCIsImZpbmRGb3JtUGF0aCIsIl90aGlzJGdmdlBhdGhzIiwibWFwIiwieCIsIl90aGlzJGdmdlBhdGhzJGdldCIsInJlamVjdCIsImZvcm1EaXJQYXRoIiwiYWxsUG9zc2libGVGaWxlUGF0aCIsImkiLCJwdGgiLCJwYXRoRXhpc3RzIiwiRXJyb3IiLCJzdGFydCIsIldlYnBhY2tIeWJyaWRGaWxlU3lzdGVtIiwiT2JzZXJ2ZSIsImZpbGUiLCJGb3JtSnNvbkZpbGVOYW1lIiwidHJhbnNmb3JtIiwiZm9ybUpzb25GaWxlIiwicmVzb2x2ZUZvcm1JbmZvIiwiZ2VuZXJhdG9yU291cmNlIiwicmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlIiwiZW5naW5lU291cmNlIiwicmVzb2x2ZUxvY2FsRW5naW5lU291cmNlIiwiZ2VuZXJhdG9yVmVyc2lvbiIsImVuZ2luZVZlcnNpb24iLCJyZXNvbHZlR2VuZXJhdG9yVmVyc2lvbiIsInJlc29sdmVFbmdpbmVWZXJzaW9uIiwiYXR0YWNoIiwiZmkiLCJnZW5lcmF0b3JGYWN0b3J5IiwieSIsImdlbmVyYXRvciIsImdldEdlbmVyYXRvclNvdXJjZUtleSIsImZpbGVzIiwiZm9ybVNvdXJjZXNQYXRoIiwiZG8iLCJGb3Jtc0RpcldpdGhIbFBhdGgiLCJmaW5kIiwic3RhcnRzV2l0aCIsImdlbmVyYXRlRm9ybSIsImhsRmFybURpcmVjdG9yeVBhdGgiLCJyZXNvdXJjZXNIYXNoIiwiZSIsIl90aGlzJHdlYnBhY2tIeWJyaWRGaSIsImZvcm1FbnRyeVBvaW50UGF0aCIsIndyaXRlQmF0Y2giLCJnZXRSZXBvcnRHZW5lcmF0b3JFcnJvclRvUGFnZUJvZHlTY3JpcHQiLCJmb3JtYXRFcnJvciIsIm9ic2VydmUiLCJydW5Gb3JtQ29tcGlsYXRpb25WaWFXZWJwYWNrRGV2U2VydmVyIiwiZ2V0R2VuZXJhdGVkRmlsZUFzU3RyZWFtIiwiZmlsZW5hbWUiLCJkZWxheSIsImZpbGVOYW1lIiwiX3RoaXMkd2VicGFja0h5YnJpZEZpMiIsInN0YXRTeW5jIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyIiwiX3RoaXMkd2VicGFja0h5YnJpZEZpMyIsInJlYWRGaWxlIiwiZXJyb3IiLCJkYXRhIiwiUmVhZGFibGUiLCJmcm9tIiwiZ2V0RmlsZUFzU3RyZWFtIiwicmVzcG9uc2UiLCJmZXRjaCIsIm1ldGhvZCIsImFnZW50IiwiQWdlbnQiLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJzdGF0dXMiLCJ0ZXh0UmVzcG9uc2UiLCJ0ZXh0IiwiYm9keSIsInN0YWNrIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZFNlcnZlci9SZXNvdXJjZXNDb250cm9sbGVycy9EZXZTZXJ2ZXJzL0J1aWxkRm9ybURldlNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gXCJzdHJlYW1cIjtcbmltcG9ydCB7IEFnZW50IH0gZnJvbSBcImh0dHBzXCI7XG5cbmltcG9ydCBmZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiO1xuaW1wb3J0IHBMaW1pdCwgeyBMaW1pdCB9IGZyb20gXCJwLWxpbWl0XCI7XG5pbXBvcnQgeyBGYXJtQ29uZmlnIH0gZnJvbSBcIlRvb2xzL3NyYy9DYW5keUNMSVwiO1xuaW1wb3J0IHsgcGF0aEV4aXN0cyB9IGZyb20gXCJmcy1leHRyYVwiO1xuXG5pbXBvcnQgeyBnZW5lcmF0ZUZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0dlbmVyYXRlRm9ybVwiO1xuaW1wb3J0IHsgZ2VuZXJhdG9yRmFjdG9yeSwgZ2V0R2VuZXJhdG9yU291cmNlS2V5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL0J1aWxkVGFza3MvR2VuZXJhdG9yL0FjcXVpcmVGb3JtR2VuZXJhdG9yXCI7XG5pbXBvcnQge1xuICAgIHJlc29sdmVFbmdpbmVWZXJzaW9uLFxuICAgIHJlc29sdmVHZW5lcmF0b3JWZXJzaW9uLFxuICAgIHJlc29sdmVMb2NhbEVuZ2luZVNvdXJjZSxcbiAgICByZXNvbHZlTG9jYWxHZW5lcmF0b3JTb3VyY2UsXG59IGZyb20gXCIuLi8uLi8uLi8uLi9CdWlsZFRhc2tzL1B1Ymxpc2hlZFZlcnNpb25VdGlsc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUZvcm1JbmZvIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0J1aWxkVGFza3MvUmVzb2x2ZUZvcm1JbmZvXCI7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9Db21tb24vQXN5bmNVdGlsc1wiO1xuaW1wb3J0IHsgUmVhc29uT3JFcnJvciB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb25zL0Vycm9yVW50eXBlZFwiO1xuaW1wb3J0IHsgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlciB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9DaGFpbmFibGVWYWx1ZVByb2R1Y2VyXCI7XG5pbXBvcnQgeyBPYnNlcnZlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbnMvVGFza3NDb3JlL09ic2VydmVcIjtcbmltcG9ydCB7IGdsb2JBc3luYyB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb25zL0ZzVXRpbHNcIjtcbmltcG9ydCB7IGV4dHJhY3RHZnZGcm9tRm9ybVBhdGggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Zvcm1QYXRoVXRpbHNcIjtcbmltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IFdlbGxLbm93bkRpcmVjdG9yaWVzIH0gZnJvbSBcIi4uL0RpcmVjdG9yaWVzL1dlbGxLbm93bkRpcmVjdG9yaWVzXCI7XG5cbmltcG9ydCB7IGdldFJlcG9ydEdlbmVyYXRvckVycm9yVG9QYWdlQm9keVNjcmlwdCB9IGZyb20gXCIuL1JlcG9ydEdlbmVyYXRvckVycm9yVG9QYWdlQm9keVwiO1xuaW1wb3J0IHsgcnVuRm9ybUNvbXBpbGF0aW9uVmlhV2VicGFja0RldlNlcnZlciB9IGZyb20gXCIuL1J1bkZvcm1Db21waWxhdGlvblZpYVdlYnBhY2tEZXZTZXJ2ZXJcIjtcbmltcG9ydCB7IFdlYnBhY2tIeWJyaWRGaWxlU3lzdGVtIH0gZnJvbSBcIi4vV2VicGFja0luTWVtb3J5VXRpbHMvV2VicGFja0h5YnJpZEZpbGVTeXN0ZW1cIjtcblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRHZnZUb1BhdGhNYXAocmVwb3NpdG9yeVJvb3RzOiBzdHJpbmdbXSk6IFByb21pc2U8TWFwPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnlSb290IG9mIHJlcG9zaXRvcnlSb290cykge1xuICAgICAgICBjb25zdCBmb3JtUGF0aHMgPSBhd2FpdCBnbG9iQXN5bmMoYGZvcm1zLyoqLyovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9YCwge1xuICAgICAgICAgICAgY3dkOiByZXBvc2l0b3J5Um9vdCxcbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAoY29uc3QgZm9ybVBhdGggb2YgZm9ybVBhdGhzKSB7XG4gICAgICAgICAgICBjb25zdCBnZnYgPSBleHRyYWN0R2Z2RnJvbUZvcm1QYXRoKGZvcm1QYXRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoZ2Z2LCBwYXRoLmpvaW4ocmVwb3NpdG9yeVJvb3QsIGZvcm1QYXRoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRGb3JtRGV2U2VydmVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsbEZhcm1Db25maWc6IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2Z2OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYW5keU1vZHVsZXNEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIGZhcm1EaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIGZvcm1QYXRoOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYXJtQ29uZmlnQXJyYXk6IEZhcm1Db25maWdbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0UGFyYWxsZWxMaW1pdDogTGltaXQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcml2YXRlIGdlbmVyYXRlQ2hhaW4/OiBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPGFueT47XG4gICAgcHJpdmF0ZSB3ZWJwYWNrRGV2U2VydmVyU3RhcnRlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlczogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVuZ2luZURpcmVjdG9yeTogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmlnaHRseTogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkRGVidWdPbmx5OiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2tpcENvZGVSZWZvcm1hdHRpbmc6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSB3ZWJwYWNrSHlicmlkRmlsZVN5c3RlbT86IFdlYnBhY2tIeWJyaWRGaWxlU3lzdGVtO1xuICAgIHByaXZhdGUgZ2Z2UGF0aHM6IHVuZGVmaW5lZCB8IE1hcDxzdHJpbmcsIHN0cmluZz4gPSB1bmRlZmluZWQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHBvcnQ6IG51bWJlcixcbiAgICAgICAgYWxsRmFybUNvbmZpZzogc3RyaW5nW10sXG4gICAgICAgIGdmdjogc3RyaW5nLFxuICAgICAgICBjYW5keU1vZHVsZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgZmFybUNvbmZpZ0FycmF5OiBGYXJtQ29uZmlnW10sXG4gICAgICAgIHVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXM6IGJvb2xlYW4sXG4gICAgICAgIGVuZ2luZURpcmVjdG9yeTogc3RyaW5nLFxuICAgICAgICBidWlsZERlYnVnT25seTogYm9vbGVhbixcbiAgICAgICAgc2tpcENvZGVSZWZvcm1hdHRpbmc6IGJvb2xlYW4sXG4gICAgICAgIG5pZ2h0bHk6IGJvb2xlYW5cbiAgICApIHtcbiAgICAgICAgdGhpcy5wb3J0ID0gcG9ydDtcbiAgICAgICAgdGhpcy5hbGxGYXJtQ29uZmlnID0gYWxsRmFybUNvbmZpZztcbiAgICAgICAgdGhpcy5nZnYgPSBnZnY7XG4gICAgICAgIHRoaXMuY2FuZHlNb2R1bGVzRGlyZWN0b3J5ID0gY2FuZHlNb2R1bGVzRGlyZWN0b3J5O1xuICAgICAgICB0aGlzLmZhcm1Db25maWdBcnJheSA9IGZhcm1Db25maWdBcnJheTtcbiAgICAgICAgdGhpcy5zdGFydFBhcmFsbGVsTGltaXQgPSBwTGltaXQoMSk7XG4gICAgICAgIHRoaXMudXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlcyA9IHVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXM7XG4gICAgICAgIHRoaXMuZW5naW5lRGlyZWN0b3J5ID0gZW5naW5lRGlyZWN0b3J5O1xuICAgICAgICB0aGlzLmJ1aWxkRGVidWdPbmx5ID0gYnVpbGREZWJ1Z09ubHk7XG4gICAgICAgIHRoaXMuc2tpcENvZGVSZWZvcm1hdHRpbmcgPSBza2lwQ29kZVJlZm9ybWF0dGluZztcbiAgICAgICAgdGhpcy5uaWdodGx5ID0gbmlnaHRseTtcbiAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5ID0gXCJcIjtcbiAgICAgICAgdGhpcy5mb3JtUGF0aCA9IFwiXCI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaW5kRm9ybVBhdGgoZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPHsgZm9ybVBhdGg6IHN0cmluZzsgZmFybURpcmVjdG9yeTogc3RyaW5nIH0+IHtcbiAgICAgICAgdGhpcy5nZnZQYXRocyA9IHRoaXMuZ2Z2UGF0aHMgPz8gKGF3YWl0IGJ1aWxkR2Z2VG9QYXRoTWFwKHRoaXMuYWxsRmFybUNvbmZpZy5tYXAoeCA9PiBwYXRoLmpvaW4oeCwgXCIuLlwiKSkpKTtcblxuICAgICAgICBpZiAodGhpcy5nZnZQYXRocy5oYXMoZ2Z2KSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtUGF0aDogdGhpcy5nZnZQYXRocy5nZXQoZ2Z2KSA/PyByZWplY3QoKSxcbiAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5OiBwYXRoLmpvaW4oXCIuLlwiLCBcIi4uXCIsIFwiLi5cIiwgXCIuLlwiLCBcIi4uXCIsIFwiY2FuZHkuZmFybVwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmFybURpcmVjdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgZm9ybURpclBhdGggPSBcIlwiO1xuXG4gICAgICAgIGNvbnN0IGFsbFBvc3NpYmxlRmlsZVBhdGggPSB0aGlzLmFsbEZhcm1Db25maWcubWFwKGkgPT4gcGF0aC5qb2luKGksIFwiZm9ybXNcIiwgdGhpcy5nZnYpKTtcbiAgICAgICAgZm9yIChjb25zdCBwdGggb2YgYWxsUG9zc2libGVGaWxlUGF0aCkge1xuICAgICAgICAgICAgaWYgKGF3YWl0IHBhdGhFeGlzdHMocHRoKSkge1xuICAgICAgICAgICAgICAgIGZvcm1EaXJQYXRoID0gcHRoO1xuICAgICAgICAgICAgICAgIGZhcm1EaXJlY3RvcnkgPSBwYXRoLmpvaW4ocHRoLCBcIi4uXCIsIFwiLi5cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybURpclBhdGggPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiZm9ybURpclBhdGggbm90IGZvdW5kXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmYXJtRGlyZWN0b3J5ID09IHVuZGVmaW5lZCB8fCAhKGF3YWl0IHBhdGhFeGlzdHMoZmFybURpcmVjdG9yeSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgRmFybURpcmVjdG9yeSA9ICR7dGhpcy5mYXJtRGlyZWN0b3J5fSBub3QgZXhpc3RgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybVBhdGg6IGZvcm1EaXJQYXRoLFxuICAgICAgICAgICAgZmFybURpcmVjdG9yeTogZmFybURpcmVjdG9yeSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0UGFyYWxsZWxMaW1pdChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZW5lcmF0ZUNoYWluICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgeyBmb3JtUGF0aCwgZmFybURpcmVjdG9yeSB9ID0gYXdhaXQgdGhpcy5maW5kRm9ybVBhdGgodGhpcy5nZnYpO1xuICAgICAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5ID0gZmFybURpcmVjdG9yeTtcbiAgICAgICAgICAgIHRoaXMuZm9ybVBhdGggPSBmb3JtUGF0aDtcbiAgICAgICAgICAgIHRoaXMud2VicGFja0h5YnJpZEZpbGVTeXN0ZW0gPSBuZXcgV2VicGFja0h5YnJpZEZpbGVTeXN0ZW0ocGF0aC5qb2luKHRoaXMuZm9ybVBhdGgsIFwiZm9ybVwiKSk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDaGFpbiA9IE9ic2VydmUuZmlsZShwYXRoLmpvaW4odGhpcy5mb3JtUGF0aCwgV2VsbEtub3duRGlyZWN0b3JpZXMuRm9ybUpzb25GaWxlTmFtZSkpXG4gICAgICAgICAgICAgICAgLnRyYW5zZm9ybShmb3JtSnNvbkZpbGUgPT5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUZvcm1JbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUpzb25GaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmlnaHRseVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgeCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JTb3VyY2U6IHJlc29sdmVMb2NhbEdlbmVyYXRvclNvdXJjZSh0aGlzLmVuZ2luZURpcmVjdG9yeSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lU291cmNlOiByZXNvbHZlTG9jYWxFbmdpbmVTb3VyY2UodGhpcy5lbmdpbmVEaXJlY3RvcnkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LmdlbmVyYXRvclZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2VuZXJhdG9yVmVyc2lvbiBpcyBubyBkZWZpbmVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHguZW5naW5lVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbmdpbmVWZXJzaW9uIGlzIG5vIGRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLngsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yU291cmNlOiBhd2FpdCByZXNvbHZlR2VuZXJhdG9yVmVyc2lvbih4LmdlbmVyYXRvclZlcnNpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZVNvdXJjZTogYXdhaXQgcmVzb2x2ZUVuZ2luZVZlcnNpb24oeC5lbmdpbmVWZXJzaW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRhY2goXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IGdlbmVyYXRvckZhY3RvcnkoZmkuZ2VuZXJhdG9yU291cmNlLCB0aGlzLmNhbmR5TW9kdWxlc0RpcmVjdG9yeSwgZmFsc2UsIHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIChmaSwgeSkgPT4gKHsgLi4uZmksIGdlbmVyYXRvcjogeSB9KSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgZmkgPT4gZ2V0R2VuZXJhdG9yU291cmNlS2V5KGZpLmdlbmVyYXRvclNvdXJjZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybVNvdXJjZXNQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIuLi8uLi9jb250cm9scy8qKi9nZW5lcmF0b3IvKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2hlbWFzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3VnYXIvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250cm9scy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF1dG9jYWxjLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaGVscGVycy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInZhbGlkYXRpb25zLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibG9jYWxpemF0aW9uLyoqLypcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3Jtc0RpcldpdGhIbFBhdGggPSB0aGlzLmZhcm1Db25maWdBcnJheS5maW5kKGkgPT4gZm9ybVBhdGguc3RhcnRzV2l0aChpLmZhcm1EaXJlY3RvcnkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGb3Jtc0RpcldpdGhIbFBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJGb3Jtc0RpcldpdGhIbFBhdGggPT09IHVuZGVmaW5lZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXRlRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtU291cmNlc1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1zRGlyV2l0aEhsUGF0aC5obEZhcm1EaXJlY3RvcnlQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpLmdlbmVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwQ29kZVJlZm9ybWF0dGluZzogdGhpcy5za2lwQ29kZVJlZm9ybWF0dGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzSGFzaDogXCJsb2NhbC1oYXNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndlYnBhY2tIeWJyaWRGaWxlU3lzdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtRW50cnlQb2ludFBhdGggPSBwYXRoLmpvaW4odGhpcy5mb3JtUGF0aCwgXCJmb3JtXCIsIFwid2ViLmpzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy53ZWJwYWNrSHlicmlkRmlsZVN5c3RlbT8ud3JpdGVCYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1FbnRyeVBvaW50UGF0aF06IGdldFJlcG9ydEdlbmVyYXRvckVycm9yVG9QYWdlQm9keVNjcmlwdCh0aGlzLmZvcm1hdEVycm9yKGUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgICAgICBhd2FpdCBydW5Gb3JtQ29tcGlsYXRpb25WaWFXZWJwYWNrRGV2U2VydmVyKFxuICAgICAgICAgICAgICAgIHRoaXMuZ2Z2LFxuICAgICAgICAgICAgICAgIHRoaXMuZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1QYXRoLFxuICAgICAgICAgICAgICAgIHBhdGguam9pbih0aGlzLmZhcm1EaXJlY3RvcnksIFwicmVzXCIpLFxuICAgICAgICAgICAgICAgIFwibG9jYWwtaGFzaFwiLFxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGREZWJ1Z09ubHksXG4gICAgICAgICAgICAgICAgdGhpcy53ZWJwYWNrSHlicmlkRmlsZVN5c3RlbSxcbiAgICAgICAgICAgICAgICB0aGlzLnBvcnRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLndlYnBhY2tEZXZTZXJ2ZXJTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEdlbmVyYXRlZEZpbGVBc1N0cmVhbShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxOb2RlSlMuUmVhZGFibGVTdHJlYW0+IHtcbiAgICAgICAgd2hpbGUgKCF0aGlzLndlYnBhY2tEZXZTZXJ2ZXJTdGFydGVkKSB7XG4gICAgICAgICAgICBhd2FpdCBkZWxheSg1MDApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWxlTmFtZSA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGFsbFBvc3NpYmxlRmlsZVBhdGggPSB0aGlzLmFsbEZhcm1Db25maWcubWFwKGkgPT4gcGF0aC5qb2luKGksIFwiZm9ybXNcIiwgdGhpcy5nZnYsIFwiZm9ybVwiLCBmaWxlbmFtZSkpO1xuICAgICAgICBmb3IgKGNvbnN0IHB0aCBvZiBhbGxQb3NzaWJsZUZpbGVQYXRoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLndlYnBhY2tIeWJyaWRGaWxlU3lzdGVtPy5zdGF0U3luYyhwdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gcHRoO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGVOYW1lID09PSBcIlwiKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImdldEdlbmVyYXRlZEZpbGVBc1N0cmVhbSBmaWxlbmFtZSBub3QgZm91bmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHIpID0+IHtcbiAgICAgICAgICAgIHRoaXMud2VicGFja0h5YnJpZEZpbGVTeXN0ZW0/LnJlYWRGaWxlKGZpbGVOYW1lLCBcInV0Zi04XCIsIChlcnJvciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFJlYWRhYmxlLmZyb20oW2RhdGFdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGaWxlQXNTdHJlYW0oZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8Tm9kZUpTLlJlYWRhYmxlU3RyZWFtPiB7XG4gICAgICAgIHdoaWxlICghdGhpcy53ZWJwYWNrRGV2U2VydmVyU3RhcnRlZCkge1xuICAgICAgICAgICAgYXdhaXQgZGVsYXkoNTAwKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwczovL2xvY2FsaG9zdDoke3RoaXMucG9ydH0vJHtmaWxlbmFtZX1gLCB7XG4gICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgICBhZ2VudDogbmV3IEFnZW50KHsgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT0gMjAwKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0UmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGV4dFJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdEVycm9yKGU6IFJlYXNvbk9yRXJyb3IpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7ZX1cXG4ke2Uuc3RhY2t9YDtcbiAgICAg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
@@ -5,18 +5,15 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.runFormCompilationViaWebpackDevServer = runFormCompilationViaWebpackDevServer;
8
- var path = _interopRequireWildcard(require("path"));
9
8
  var _webpack = _interopRequireDefault(require("webpack"));
10
9
  var _webpackDevServer = _interopRequireDefault(require("webpack-dev-server"));
11
10
  var _AsyncUtils = require("../../../../../../Common/AsyncUtils");
12
11
  var _createFormWebpackConfiguration = require("../../../../FormWebpackConfiguration/createFormWebpackConfiguration");
13
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
14
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
- async function runFormCompilationViaWebpackDevServer(gfv, farmDirectory, resourcesDirectory, resourcesHash, buildDebugOnly, fileSystem, port) {
12
+ async function runFormCompilationViaWebpackDevServer(gfv, farmDirectory, formPath, resourcesDirectory, resourcesHash, buildDebugOnly, fileSystem, port) {
16
13
  const configs = await (0, _createFormWebpackConfiguration.createConfig)({
17
14
  gfv: gfv,
18
15
  resourcesHash: resourcesHash,
19
- formsDirectoryPath: path.join(farmDirectory, "forms"),
16
+ formPath: formPath,
20
17
  modes: buildDebugOnly ? ["development"] : ["production", "development"],
21
18
  resourcesDirectoryPath: resourcesDirectory
22
19
  });
@@ -52,4 +49,4 @@ async function runFormCompilationViaWebpackDevServer(gfv, farmDirectory, resourc
52
49
  server.listen(port);
53
50
  await (0, _AsyncUtils.delay)(1000);
54
51
  }
55
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX3dlYnBhY2siLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3dlYnBhY2tEZXZTZXJ2ZXIiLCJfQXN5bmNVdGlscyIsIl9jcmVhdGVGb3JtV2VicGFja0NvbmZpZ3VyYXRpb24iLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwicnVuRm9ybUNvbXBpbGF0aW9uVmlhV2VicGFja0RldlNlcnZlciIsImdmdiIsImZhcm1EaXJlY3RvcnkiLCJyZXNvdXJjZXNEaXJlY3RvcnkiLCJyZXNvdXJjZXNIYXNoIiwiYnVpbGREZWJ1Z09ubHkiLCJmaWxlU3lzdGVtIiwicG9ydCIsImNvbmZpZ3MiLCJjcmVhdGVDb25maWciLCJmb3Jtc0RpcmVjdG9yeVBhdGgiLCJqb2luIiwibW9kZXMiLCJyZXNvdXJjZXNEaXJlY3RvcnlQYXRoIiwiY29tcGlsZXIiLCJ3ZWJwYWNrIiwiaW5wdXRGaWxlU3lzdGVtIiwiY29tcGlsZXJzIiwic2V0SW5uZXJJbnB1dEZpbGVTeXN0ZW0iLCJzaW5nbGVDb21waWxlciIsIndhdGNoRmlsZVN5c3RlbSIsInNlcnZlciIsIldlYnBhY2tEZXZTZXJ2ZXIiLCJhbGxvd2VkSG9zdHMiLCJ0eXBlIiwib3B0aW9ucyIsImNlcnQiLCJyZXNvbHZlIiwiY2xpZW50Iiwib3ZlcmxheSIsIndlYlNvY2tldFVSTCIsImxpc3RlbiIsImRlbGF5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL0NMSUNvbW1hbmRzL0J1aWxkU2VydmVyL1Jlc291cmNlc0NvbnRyb2xsZXJzL0RldlNlcnZlcnMvUnVuRm9ybUNvbXBpbGF0aW9uVmlhV2VicGFja0RldlNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB3ZWJwYWNrIGZyb20gXCJ3ZWJwYWNrXCI7XG5pbXBvcnQgV2VicGFja0RldlNlcnZlciBmcm9tIFwid2VicGFjay1kZXYtc2VydmVyXCI7XG5cbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9Bc3luY1V0aWxzXCI7XG5pbXBvcnQgeyBjcmVhdGVDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vRm9ybVdlYnBhY2tDb25maWd1cmF0aW9uL2NyZWF0ZUZvcm1XZWJwYWNrQ29uZmlndXJhdGlvblwiO1xuXG5pbXBvcnQgeyBXZWJwYWNrSHlicmlkRmlsZVN5c3RlbSB9IGZyb20gXCIuL1dlYnBhY2tJbk1lbW9yeVV0aWxzL1dlYnBhY2tIeWJyaWRGaWxlU3lzdGVtXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Gb3JtQ29tcGlsYXRpb25WaWFXZWJwYWNrRGV2U2VydmVyKFxuICAgIGdmdjogc3RyaW5nLFxuICAgIGZhcm1EaXJlY3Rvcnk6IHN0cmluZyxcbiAgICByZXNvdXJjZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICByZXNvdXJjZXNIYXNoOiBzdHJpbmcsXG4gICAgYnVpbGREZWJ1Z09ubHk6IGJvb2xlYW4sXG4gICAgZmlsZVN5c3RlbTogV2VicGFja0h5YnJpZEZpbGVTeXN0ZW0sXG4gICAgcG9ydDogbnVtYmVyXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb25maWdzID0gYXdhaXQgY3JlYXRlQ29uZmlnKHtcbiAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgIHJlc291cmNlc0hhc2g6IHJlc291cmNlc0hhc2gsXG4gICAgICAgIGZvcm1zRGlyZWN0b3J5UGF0aDogcGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiksXG4gICAgICAgIG1vZGVzOiBidWlsZERlYnVnT25seSA/IFtcImRldmVsb3BtZW50XCJdIDogW1wicHJvZHVjdGlvblwiLCBcImRldmVsb3BtZW50XCJdLFxuICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnlQYXRoOiByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb21waWxlciA9IHdlYnBhY2soY29uZmlncyk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgaW5wdXRGaWxlU3lzdGVtID0gY29tcGlsZXIuY29tcGlsZXJzWzBdLmlucHV0RmlsZVN5c3RlbSBhcyBhbnk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICBmaWxlU3lzdGVtLnNldElubmVySW5wdXRGaWxlU3lzdGVtKGlucHV0RmlsZVN5c3RlbSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBmb3IgKGNvbnN0IHNpbmdsZUNvbXBpbGVyIG9mIGNvbXBpbGVyLmNvbXBpbGVycyBhcyBhbnlbXSkge1xuICAgICAgICBzaW5nbGVDb21waWxlci5pbnB1dEZpbGVTeXN0ZW0gPSBmaWxlU3lzdGVtO1xuICAgICAgICBzaW5nbGVDb21waWxlci53YXRjaEZpbGVTeXN0ZW0gPSBmaWxlU3lzdGVtO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZW5hYmxlIG5vLWFueSBuby11bnNhZmUtYW55XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3Qgc2VydmVyID0gbmV3IFdlYnBhY2tEZXZTZXJ2ZXIoXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICAgICAgICBhbGxvd2VkSG9zdHM6IFwiYWxsXCIsXG4gICAgICAgICAgICBzZXJ2ZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImh0dHBzXCIsXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBjZXJ0OiByZXF1aXJlLnJlc29sdmUoXCIuLi8uLi8uLi8uLi9LZXlzL2xvY2FsaG9zdC5wZW1cIiksXG4gICAgICAgICAgICAgICAgICAgIGtleTogcmVxdWlyZS5yZXNvbHZlKFwiLi4vLi4vLi4vLi4vS2V5cy9sb2NhbGhvc3Qta2V5LnBlbVwiKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaWVudDoge1xuICAgICAgICAgICAgICAgIG92ZXJsYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHdlYlNvY2tldFVSTDogYHdzczovL2xvY2FsaG9zdC50ZXN0a29udHVyLnJ1OiR7cG9ydH0vd3NgLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGlsZXJcbiAgICApO1xuICAgIHNlcnZlci5saXN0ZW4ocG9ydCk7XG4gICAgYXdhaXQgZGVsYXkoMTAwMCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxJQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxRQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxpQkFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUksV0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssK0JBQUEsR0FBQUwsT0FBQTtBQUFtRyxTQUFBTSx5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxpQkFBQSxPQUFBRCxPQUFBLFFBQUFFLGdCQUFBLE9B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
52
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2VicGFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3dlYnBhY2tEZXZTZXJ2ZXIiLCJfQXN5bmNVdGlscyIsIl9jcmVhdGVGb3JtV2VicGFja0NvbmZpZ3VyYXRpb24iLCJydW5Gb3JtQ29tcGlsYXRpb25WaWFXZWJwYWNrRGV2U2VydmVyIiwiZ2Z2IiwiZmFybURpcmVjdG9yeSIsImZvcm1QYXRoIiwicmVzb3VyY2VzRGlyZWN0b3J5IiwicmVzb3VyY2VzSGFzaCIsImJ1aWxkRGVidWdPbmx5IiwiZmlsZVN5c3RlbSIsInBvcnQiLCJjb25maWdzIiwiY3JlYXRlQ29uZmlnIiwibW9kZXMiLCJyZXNvdXJjZXNEaXJlY3RvcnlQYXRoIiwiY29tcGlsZXIiLCJ3ZWJwYWNrIiwiaW5wdXRGaWxlU3lzdGVtIiwiY29tcGlsZXJzIiwic2V0SW5uZXJJbnB1dEZpbGVTeXN0ZW0iLCJzaW5nbGVDb21waWxlciIsIndhdGNoRmlsZVN5c3RlbSIsInNlcnZlciIsIldlYnBhY2tEZXZTZXJ2ZXIiLCJhbGxvd2VkSG9zdHMiLCJ0eXBlIiwib3B0aW9ucyIsImNlcnQiLCJyZXNvbHZlIiwia2V5IiwiY2xpZW50Iiwib3ZlcmxheSIsIndlYlNvY2tldFVSTCIsImxpc3RlbiIsImRlbGF5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL0NMSUNvbW1hbmRzL0J1aWxkU2VydmVyL1Jlc291cmNlc0NvbnRyb2xsZXJzL0RldlNlcnZlcnMvUnVuRm9ybUNvbXBpbGF0aW9uVmlhV2VicGFja0RldlNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgd2VicGFjayBmcm9tIFwid2VicGFja1wiO1xuaW1wb3J0IFdlYnBhY2tEZXZTZXJ2ZXIgZnJvbSBcIndlYnBhY2stZGV2LXNlcnZlclwiO1xuXG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9Db21tb24vQXN5bmNVdGlsc1wiO1xuaW1wb3J0IHsgY3JlYXRlQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0Zvcm1XZWJwYWNrQ29uZmlndXJhdGlvbi9jcmVhdGVGb3JtV2VicGFja0NvbmZpZ3VyYXRpb25cIjtcblxuaW1wb3J0IHsgV2VicGFja0h5YnJpZEZpbGVTeXN0ZW0gfSBmcm9tIFwiLi9XZWJwYWNrSW5NZW1vcnlVdGlscy9XZWJwYWNrSHlicmlkRmlsZVN5c3RlbVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRm9ybUNvbXBpbGF0aW9uVmlhV2VicGFja0RldlNlcnZlcihcbiAgICBnZnY6IHN0cmluZyxcbiAgICBmYXJtRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgZm9ybVBhdGg6IHN0cmluZyxcbiAgICByZXNvdXJjZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICByZXNvdXJjZXNIYXNoOiBzdHJpbmcsXG4gICAgYnVpbGREZWJ1Z09ubHk6IGJvb2xlYW4sXG4gICAgZmlsZVN5c3RlbTogV2VicGFja0h5YnJpZEZpbGVTeXN0ZW0sXG4gICAgcG9ydDogbnVtYmVyXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb25maWdzID0gYXdhaXQgY3JlYXRlQ29uZmlnKHtcbiAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgIHJlc291cmNlc0hhc2g6IHJlc291cmNlc0hhc2gsXG4gICAgICAgIGZvcm1QYXRoOiBmb3JtUGF0aCxcbiAgICAgICAgbW9kZXM6IGJ1aWxkRGVidWdPbmx5ID8gW1wiZGV2ZWxvcG1lbnRcIl0gOiBbXCJwcm9kdWN0aW9uXCIsIFwiZGV2ZWxvcG1lbnRcIl0sXG4gICAgICAgIHJlc291cmNlc0RpcmVjdG9yeVBhdGg6IHJlc291cmNlc0RpcmVjdG9yeSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbXBpbGVyID0gd2VicGFjayhjb25maWdzKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBpbnB1dEZpbGVTeXN0ZW0gPSBjb21waWxlci5jb21waWxlcnNbMF0uaW5wdXRGaWxlU3lzdGVtIGFzIGFueTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgIGZpbGVTeXN0ZW0uc2V0SW5uZXJJbnB1dEZpbGVTeXN0ZW0oaW5wdXRGaWxlU3lzdGVtKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGZvciAoY29uc3Qgc2luZ2xlQ29tcGlsZXIgb2YgY29tcGlsZXIuY29tcGlsZXJzIGFzIGFueVtdKSB7XG4gICAgICAgIHNpbmdsZUNvbXBpbGVyLmlucHV0RmlsZVN5c3RlbSA9IGZpbGVTeXN0ZW07XG4gICAgICAgIHNpbmdsZUNvbXBpbGVyLndhdGNoRmlsZVN5c3RlbSA9IGZpbGVTeXN0ZW07XG4gICAgfVxuICAgIC8vIHRzbGludDplbmFibGUgbm8tYW55IG5vLXVuc2FmZS1hbnlcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgV2VicGFja0RldlNlcnZlcihcbiAgICAgICAge1xuICAgICAgICAgICAgcG9ydDogcG9ydCxcbiAgICAgICAgICAgIGFsbG93ZWRIb3N0czogXCJhbGxcIixcbiAgICAgICAgICAgIHNlcnZlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiaHR0cHNcIixcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIGNlcnQ6IHJlcXVpcmUucmVzb2x2ZShcIi4uLy4uLy4uLy4uL0tleXMvbG9jYWxob3N0LnBlbVwiKSxcbiAgICAgICAgICAgICAgICAgICAga2V5OiByZXF1aXJlLnJlc29sdmUoXCIuLi8uLi8uLi8uLi9LZXlzL2xvY2FsaG9zdC1rZXkucGVtXCIpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpZW50OiB7XG4gICAgICAgICAgICAgICAgb3ZlcmxheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgd2ViU29ja2V0VVJMOiBgd3NzOi8vbG9jYWxob3N0LnRlc3Rrb250dXIucnU6JHtwb3J0fS93c2AsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjb21waWxlclxuICAgICk7XG4gICAgc2VydmVyLmxpc3Rlbihwb3J0KTtcbiAgICBhd2FpdCBkZWxheSgxMDAwKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRSxXQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRywrQkFBQSxHQUFBSCxPQUFBO0FBSU8sZUFBZUkscUNBQXFDQSxDQUN2REMsR0FBVyxFQUNYQyxhQUFxQixFQUNyQkMsUUFBZ0IsRUFDaEJDLGtCQUEwQixFQUMxQkMsYUFBcUIsRUFDckJDLGNBQXVCLEVBQ3ZCQyxVQUFtQyxFQUNuQ0MsSUFBWSxFQUNDO0VBQ2IsTUFBTUMsT0FBTyxHQUFHLE1BQU0sSUFBQUMsNENBQVksRUFBQztJQUMvQlQsR0FBRyxFQUFFQSxHQUFHO0lBQ1JJLGFBQWEsRUFBRUEsYUFBYTtJQUM1QkYsUUFBUSxFQUFFQSxRQUFRO0lBQ2xCUSxLQUFLLEVBQUVMLGNBQWMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztJQUN2RU0sc0JBQXNCLEVBQUVSO0VBQzVCLENBQUMsQ0FBQztFQUVGLE1BQU1TLFFBQVEsR0FBRyxJQUFBQyxnQkFBTyxFQUFDTCxPQUFPLENBQUM7RUFDakM7RUFDQTtFQUNBLE1BQU1NLGVBQWUsR0FBR0YsUUFBUSxDQUFDRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNELGVBQXNCO0VBQ3BFO0VBQ0FSLFVBQVUsQ0FBQ1UsdUJBQXVCLENBQUNGLGVBQWUsQ0FBQztFQUNuRDtFQUNBLEtBQUssTUFBTUcsY0FBYyxJQUFJTCxRQUFRLENBQUNHLFNBQVMsRUFBVztJQUN0REUsY0FBYyxDQUFDSCxlQUFlLEdBQUdSLFVBQVU7SUFDM0NXLGNBQWMsQ0FBQ0MsZUFBZSxHQUFHWixVQUFVO0VBQy9DO0VBQ0E7O0VBRUE7RUFDQSxNQUFNYSxNQUFNLEdBQUcsSUFBSUMseUJBQWdCLENBQy9CO0lBQ0liLElBQUksRUFBRUEsSUFBSTtJQUNWYyxZQUFZLEVBQUUsS0FBSztJQUNuQkYsTUFBTSxFQUFFO01BQ0pHLElBQUksRUFBRSxPQUFPO01BQ2JDLE9BQU8sRUFBRTtRQUNMQyxJQUFJLEVBQUU3QixPQUFPLENBQUM4QixPQUFPLGlDQUFpQyxDQUFDO1FBQ3ZEQyxHQUFHLEVBQUUvQixPQUFPLENBQUM4QixPQUFPLHFDQUFxQztNQUM3RDtJQUNKLENBQUM7SUFDREUsTUFBTSxFQUFFO01BQ0pDLE9BQU8sRUFBRSxLQUFLO01BQ2RDLFlBQVksRUFBRyxpQ0FBZ0N0QixJQUFLO0lBQ3hEO0VBQ0osQ0FBQyxFQUNESyxRQUNKLENBQUM7RUFDRE8sTUFBTSxDQUFDVyxNQUFNLENBQUN2QixJQUFJLENBQUM7RUFDbkIsTUFBTSxJQUFBd0IsaUJBQUssRUFBQyxJQUFJLENBQUM7QUFDckIifQ==