@kontur.candy/tools 2.109.0 → 2.113.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 (51) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +5 -1
  3. package/distr/Common/CandyApiClient/CandyApiClient.js +10 -30
  4. package/distr/Common/CandyApiClient/CandyApiClientContext.js +26 -0
  5. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +60 -0
  6. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +51 -0
  7. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +50 -0
  8. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +90 -0
  9. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +56 -0
  10. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +12 -0
  11. package/distr/Common/CandyApiClient/{Types/CandyApiAuthentication.js → DigestApiClient/IDigestApiClient.js} +0 -0
  12. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +26 -0
  13. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +25 -0
  14. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +24 -0
  15. package/distr/Common/CandyApiClient/{Types/Picklist → DigestApiClient/Types}/DigestRequest.js +0 -0
  16. package/distr/Common/CandyApiClient/{Types/Picklist/PicklistServerResponses.js → DigestApiClient/Types/DigestResponse.js} +0 -0
  17. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +8 -50
  18. package/distr/Common/EndPoints.js +20 -0
  19. package/distr/Common/FormActionHandlers/ContextualActionNames.js +16 -0
  20. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +6 -0
  21. package/distr/Common/HttpClient/AuthenticationMode.js +35 -0
  22. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +27 -3
  23. package/distr/Common/HttpClient/HttpClient.js +66 -9
  24. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +6 -0
  25. package/distr/Common/IntRangeUtils.js +3 -12
  26. package/distr/Common/IterableUtils.js +17 -11
  27. package/distr/Common/ModelPath/ModelPath.js +16 -1
  28. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +41 -0
  29. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +6 -0
  30. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +13 -0
  31. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +82 -0
  32. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +137 -0
  33. package/distr/Common/NidusClient/INidusClient.js +16 -0
  34. package/distr/Common/NidusClient/NidusClientContext.js +47 -0
  35. package/distr/Common/NidusClient/NidusClientImpl.js +72 -0
  36. package/distr/Common/TypingUtils.js +24 -2
  37. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +4 -4
  38. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +15 -4
  39. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +12 -6
  40. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +2 -20
  41. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +19 -49
  42. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +29 -45
  43. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +11 -12
  44. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +7 -7
  45. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +20 -2
  46. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.map +1 -1
  47. package/distr/Tools/src/LocalServerFrontEndDist/index.js +3093 -387
  48. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  49. package/package.json +1 -1
  50. package/distr/Common/CandyApiClient/Types/Picklist/PicklistQueryFilter.js +0 -24
  51. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/ResourcesDirectory.js +0 -66
@@ -9,8 +9,6 @@ var _mimeTypes = _interopRequireDefault(require("mime-types"));
9
9
 
10
10
  var _ResolveFormInfo = require("../../../BuildTasks/ResolveFormInfo");
11
11
 
12
- var _FormGlobsUtils = require("../../../Commons/FormGlobsUtils");
13
-
14
12
  var _Methods = require("../../../Commons/HttpServer/AttributeRouting/Methods");
15
13
 
16
14
  var _NotFoundWebError = require("../../../Commons/HttpServer/AttributeRouting/NotFoundWebError");
@@ -29,8 +27,6 @@ var _BuildFormDevServer = require("./DevServers/BuildFormDevServer");
29
27
 
30
28
  var _FarmDirectory = require("./Directories/FarmDirectory");
31
29
 
32
- var _ResourcesDirectory = require("./Directories/ResourcesDirectory");
33
-
34
30
  var _dec, _dec2, _dec3, _class;
35
31
 
36
32
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -38,7 +34,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
38
34
  function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
39
35
 
40
36
  let BuildServerBuildFormsController = (_dec = (0, _Methods.httpGet)(/^\/public\/scripts\/(((\d{6,7})(.[\w\-]*)?(.min)?).js)$/i, _Results.httpReturn.StreamWithMime("application/javascript"), (0, _Params.httpUrlParam)("0", _Params.httpType.String), (0, _Params.httpUrlParam)("1", _Params.httpType.String), (0, _Params.httpUrlParam)("2", _Params.httpType.String)), _dec2 = (0, _Methods.httpGet)(/^\/public\/styles\/(((\d{6,7})(.[\w\-]*)?(.min)?).css)$/i, _Results.httpReturn.StreamWithMime("text/css"), (0, _Params.httpUrlParam)("0", _Params.httpType.String), (0, _Params.httpUrlParam)("1", _Params.httpType.String), (0, _Params.httpUrlParam)("2", _Params.httpType.String), (0, _Params.httpUrlParam)("3", _Params.httpType.String)), _dec3 = (0, _Methods.httpGet)("/public/images/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), (_class = class BuildServerBuildFormsController extends _SingletonController.SingletonController {
41
- constructor(farmDirectory, resourcesDirectory, candyModulesDirectory, hlFarmDirectoryPath, buildOnDemandFormGlobs, useGeneratorFromLocalSources, engineDirectory, buildDebugOnly, skipCodeReformatting) {
37
+ constructor(farmDirectory, candyModulesDirectory, hlFarmDirectoryPath, useGeneratorFromLocalSources, engineDirectory, buildDebugOnly, nightly = false) {
42
38
  super();
43
39
  this.farmDirectory = void 0;
44
40
  this.farmDirectoryPath = void 0;
@@ -46,17 +42,13 @@ let BuildServerBuildFormsController = (_dec = (0, _Methods.httpGet)(/^\/public\/
46
42
  this.devServers = {};
47
43
  this.candyModulesDirectory = void 0;
48
44
  this.hlFarmDirectoryPath = void 0;
49
- this.resourcesDirectory = void 0;
50
- this.buildOnDemandFormGlobs = void 0;
51
45
  this.useGeneratorFromLocalSources = void 0;
52
46
  this.engineDirectory = void 0;
53
- this.skipCodeReformatting = void 0;
47
+ this.nightly = void 0;
54
48
  this.buildDebugOnly = void 0;
55
- this.skipCodeReformatting = skipCodeReformatting;
49
+ this.nightly = nightly;
56
50
  this.farmDirectory = new _FarmDirectory.FarmDirectory(farmDirectory);
57
51
  this.farmDirectoryPath = farmDirectory;
58
- this.resourcesDirectory = new _ResourcesDirectory.ResourcesDirectory(resourcesDirectory);
59
- this.buildOnDemandFormGlobs = new _FormGlobsUtils.FormGlobs(this.farmDirectory, buildOnDemandFormGlobs);
60
52
  this.candyModulesDirectory = candyModulesDirectory;
61
53
  this.hlFarmDirectoryPath = hlFarmDirectoryPath;
62
54
  this.useGeneratorFromLocalSources = useGeneratorFromLocalSources;
@@ -65,42 +57,26 @@ let BuildServerBuildFormsController = (_dec = (0, _Methods.httpGet)(/^\/public\/
65
57
  }
66
58
 
67
59
  async getFormScript(fileName, fileNameWithoutExt, gfv) {
68
- await this.buildOnDemandFormGlobs.ensureFormGlobsResolved();
69
-
70
- if (await this.buildOnDemandFormGlobs.isMatch(gfv)) {
71
- const buildFormDevServer = await this.getOrCreateBuildFormDevServer(gfv);
72
- return new _StreamResultHandler.StreamResult(await buildFormDevServer.getFileAsStream(`/public/scripts/${fileName}`));
73
- } else {
74
- return new _StreamResultHandler.StreamResult(this.resourcesDirectory.getScriptContentAsStream(fileName));
75
- }
60
+ const buildFormDevServer = await this.getOrCreateBuildFormDevServer(gfv);
61
+ return new _StreamResultHandler.StreamResult(await buildFormDevServer.getFileAsStream(`/public/scripts/${fileName}`));
76
62
  }
77
63
 
78
64
  async getFormStyle(fileName, fileNameWithoutExt, gfv, theme) {
79
- await this.buildOnDemandFormGlobs.ensureFormGlobsResolved();
80
-
81
- if (await this.buildOnDemandFormGlobs.isMatch(gfv)) {
82
- const buildFormDevServer = await this.getOrCreateBuildFormDevServer(gfv);
83
- return new _StreamResultHandler.StreamResult(await buildFormDevServer.getFileAsStream(`/public/styles/${fileName.replace(theme !== null && theme !== void 0 ? theme : "", "")}`));
84
- } else {
85
- return new _StreamResultHandler.StreamResult(this.resourcesDirectory.getStyleContentAsStream(fileName.replace(theme !== null && theme !== void 0 ? theme : "", "")));
86
- }
65
+ const buildFormDevServer = await this.getOrCreateBuildFormDevServer(gfv);
66
+ return new _StreamResultHandler.StreamResult(await buildFormDevServer.getFileAsStream(`/public/styles/${fileName.replace(theme !== null && theme !== void 0 ? theme : "", "")}`));
87
67
  }
88
68
 
89
69
  async getFormImages(fileName) {
90
- try {
91
- return new _StreamResultHandler.StreamResult(this.resourcesDirectory.getImageContentAsStream(fileName), _mimeTypes.default.lookup(fileName));
92
- } catch (e) {
93
- for (const devServer of Object.values(this.devServers)) {
94
- if (devServer != undefined) {
95
- try {
96
- return new _StreamResultHandler.StreamResult(await devServer.getFileAsStream(`/public/images/${fileName}`), _mimeTypes.default.lookup(fileName));
97
- } catch (ignoreError) {// try next server
98
- }
70
+ for (const devServer of Object.values(this.devServers)) {
71
+ if (devServer != undefined) {
72
+ try {
73
+ return new _StreamResultHandler.StreamResult(await devServer.getFileAsStream(`/public/images/${fileName}`), _mimeTypes.default.lookup(fileName));
74
+ } catch (ignoreError) {// try next server
99
75
  }
100
76
  }
101
-
102
- throw new _NotFoundWebError.NotFoundWebError("File not found", true);
103
77
  }
78
+
79
+ throw new _NotFoundWebError.NotFoundWebError("File not found", true);
104
80
  }
105
81
 
106
82
  async getAllNormalizationFileNames() {
@@ -123,22 +99,16 @@ let BuildServerBuildFormsController = (_dec = (0, _Methods.httpGet)(/^\/public\/
123
99
  }
124
100
 
125
101
  async getNormalizationFileContent(gfv) {
126
- await this.buildOnDemandFormGlobs.ensureFormGlobsResolved();
127
-
128
- if (await this.buildOnDemandFormGlobs.isMatch(gfv)) {
129
- const buildFormDevServer = await this.getOrCreateBuildFormDevServer(gfv);
130
- const resultStream = await buildFormDevServer.getGeneratedFileAsStream(`ServerSide.normalize`);
131
- return resultStream;
132
- } else {
133
- return this.resourcesDirectory.getFLangNormalizeFile(gfv);
134
- }
102
+ const buildFormDevServer = await this.getOrCreateBuildFormDevServer(gfv);
103
+ const resultStream = await buildFormDevServer.getGeneratedFileAsStream(`ServerSide.normalize`);
104
+ return resultStream;
135
105
  }
136
106
 
137
107
  async getOrCreateBuildFormDevServer(gfv) {
138
108
  let devServer = this.devServers[gfv];
139
109
 
140
110
  if (devServer == undefined) {
141
- devServer = new _BuildFormDevServer.BuildFormDevServer(this.nextFreePort++, this.farmDirectoryPath, gfv, this.candyModulesDirectory, this.hlFarmDirectoryPath, this.useGeneratorFromLocalSources, this.engineDirectory, this.buildDebugOnly, this.skipCodeReformatting);
111
+ devServer = new _BuildFormDevServer.BuildFormDevServer(this.nextFreePort++, this.farmDirectoryPath, gfv, this.candyModulesDirectory, this.hlFarmDirectoryPath, this.useGeneratorFromLocalSources, this.engineDirectory, this.buildDebugOnly, false, this.nightly);
142
112
  this.devServers[gfv] = devServer;
143
113
  await devServer.start();
144
114
  }
@@ -148,4 +118,4 @@ let BuildServerBuildFormsController = (_dec = (0, _Methods.httpGet)(/^\/public\/
148
118
 
149
119
  }, (_applyDecoratedDescriptor(_class.prototype, "getFormScript", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "getFormScript"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "getFormStyle", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, "getFormStyle"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "getFormImages", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, "getFormImages"), _class.prototype)), _class));
150
120
  exports.BuildServerBuildFormsController = BuildServerBuildFormsController;
151
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZFNlcnZlci9SZXNvdXJjZXNDb250cm9sbGVycy9CdWlsZFNlcnZlckJ1aWxkRm9ybXNDb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbIkJ1aWxkU2VydmVyQnVpbGRGb3Jtc0NvbnRyb2xsZXIiLCJodHRwUmV0dXJuIiwiU3RyZWFtV2l0aE1pbWUiLCJodHRwVHlwZSIsIlN0cmluZyIsIlN0cmVhbSIsIlNpbmdsZXRvbkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImZhcm1EaXJlY3RvcnkiLCJyZXNvdXJjZXNEaXJlY3RvcnkiLCJjYW5keU1vZHVsZXNEaXJlY3RvcnkiLCJobEZhcm1EaXJlY3RvcnlQYXRoIiwiYnVpbGRPbkRlbWFuZEZvcm1HbG9icyIsInVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMiLCJlbmdpbmVEaXJlY3RvcnkiLCJidWlsZERlYnVnT25seSIsInNraXBDb2RlUmVmb3JtYXR0aW5nIiwiZmFybURpcmVjdG9yeVBhdGgiLCJuZXh0RnJlZVBvcnQiLCJkZXZTZXJ2ZXJzIiwiRmFybURpcmVjdG9yeSIsIlJlc291cmNlc0RpcmVjdG9yeSIsIkZvcm1HbG9icyIsImdldEZvcm1TY3JpcHQiLCJmaWxlTmFtZSIsImZpbGVOYW1lV2l0aG91dEV4dCIsImdmdiIsImVuc3VyZUZvcm1HbG9ic1Jlc29sdmVkIiwiaXNNYXRjaCIsImJ1aWxkRm9ybURldlNlcnZlciIsImdldE9yQ3JlYXRlQnVpbGRGb3JtRGV2U2VydmVyIiwiU3RyZWFtUmVzdWx0IiwiZ2V0RmlsZUFzU3RyZWFtIiwiZ2V0U2NyaXB0Q29udGVudEFzU3RyZWFtIiwiZ2V0Rm9ybVN0eWxlIiwidGhlbWUiLCJyZXBsYWNlIiwiZ2V0U3R5bGVDb250ZW50QXNTdHJlYW0iLCJnZXRGb3JtSW1hZ2VzIiwiZ2V0SW1hZ2VDb250ZW50QXNTdHJlYW0iLCJtaW1lIiwibG9va3VwIiwiZSIsImRldlNlcnZlciIsIk9iamVjdCIsInZhbHVlcyIsInVuZGVmaW5lZCIsImlnbm9yZUVycm9yIiwiTm90Rm91bmRXZWJFcnJvciIsImdldEFsbE5vcm1hbGl6YXRpb25GaWxlTmFtZXMiLCJyZXN1bHQiLCJmYXJtRm9ybUpzb25zIiwiZ2V0QWxsRm9ybUpzb25GaWxlcyIsImZhcm1Gb3JtSnNvbiIsImZvcm1Kc29uUGF0aCIsImdldEZvcm1Kc29uUGF0aCIsImZvcm1Db25maWciLCJ1c2VTZXJ2ZXJTaWRlRkxhbmdOb3JtYWxpemF0aW9uIiwic2V0dGluZ3MiLCJwdXNoIiwiZ2V0Tm9ybWFsaXphdGlvbkZpbGVDb250ZW50IiwicmVzdWx0U3RyZWFtIiwiZ2V0R2VuZXJhdGVkRmlsZUFzU3RyZWFtIiwiZ2V0RkxhbmdOb3JtYWxpemVGaWxlIiwiQnVpbGRGb3JtRGV2U2VydmVyIiwic3RhcnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7SUFHYUEsK0IsV0FzQ1Isc0JBQ0csMERBREgsRUFFR0Msb0JBQVdDLGNBQVgsQ0FBMEIsd0JBQTFCLENBRkgsRUFHRywwQkFBYSxHQUFiLEVBQWtCQyxpQkFBU0MsTUFBM0IsQ0FISCxFQUlHLDBCQUFhLEdBQWIsRUFBa0JELGlCQUFTQyxNQUEzQixDQUpILEVBS0csMEJBQWEsR0FBYixFQUFrQkQsaUJBQVNDLE1BQTNCLENBTEgsQyxVQWlCQSxzQkFDRywwREFESCxFQUVHSCxvQkFBV0MsY0FBWCxDQUEwQixVQUExQixDQUZILEVBR0csMEJBQWEsR0FBYixFQUFrQkMsaUJBQVNDLE1BQTNCLENBSEgsRUFJRywwQkFBYSxHQUFiLEVBQWtCRCxpQkFBU0MsTUFBM0IsQ0FKSCxFQUtHLDBCQUFhLEdBQWIsRUFBa0JELGlCQUFTQyxNQUEzQixDQUxILEVBTUcsMEJBQWEsR0FBYixFQUFrQkQsaUJBQVNDLE1BQTNCLENBTkgsQyxVQXlCQSxzQkFBUSww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QyxlQVBHLEVBUVIsS0FBS0MsY0FSRyxFQVNSLEtBQUtDLG9CQVRHLENBQVo7QUFXQSxXQUFLRyxVQUFMLENBQWdCTyxHQUFoQixJQUF1QmlCLFNBQXZCO0FBQ0EsWUFBTUEsU0FBUyxDQUFDc0IsS0FBVixFQUFOO0FBQ0g7O0FBQ0QsV0FBT3RCLFNBQVA7QUFDSDs7QUFoSmtILEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbWltZSBmcm9tIFwibWltZS10eXBlc1wiO1xuXG5pbXBvcnQgeyByZWFkRm9ybUNvbmZpZyB9IGZyb20gXCIuLi8uLi8uLi9CdWlsZFRhc2tzL1Jlc29sdmVGb3JtSW5mb1wiO1xuaW1wb3J0IHsgRm9ybUdsb2JzIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvRm9ybUdsb2JzVXRpbHNcIjtcbmltcG9ydCB7IGh0dHBHZXQgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvTWV0aG9kc1wiO1xuaW1wb3J0IHsgTm90Rm91bmRXZWJFcnJvciB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9Ob3RGb3VuZFdlYkVycm9yXCI7XG5pbXBvcnQgeyBodHRwVHlwZSwgaHR0cFVybFBhcmFtIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1BhcmFtc1wiO1xuaW1wb3J0IHsgaHR0cFJldHVybiB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9SZXN1bHRzXCI7XG5pbXBvcnQgeyBTdHJlYW1SZXN1bHQgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUmVzdWx0cy9TdHJlYW1SZXN1bHRIYW5kbGVyXCI7XG5pbXBvcnQgeyBTaW5nbGV0b25Db250cm9sbGVyIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9FeHByZXNzV3JhcHBlci9TaW5nbGV0b25Db250cm9sbGVyXCI7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9Mb2dnaW5nL1N0YXRpY0xvZ2dlclwiO1xuXG5pbXBvcnQgeyBCdWlsZEZvcm1EZXZTZXJ2ZXIgfSBmcm9tIFwiLi9EZXZTZXJ2ZXJzL0J1aWxkRm9ybURldlNlcnZlclwiO1xuaW1wb3J0IHsgRmFybURpcmVjdG9yeSB9IGZyb20gXCIuL0RpcmVjdG9yaWVzL0Zhcm1EaXJlY3RvcnlcIjtcbmltcG9ydCB7IFJlc291cmNlc0RpcmVjdG9yeSB9IGZyb20gXCIuL0RpcmVjdG9yaWVzL1Jlc291cmNlc0RpcmVjdG9yeVwiO1xuaW1wb3J0IHsgSUZMYW5nTm9ybWFsaXphdGlvblNvdXJjZXNQcm92aWRlciB9IGZyb20gXCIuL0lGTGFuZ05vcm1hbGl6YXRpb25Tb3VyY2VzUHJvdmlkZXJcIjtcblxuZXhwb3J0IGNsYXNzIEJ1aWxkU2VydmVyQnVpbGRGb3Jtc0NvbnRyb2xsZXIgZXh0ZW5kcyBTaW5nbGV0b25Db250cm9sbGVyIGltcGxlbWVudHMgSUZMYW5nTm9ybWFsaXphdGlvblNvdXJjZXNQcm92aWRlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYXJtRGlyZWN0b3J5OiBGYXJtRGlyZWN0b3J5O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmFybURpcmVjdG9yeVBhdGg6IHN0cmluZztcbiAgICBwcml2YXRlIG5leHRGcmVlUG9ydCA9IDEyMDAxO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGV2U2VydmVyczogeyBbZ2Z2OiBzdHJpbmddOiB1bmRlZmluZWQgfCBCdWlsZEZvcm1EZXZTZXJ2ZXIgfSA9IHt9O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FuZHlNb2R1bGVzRGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBobEZhcm1EaXJlY3RvcnlQYXRoOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZXNEaXJlY3Rvcnk6IFJlc291cmNlc0RpcmVjdG9yeTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkT25EZW1hbmRGb3JtR2xvYnM6IEZvcm1HbG9icztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmdpbmVEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNraXBDb2RlUmVmb3JtYXR0aW5nOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYnVpbGREZWJ1Z09ubHk6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGZhcm1EaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgcmVzb3VyY2VzRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGNhbmR5TW9kdWxlc0RpcmVjdG9yeTogc3RyaW5nLFxuICAgICAgICBobEZhcm1EaXJlY3RvcnlQYXRoOiBzdHJpbmcsXG4gICAgICAgIGJ1aWxkT25EZW1hbmRGb3JtR2xvYnM6IHN0cmluZ1tdLFxuICAgICAgICB1c2VHZW5lcmF0b3JGcm9tTG9jYWxTb3VyY2VzOiBib29sZWFuLFxuICAgICAgICBlbmdpbmVEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgYnVpbGREZWJ1Z09ubHk6IGJvb2xlYW4sXG4gICAgICAgIHNraXBDb2RlUmVmb3JtYXR0aW5nOiBib29sZWFuXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2tpcENvZGVSZWZvcm1hdHRpbmcgPSBza2lwQ29kZVJlZm9ybWF0dGluZztcbiAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5ID0gbmV3IEZhcm1EaXJlY3RvcnkoZmFybURpcmVjdG9yeSk7XG4gICAgICAgIHRoaXMuZmFybURpcmVjdG9yeVBhdGggPSBmYXJtRGlyZWN0b3J5O1xuICAgICAgICB0aGlzLnJlc291cmNlc0RpcmVjdG9yeSA9IG5ldyBSZXNvdXJjZXNEaXJlY3RvcnkocmVzb3VyY2VzRGlyZWN0b3J5KTtcbiAgICAgICAgdGhpcy5idWlsZE9uRGVtYW5kRm9ybUdsb2JzID0gbmV3IEZvcm1HbG9icyh0aGlzLmZhcm1EaXJlY3RvcnksIGJ1aWxkT25EZW1hbmRGb3JtR2xvYnMpO1xuICAgICAgICB0aGlzLmNhbmR5TW9kdWxlc0RpcmVjdG9yeSA9IGNhbmR5TW9kdWxlc0RpcmVjdG9yeTtcbiAgICAgICAgdGhpcy5obEZhcm1EaXJlY3RvcnlQYXRoID0gaGxGYXJtRGlyZWN0b3J5UGF0aDtcbiAgICAgICAgdGhpcy51c2VHZW5lcmF0b3JGcm9tTG9jYWxTb3VyY2VzID0gdXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlcztcbiAgICAgICAgdGhpcy5lbmdpbmVEaXJlY3RvcnkgPSBlbmdpbmVEaXJlY3Rvcnk7XG4gICAgICAgIHRoaXMuYnVpbGREZWJ1Z09ubHkgPSBidWlsZERlYnVnT25seTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcbiAgICAgICAgL15cXC9wdWJsaWNcXC9zY3JpcHRzXFwvKCgoXFxkezYsN30pKC5bXFx3XFwtXSopPygubWluKT8pLmpzKSQvaSxcbiAgICAgICAgaHR0cFJldHVybi5TdHJlYW1XaXRoTWltZShcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiksXG4gICAgICAgIGh0dHBVcmxQYXJhbShcIjBcIiwgaHR0cFR5cGUuU3RyaW5nKSxcbiAgICAgICAgaHR0cFVybFBhcmFtKFwiMVwiLCBodHRwVHlwZS5TdHJpbmcpLFxuICAgICAgICBodHRwVXJsUGFyYW0oXCIyXCIsIGh0dHBUeXBlLlN0cmluZylcbiAgICApXG4gICAgcHVibGljIGFzeW5jIGdldEZvcm1TY3JpcHQoZmlsZU5hbWU6IHN0cmluZywgZmlsZU5hbWVXaXRob3V0RXh0OiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5idWlsZE9uRGVtYW5kRm9ybUdsb2JzLmVuc3VyZUZvcm1HbG9ic1Jlc29sdmVkKCk7XG4gICAgICAgIGlmIChhd2FpdCB0aGlzLmJ1aWxkT25EZW1hbmRGb3JtR2xvYnMuaXNNYXRjaChnZnYpKSB7XG4gICAgICAgICAgICBjb25zdCBidWlsZEZvcm1EZXZTZXJ2ZXIgPSBhd2FpdCB0aGlzLmdldE9yQ3JlYXRlQnVpbGRGb3JtRGV2U2VydmVyKGdmdik7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0cmVhbVJlc3VsdChhd2FpdCBidWlsZEZvcm1EZXZTZXJ2ZXIuZ2V0RmlsZUFzU3RyZWFtKGAvcHVibGljL3NjcmlwdHMvJHtmaWxlTmFtZX1gKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0cmVhbVJlc3VsdCh0aGlzLnJlc291cmNlc0RpcmVjdG9yeS5nZXRTY3JpcHRDb250ZW50QXNTdHJlYW0oZmlsZU5hbWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBodHRwR2V0KFxuICAgICAgICAvXlxcL3B1YmxpY1xcL3N0eWxlc1xcLygoKFxcZHs2LDd9KSguW1xcd1xcLV0qKT8oLm1pbik/KS5jc3MpJC9pLFxuICAgICAgICBodHRwUmV0dXJuLlN0cmVhbVdpdGhNaW1lKFwidGV4dC9jc3NcIiksXG4gICAgICAgIGh0dHBVcmxQYXJhbShcIjBcIiwgaHR0cFR5cGUuU3RyaW5nKSxcbiAgICAgICAgaHR0cFVybFBhcmFtKFwiMVwiLCBodHRwVHlwZS5TdHJpbmcpLFxuICAgICAgICBodHRwVXJsUGFyYW0oXCIyXCIsIGh0dHBUeXBlLlN0cmluZyksXG4gICAgICAgIGh0dHBVcmxQYXJhbShcIjNcIiwgaHR0cFR5cGUuU3RyaW5nKVxuICAgIClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0Rm9ybVN0eWxlKFxuICAgICAgICBmaWxlTmFtZTogc3RyaW5nLFxuICAgICAgICBmaWxlTmFtZVdpdGhvdXRFeHQ6IHN0cmluZyxcbiAgICAgICAgZ2Z2OiBzdHJpbmcsXG4gICAgICAgIHRoZW1lOiB1bmRlZmluZWQgfCBzdHJpbmdcbiAgICApOiBQcm9taXNlPFN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmJ1aWxkT25EZW1hbmRGb3JtR2xvYnMuZW5zdXJlRm9ybUdsb2JzUmVzb2x2ZWQoKTtcbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuYnVpbGRPbkRlbWFuZEZvcm1HbG9icy5pc01hdGNoKGdmdikpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkRm9ybURldlNlcnZlciA9IGF3YWl0IHRoaXMuZ2V0T3JDcmVhdGVCdWlsZEZvcm1EZXZTZXJ2ZXIoZ2Z2KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RyZWFtUmVzdWx0KFxuICAgICAgICAgICAgICAgIGF3YWl0IGJ1aWxkRm9ybURldlNlcnZlci5nZXRGaWxlQXNTdHJlYW0oYC9wdWJsaWMvc3R5bGVzLyR7ZmlsZU5hbWUucmVwbGFjZSh0aGVtZSA/PyBcIlwiLCBcIlwiKX1gKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RyZWFtUmVzdWx0KHRoaXMucmVzb3VyY2VzRGlyZWN0b3J5LmdldFN0eWxlQ29udGVudEFzU3RyZWFtKGZpbGVOYW1lLnJlcGxhY2UodGhlbWUgPz8gXCJcIiwgXCJcIikpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL3B1YmxpYy9pbWFnZXMvOmZpbGVuYW1lXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJmaWxlbmFtZVwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRGb3JtSW1hZ2VzKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFN0cmVhbVJlc3VsdD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1SZXN1bHQodGhpcy5yZXNvdXJjZXNEaXJlY3RvcnkuZ2V0SW1hZ2VDb250ZW50QXNTdHJlYW0oZmlsZU5hbWUpLCBtaW1lLmxvb2t1cChmaWxlTmFtZSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRldlNlcnZlciBvZiBPYmplY3QudmFsdWVzKHRoaXMuZGV2U2VydmVycykpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGV2U2VydmVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1SZXN1bHQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGV2U2VydmVyLmdldEZpbGVBc1N0cmVhbShgL3B1YmxpYy9pbWFnZXMvJHtmaWxlTmFtZX1gKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW1lLmxvb2t1cChmaWxlTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnkgbmV4dCBzZXJ2ZXJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBOb3RGb3VuZFdlYkVycm9yKFwiRmlsZSBub3QgZm91bmRcIiwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsTm9ybWFsaXphdGlvbkZpbGVOYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgY29uc3QgZmFybUZvcm1Kc29ucyA9IGF3YWl0IHRoaXMuZmFybURpcmVjdG9yeS5nZXRBbGxGb3JtSnNvbkZpbGVzKCk7XG4gICAgICAgIGZvciAoY29uc3QgZmFybUZvcm1Kc29uIG9mIGZhcm1Gb3JtSnNvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1Kc29uUGF0aCA9IHRoaXMuZmFybURpcmVjdG9yeS5nZXRGb3JtSnNvblBhdGgoZmFybUZvcm1Kc29uLmdmdik7XG4gICAgICAgICAgICBjb25zdCBmb3JtQ29uZmlnID0gYXdhaXQgcmVhZEZvcm1Db25maWcoZm9ybUpzb25QYXRoLCBnZXRMb2dnZXIoKSk7XG4gICAgICAgICAgICBjb25zdCB1c2VTZXJ2ZXJTaWRlRkxhbmdOb3JtYWxpemF0aW9uID0gZm9ybUNvbmZpZy5zZXR0aW5ncz8udXNlU2VydmVyU2lkZUZMYW5nTm9ybWFsaXphdGlvbiA/PyBmYWxzZTtcbiAgICAgICAgICAgIGlmICh1c2VTZXJ2ZXJTaWRlRkxhbmdOb3JtYWxpemF0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7ZmFybUZvcm1Kc29uLmdmdn0ubm9ybWFsaXplYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Tm9ybWFsaXphdGlvbkZpbGVDb250ZW50KGdmdjogc3RyaW5nKTogUHJvbWlzZTxOb2RlSlMuUmVhZGFibGVTdHJlYW0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5idWlsZE9uRGVtYW5kRm9ybUdsb2JzLmVuc3VyZUZvcm1HbG9ic1Jlc29sdmVkKCk7XG4gICAgICAgIGlmIChhd2FpdCB0aGlzLmJ1aWxkT25EZW1hbmRGb3JtR2xvYnMuaXNNYXRjaChnZnYpKSB7XG4gICAgICAgICAgICBjb25zdCBidWlsZEZvcm1EZXZTZXJ2ZXIgPSBhd2FpdCB0aGlzLmdldE9yQ3JlYXRlQnVpbGRGb3JtRGV2U2VydmVyKGdmdik7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRTdHJlYW0gPSBhd2FpdCBidWlsZEZvcm1EZXZTZXJ2ZXIuZ2V0R2VuZXJhdGVkRmlsZUFzU3RyZWFtKGBTZXJ2ZXJTaWRlLm5vcm1hbGl6ZWApO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFN0cmVhbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlc0RpcmVjdG9yeS5nZXRGTGFuZ05vcm1hbGl6ZUZpbGUoZ2Z2KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0T3JDcmVhdGVCdWlsZEZvcm1EZXZTZXJ2ZXIoZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEJ1aWxkRm9ybURldlNlcnZlcj4ge1xuICAgICAgICBsZXQgZGV2U2VydmVyID0gdGhpcy5kZXZTZXJ2ZXJzW2dmdl07XG4gICAgICAgIGlmIChkZXZTZXJ2ZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkZXZTZXJ2ZXIgPSBuZXcgQnVpbGRGb3JtRGV2U2VydmVyKFxuICAgICAgICAgICAgICAgIHRoaXMubmV4dEZyZWVQb3J0KyssXG4gICAgICAgICAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgICAgICBnZnYsXG4gICAgICAgICAgICAgICAgdGhpcy5jYW5keU1vZHVsZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgdGhpcy5obEZhcm1EaXJlY3RvcnlQYXRoLFxuICAgICAgICAgICAgICAgIHRoaXMudXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlcyxcbiAgICAgICAgICAgICAgICB0aGlzLmVuZ2luZURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRGVidWdPbmx5LFxuICAgICAgICAgICAgICAgIHRoaXMuc2tpcENvZGVSZWZvcm1hdHRpbmdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmRldlNlcnZlcnNbZ2Z2XSA9IGRldlNlcnZlcjtcbiAgICAgICAgICAgIGF3YWl0IGRldlNlcnZlci5zdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXZTZXJ2ZXI7XG4gICAgfVxufVxuIl19
121
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZFNlcnZlci9SZXNvdXJjZXNDb250cm9sbGVycy9CdWlsZFNlcnZlckJ1aWxkRm9ybXNDb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbIkJ1aWxkU2VydmVyQnVpbGRGb3Jtc0NvbnRyb2xsZXIiLCJodHRwUmV0dXJuIiwiU3RyZWFtV2l0aE1pbWUiLCJodHRwVHlwZSIsIlN0cmluZyIsIlN0cmVhbSIsIlNpbmdsZXRvbkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImZhcm1EaXJlY3RvcnkiLCJjYW5keU1vZHVsZXNEaXJlY3RvcnkiLCJobEZhcm1EaXJlY3RvcnlQYXRoIiwidXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlcyIsImVuZ2luZURpcmVjdG9yeSIsImJ1aWxkRGVidWdPbmx5IiwibmlnaHRseSIsImZhcm1EaXJlY3RvcnlQYXRoIiwibmV4dEZyZWVQb3J0IiwiZGV2U2VydmVycyIsIkZhcm1EaXJlY3RvcnkiLCJnZXRGb3JtU2NyaXB0IiwiZmlsZU5hbWUiLCJmaWxlTmFtZVdpdGhvdXRFeHQiLCJnZnYiLCJidWlsZEZvcm1EZXZTZXJ2ZXIiLCJnZXRPckNyZWF0ZUJ1aWxkRm9ybURldlNlcnZlciIsIlN0cmVhbVJlc3VsdCIsImdldEZpbGVBc1N0cmVhbSIsImdldEZvcm1TdHlsZSIsInRoZW1lIiwicmVwbGFjZSIsImdldEZvcm1JbWFnZXMiLCJkZXZTZXJ2ZXIiLCJPYmplY3QiLCJ2YWx1ZXMiLCJ1bmRlZmluZWQiLCJtaW1lIiwibG9va3VwIiwiaWdub3JlRXJyb3IiLCJOb3RGb3VuZFdlYkVycm9yIiwiZ2V0QWxsTm9ybWFsaXphdGlvbkZpbGVOYW1lcyIsInJlc3VsdCIsImZhcm1Gb3JtSnNvbnMiLCJnZXRBbGxGb3JtSnNvbkZpbGVzIiwiZmFybUZvcm1Kc29uIiwiZm9ybUpzb25QYXRoIiwiZ2V0Rm9ybUpzb25QYXRoIiwiZm9ybUNvbmZpZyIsInVzZVNlcnZlclNpZGVGTGFuZ05vcm1hbGl6YXRpb24iLCJzZXR0aW5ncyIsInB1c2giLCJnZXROb3JtYWxpemF0aW9uRmlsZUNvbnRlbnQiLCJyZXN1bHRTdHJlYW0iLCJnZXRHZW5lcmF0ZWRGaWxlQXNTdHJlYW0iLCJCdWlsZEZvcm1EZXZTZXJ2ZXIiLCJzdGFydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOzs7Ozs7OztJQUdhQSwrQixXQWdDUixzQkFDRywwREFESCxFQUVHQyxvQkFBV0MsY0FBWCxDQUEwQix3QkFBMUIsQ0FGSCxFQUdHLDBCQUFhLEdBQWIsRUFBa0JDLGlCQUFTQyxNQUEzQixDQUhILEVBSUcsMEJBQWEsR0FBYixFQUFrQkQsaUJBQVNDLE1BQTNCLENBSkgsRUFLRywwQkFBYSxHQUFiLEVBQWtCRCxpQkFBU0MsTUFBM0IsQ0FMSCxDLFVBWUEsc0JBQ0csMERBREgsRUFFR0gsb0JBQVdDLGNBQVgsQ0FBMEIsVUFBMUIsQ0FGSCxFQUdHLDBCQUFhLEdBQWIsRUFBa0JDLGlCQUFTQyxNQUEzQixDQUhILEVBSUcsMEJBQWEsR0FBYixFQUFrQkQsaUJBQVNDLE1BQTNCLENBSkgsRUFLRywwQkFBYSxHQUFiLEVBQWtCRCxpQkFBU0MsTUFBM0IsQ0FMSCxFQU1HLDBCQUFhLEdBQWIsRUFBa0JELGlCQUFTQyxNQUEzQixDQU5ILEMsVUFvQkEsc0JBQVEsMEJBQVIsRUFBb0NILG9CQUFXSSxNQUEvQyxFQUF1RCwwQkFBYSxVQUFiLEVBQXlCRixpQkFBU0MsTUFBbEMsQ0FBdkQsQyxZQWhFRSxNQUFNSiwrQkFBTixTQUE4Q00sd0NBQTlDLENBQWdIO0FBWTVHQyxFQUFBQSxXQUFXLENBQ2RDLGFBRGMsRUFFZEMscUJBRmMsRUFHZEMsbUJBSGMsRUFJZEMsNEJBSmMsRUFLZEMsZUFMYyxFQU1kQyxjQU5jLEVBT2RDLE9BQWdCLEdBQUcsS0FQTCxFQVFoQjtBQUNFO0FBREYsU0FuQmVOLGFBbUJmO0FB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LENBQUNyQixHQUFJLFlBQWhDO0FBQ0g7QUFDSjs7QUFDRCxXQUFPa0IsTUFBUDtBQUNIOztBQUV1QyxRQUEzQlUsMkJBQTJCLENBQUM1QixHQUFELEVBQThDO0FBQ2xGLFVBQU1DLGtCQUFrQixHQUFHLE1BQU0sS0FBS0MsNkJBQUwsQ0FBbUNGLEdBQW5DLENBQWpDO0FBQ0EsVUFBTTZCLFlBQVksR0FBRyxNQUFNNUIsa0JBQWtCLENBQUM2Qix3QkFBbkIsQ0FBNkMsc0JBQTdDLENBQTNCO0FBQ0EsV0FBT0QsWUFBUDtBQUNIOztBQUUwQyxRQUE3QjNCLDZCQUE2QixDQUFDRixHQUFELEVBQTJDO0FBQ2xGLFFBQUlTLFNBQVMsR0FBRyxLQUFLZCxVQUFMLENBQWdCSyxHQUFoQixDQUFoQjs7QUFDQSxRQUFJUyxTQUFTLElBQUlHLFNBQWpCLEVBQTRCO0FBQ3hCSCxNQUFBQSxTQUFTLEdBQUcsSUFBSXNCLHNDQUFKLENBQ1IsS0FBS3JDLFlBQUwsRUFEUSxFQUVSLEtBQUtELGlCQUZHLEVBR1JPLEdBSFEsRUFJUixLQUFLYixxQkFKRyxFQUtSLEtBQUtDLG1CQUxHLEVBTVIsS0FBS0MsNEJBTkcsRUFPUixLQUFLQyxlQVBHLEVBUVIsS0FBS0MsY0FSRyxFQVNSLEtBVFEsRUFVUixLQUFLQyxPQVZHLENBQVo7QUFZQSxXQUFLRyxVQUFMLENBQWdCSyxHQUFoQixJQUF1QlMsU0FBdkI7QUFDQSxZQUFNQSxTQUFTLENBQUN1QixLQUFWLEVBQU47QUFDSDs7QUFDRCxXQUFPdkIsU0FBUDtBQUNIOztBQXhIa0gsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtaW1lIGZyb20gXCJtaW1lLXR5cGVzXCI7XG5cbmltcG9ydCB7IHJlYWRGb3JtQ29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uL0J1aWxkVGFza3MvUmVzb2x2ZUZvcm1JbmZvXCI7XG5pbXBvcnQgeyBodHRwR2V0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL01ldGhvZHNcIjtcbmltcG9ydCB7IE5vdEZvdW5kV2ViRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvTm90Rm91bmRXZWJFcnJvclwiO1xuaW1wb3J0IHsgaHR0cFR5cGUsIGh0dHBVcmxQYXJhbSB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9QYXJhbXNcIjtcbmltcG9ydCB7IGh0dHBSZXR1cm4gfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUmVzdWx0c1wiO1xuaW1wb3J0IHsgU3RyZWFtUmVzdWx0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1Jlc3VsdHMvU3RyZWFtUmVzdWx0SGFuZGxlclwiO1xuaW1wb3J0IHsgU2luZ2xldG9uQ29udHJvbGxlciB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvRXhwcmVzc1dyYXBwZXIvU2luZ2xldG9uQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvTG9nZ2luZy9TdGF0aWNMb2dnZXJcIjtcblxuaW1wb3J0IHsgQnVpbGRGb3JtRGV2U2VydmVyIH0gZnJvbSBcIi4vRGV2U2VydmVycy9CdWlsZEZvcm1EZXZTZXJ2ZXJcIjtcbmltcG9ydCB7IEZhcm1EaXJlY3RvcnkgfSBmcm9tIFwiLi9EaXJlY3Rvcmllcy9GYXJtRGlyZWN0b3J5XCI7XG5pbXBvcnQgeyBJRkxhbmdOb3JtYWxpemF0aW9uU291cmNlc1Byb3ZpZGVyIH0gZnJvbSBcIi4vSUZMYW5nTm9ybWFsaXphdGlvblNvdXJjZXNQcm92aWRlclwiO1xuXG5leHBvcnQgY2xhc3MgQnVpbGRTZXJ2ZXJCdWlsZEZvcm1zQ29udHJvbGxlciBleHRlbmRzIFNpbmdsZXRvbkNvbnRyb2xsZXIgaW1wbGVtZW50cyBJRkxhbmdOb3JtYWxpemF0aW9uU291cmNlc1Byb3ZpZGVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZhcm1EaXJlY3Rvcnk6IEZhcm1EaXJlY3Rvcnk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYXJtRGlyZWN0b3J5UGF0aDogc3RyaW5nO1xuICAgIHByaXZhdGUgbmV4dEZyZWVQb3J0ID0gMTIwMDE7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXZTZXJ2ZXJzOiB7IFtnZnY6IHN0cmluZ106IHVuZGVmaW5lZCB8IEJ1aWxkRm9ybURldlNlcnZlciB9ID0ge307XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYW5keU1vZHVsZXNEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmdpbmVEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5pZ2h0bHk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBidWlsZERlYnVnT25seTogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgZmFybURpcmVjdG9yeTogc3RyaW5nLFxuICAgICAgICBjYW5keU1vZHVsZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aDogc3RyaW5nLFxuICAgICAgICB1c2VHZW5lcmF0b3JGcm9tTG9jYWxTb3VyY2VzOiBib29sZWFuLFxuICAgICAgICBlbmdpbmVEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgYnVpbGREZWJ1Z09ubHk6IGJvb2xlYW4sXG4gICAgICAgIG5pZ2h0bHk6IGJvb2xlYW4gPSBmYWxzZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm5pZ2h0bHkgPSBuaWdodGx5O1xuICAgICAgICB0aGlzLmZhcm1EaXJlY3RvcnkgPSBuZXcgRmFybURpcmVjdG9yeShmYXJtRGlyZWN0b3J5KTtcbiAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5UGF0aCA9IGZhcm1EaXJlY3Rvcnk7XG4gICAgICAgIHRoaXMuY2FuZHlNb2R1bGVzRGlyZWN0b3J5ID0gY2FuZHlNb2R1bGVzRGlyZWN0b3J5O1xuICAgICAgICB0aGlzLmhsRmFybURpcmVjdG9yeVBhdGggPSBobEZhcm1EaXJlY3RvcnlQYXRoO1xuICAgICAgICB0aGlzLnVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMgPSB1c2VHZW5lcmF0b3JGcm9tTG9jYWxTb3VyY2VzO1xuICAgICAgICB0aGlzLmVuZ2luZURpcmVjdG9yeSA9IGVuZ2luZURpcmVjdG9yeTtcbiAgICAgICAgdGhpcy5idWlsZERlYnVnT25seSA9IGJ1aWxkRGVidWdPbmx5O1xuICAgIH1cblxuICAgIEBodHRwR2V0KFxuICAgICAgICAvXlxcL3B1YmxpY1xcL3NjcmlwdHNcXC8oKChcXGR7Niw3fSkoLltcXHdcXC1dKik/KC5taW4pPykuanMpJC9pLFxuICAgICAgICBodHRwUmV0dXJuLlN0cmVhbVdpdGhNaW1lKFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiKSxcbiAgICAgICAgaHR0cFVybFBhcmFtKFwiMFwiLCBodHRwVHlwZS5TdHJpbmcpLFxuICAgICAgICBodHRwVXJsUGFyYW0oXCIxXCIsIGh0dHBUeXBlLlN0cmluZyksXG4gICAgICAgIGh0dHBVcmxQYXJhbShcIjJcIiwgaHR0cFR5cGUuU3RyaW5nKVxuICAgIClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0Rm9ybVNjcmlwdChmaWxlTmFtZTogc3RyaW5nLCBmaWxlTmFtZVdpdGhvdXRFeHQ6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPFN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBidWlsZEZvcm1EZXZTZXJ2ZXIgPSBhd2FpdCB0aGlzLmdldE9yQ3JlYXRlQnVpbGRGb3JtRGV2U2VydmVyKGdmdik7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtUmVzdWx0KGF3YWl0IGJ1aWxkRm9ybURldlNlcnZlci5nZXRGaWxlQXNTdHJlYW0oYC9wdWJsaWMvc2NyaXB0cy8ke2ZpbGVOYW1lfWApKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcbiAgICAgICAgL15cXC9wdWJsaWNcXC9zdHlsZXNcXC8oKChcXGR7Niw3fSkoLltcXHdcXC1dKik/KC5taW4pPykuY3NzKSQvaSxcbiAgICAgICAgaHR0cFJldHVybi5TdHJlYW1XaXRoTWltZShcInRleHQvY3NzXCIpLFxuICAgICAgICBodHRwVXJsUGFyYW0oXCIwXCIsIGh0dHBUeXBlLlN0cmluZyksXG4gICAgICAgIGh0dHBVcmxQYXJhbShcIjFcIiwgaHR0cFR5cGUuU3RyaW5nKSxcbiAgICAgICAgaHR0cFVybFBhcmFtKFwiMlwiLCBodHRwVHlwZS5TdHJpbmcpLFxuICAgICAgICBodHRwVXJsUGFyYW0oXCIzXCIsIGh0dHBUeXBlLlN0cmluZylcbiAgICApXG4gICAgcHVibGljIGFzeW5jIGdldEZvcm1TdHlsZShcbiAgICAgICAgZmlsZU5hbWU6IHN0cmluZyxcbiAgICAgICAgZmlsZU5hbWVXaXRob3V0RXh0OiBzdHJpbmcsXG4gICAgICAgIGdmdjogc3RyaW5nLFxuICAgICAgICB0aGVtZTogdW5kZWZpbmVkIHwgc3RyaW5nXG4gICAgKTogUHJvbWlzZTxTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYnVpbGRGb3JtRGV2U2VydmVyID0gYXdhaXQgdGhpcy5nZXRPckNyZWF0ZUJ1aWxkRm9ybURldlNlcnZlcihnZnYpO1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbVJlc3VsdChcbiAgICAgICAgICAgIGF3YWl0IGJ1aWxkRm9ybURldlNlcnZlci5nZXRGaWxlQXNTdHJlYW0oYC9wdWJsaWMvc3R5bGVzLyR7ZmlsZU5hbWUucmVwbGFjZSh0aGVtZSA/PyBcIlwiLCBcIlwiKX1gKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL3B1YmxpYy9pbWFnZXMvOmZpbGVuYW1lXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJmaWxlbmFtZVwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRGb3JtSW1hZ2VzKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGRldlNlcnZlciBvZiBPYmplY3QudmFsdWVzKHRoaXMuZGV2U2VydmVycykpIHtcbiAgICAgICAgICAgIGlmIChkZXZTZXJ2ZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1SZXN1bHQoXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBkZXZTZXJ2ZXIuZ2V0RmlsZUFzU3RyZWFtKGAvcHVibGljL2ltYWdlcy8ke2ZpbGVOYW1lfWApLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWltZS5sb29rdXAoZmlsZU5hbWUpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IG5leHQgc2VydmVyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBOb3RGb3VuZFdlYkVycm9yKFwiRmlsZSBub3QgZm91bmRcIiwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbE5vcm1hbGl6YXRpb25GaWxlTmFtZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGZhcm1Gb3JtSnNvbnMgPSBhd2FpdCB0aGlzLmZhcm1EaXJlY3RvcnkuZ2V0QWxsRm9ybUpzb25GaWxlcygpO1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1Gb3JtSnNvbiBvZiBmYXJtRm9ybUpzb25zKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtSnNvblBhdGggPSB0aGlzLmZhcm1EaXJlY3RvcnkuZ2V0Rm9ybUpzb25QYXRoKGZhcm1Gb3JtSnNvbi5nZnYpO1xuICAgICAgICAgICAgY29uc3QgZm9ybUNvbmZpZyA9IGF3YWl0IHJlYWRGb3JtQ29uZmlnKGZvcm1Kc29uUGF0aCwgZ2V0TG9nZ2VyKCkpO1xuICAgICAgICAgICAgY29uc3QgdXNlU2VydmVyU2lkZUZMYW5nTm9ybWFsaXphdGlvbiA9IGZvcm1Db25maWcuc2V0dGluZ3M/LnVzZVNlcnZlclNpZGVGTGFuZ05vcm1hbGl6YXRpb24gPz8gZmFsc2U7XG4gICAgICAgICAgICBpZiAodXNlU2VydmVyU2lkZUZMYW5nTm9ybWFsaXphdGlvbikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAke2Zhcm1Gb3JtSnNvbi5nZnZ9Lm5vcm1hbGl6ZWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldE5vcm1hbGl6YXRpb25GaWxlQ29udGVudChnZnY6IHN0cmluZyk6IFByb21pc2U8Tm9kZUpTLlJlYWRhYmxlU3RyZWFtPiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkRm9ybURldlNlcnZlciA9IGF3YWl0IHRoaXMuZ2V0T3JDcmVhdGVCdWlsZEZvcm1EZXZTZXJ2ZXIoZ2Z2KTtcbiAgICAgICAgY29uc3QgcmVzdWx0U3RyZWFtID0gYXdhaXQgYnVpbGRGb3JtRGV2U2VydmVyLmdldEdlbmVyYXRlZEZpbGVBc1N0cmVhbShgU2VydmVyU2lkZS5ub3JtYWxpemVgKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFN0cmVhbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldE9yQ3JlYXRlQnVpbGRGb3JtRGV2U2VydmVyKGdmdjogc3RyaW5nKTogUHJvbWlzZTxCdWlsZEZvcm1EZXZTZXJ2ZXI+IHtcbiAgICAgICAgbGV0IGRldlNlcnZlciA9IHRoaXMuZGV2U2VydmVyc1tnZnZdO1xuICAgICAgICBpZiAoZGV2U2VydmVyID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGV2U2VydmVyID0gbmV3IEJ1aWxkRm9ybURldlNlcnZlcihcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRGcmVlUG9ydCsrLFxuICAgICAgICAgICAgICAgIHRoaXMuZmFybURpcmVjdG9yeVBhdGgsXG4gICAgICAgICAgICAgICAgZ2Z2LFxuICAgICAgICAgICAgICAgIHRoaXMuY2FuZHlNb2R1bGVzRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgIHRoaXMuaGxGYXJtRGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgICAgICB0aGlzLnVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5lbmdpbmVEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZERlYnVnT25seSxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICB0aGlzLm5pZ2h0bHlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmRldlNlcnZlcnNbZ2Z2XSA9IGRldlNlcnZlcjtcbiAgICAgICAgICAgIGF3YWl0IGRldlNlcnZlci5zdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXZTZXJ2ZXI7XG4gICAgfVxufVxuIl19
@@ -5,16 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.BuildServerFormInfoController = void 0;
7
7
 
8
- var _fsExtra = require("fs-extra");
9
-
10
8
  var _EngineVersionUtils = require("../../../BuildTasks/EngineVersionUtils");
11
9
 
12
10
  var _PublishedVersionUtils = require("../../../BuildTasks/PublishedVersionUtils");
13
11
 
14
12
  var _ResolveFormInfo = require("../../../BuildTasks/ResolveFormInfo");
15
13
 
16
- var _FormGlobsUtils = require("../../../Commons/FormGlobsUtils");
17
-
18
14
  var _Methods = require("../../../Commons/HttpServer/AttributeRouting/Methods");
19
15
 
20
16
  var _Params = require("../../../Commons/HttpServer/AttributeRouting/Params");
@@ -25,71 +21,59 @@ var _SingletonController = require("../../../Commons/HttpServer/ExpressWrapper/S
25
21
 
26
22
  var _FarmDirectory = require("./Directories/FarmDirectory");
27
23
 
28
- var _ResourcesDirectory = require("./Directories/ResourcesDirectory");
29
-
30
24
  var _dec, _dec2, _class;
31
25
 
32
26
  function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
33
27
 
34
28
  let BuildServerFormInfoController = (_dec = (0, _Methods.httpGet)("/metas", _Results.httpReturn.PlainText), _dec2 = (0, _Methods.httpGet)("/metas/:gfv.metas.json", _Results.httpReturn.PlainText, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), (_class = class BuildServerFormInfoController extends _SingletonController.SingletonController {
35
- constructor(farmDirectory, resourcesDirectory, buildOnDemandFormGlobs, useEngineFromLocalSources) {
29
+ constructor(farmDirectory, useEngineFromLocalSources, nightly) {
36
30
  super();
37
31
  this.farmDirectory = void 0;
38
- this.resourcesDirectory = void 0;
39
- this.buildOnDemandFormGlobs = void 0;
32
+ this.nightly = void 0;
40
33
  this.useEngineFromLocalSources = void 0;
34
+ this.nightly = nightly;
41
35
  this.farmDirectory = new _FarmDirectory.FarmDirectory(farmDirectory);
42
- this.resourcesDirectory = new _ResourcesDirectory.ResourcesDirectory(resourcesDirectory);
43
- this.buildOnDemandFormGlobs = new _FormGlobsUtils.FormGlobs(this.farmDirectory, buildOnDemandFormGlobs);
44
36
  this.useEngineFromLocalSources = useEngineFromLocalSources;
45
37
  }
46
38
 
47
39
  async getAllFormMetas() {
48
- await this.buildOnDemandFormGlobs.updateAll();
49
40
  const farmFormJsons = await this.farmDirectory.getAllFormJsonFiles();
50
- const resourcesMetas = await this.resourcesDirectory.getAllMetaFiles();
51
- return [...(await AsyncIterator.from(farmFormJsons).filter(async x => this.isBuildOnDemand(x.gfv)).map(x => `${x.gfv}.metas.json`).toArray()), ...(await AsyncIterator.from(resourcesMetas).filter(async x => !(await this.isBuildOnDemand(x.gfv))).map(x => `${x.gfv}.metas.json`).toArray())].join("\n");
41
+ return [...(await AsyncIterator.from(farmFormJsons).map(x => `${x.gfv}.metas.json`).toArray())].join("\n");
52
42
  }
53
43
 
54
44
  async getFormMeta(gfv) {
55
- await this.buildOnDemandFormGlobs.updateFor(gfv);
56
-
57
- if (await this.isBuildOnDemand(gfv)) {
58
- if (this.useEngineFromLocalSources) {
59
- const localEngineMetaContent = {
60
- engineName: "local",
61
- resourcesHash: "local-hash"
62
- };
63
- return JSON.stringify(localEngineMetaContent, undefined, " ");
64
- }
65
-
66
- const formJsonFile = this.farmDirectory.getFormJsonPath(gfv);
67
- const formInfo = await (0, _ResolveFormInfo.resolveFormInfo)(formJsonFile, gfv, undefined);
68
-
69
- if (formInfo.engineVersion == undefined) {
70
- throw new Error("!!!!");
71
- }
72
-
73
- const engineSources = await (0, _PublishedVersionUtils.resolveEngineVersion)(formInfo.engineVersion);
74
- const formMetaContent = {
75
- engineName: engineSources.type === "LocalEngineSources" ? "local" : _EngineVersionUtils.EngineVersionUtils.engineVersionToName(engineSources.version),
45
+ if (this.useEngineFromLocalSources) {
46
+ const localEngineMetaContent = {
47
+ engineName: "local",
76
48
  resourcesHash: "local-hash"
77
49
  };
50
+ return JSON.stringify(localEngineMetaContent, undefined, " ");
51
+ }
78
52
 
79
- if (formInfo.themes != undefined) {
80
- formMetaContent.themes = formInfo.themes;
81
- }
53
+ const formJsonFile = this.farmDirectory.getFormJsonPath(gfv);
54
+ const formInfo = await (0, _ResolveFormInfo.resolveFormInfo)(formJsonFile, gfv, undefined);
55
+ const engineVersion = this.nightly ? {
56
+ type: "pre",
57
+ preId: "nightly"
58
+ } : formInfo.engineVersion;
82
59
 
83
- return JSON.stringify(formMetaContent, undefined, " ");
84
- } else {
85
- return (0, _fsExtra.readFile)(this.resourcesDirectory.getFormMetasPath(gfv), "utf-8");
60
+ if (engineVersion == undefined) {
61
+ throw new Error("!!!!");
62
+ }
63
+
64
+ const engineSources = await (0, _PublishedVersionUtils.resolveEngineVersion)(engineVersion);
65
+ const formMetaContent = {
66
+ engineName: engineSources.type === "LocalEngineSources" ? "local" : _EngineVersionUtils.EngineVersionUtils.engineVersionToName(engineSources.version),
67
+ resourcesHash: "local-hash"
68
+ };
69
+
70
+ if (formInfo.themes != undefined) {
71
+ formMetaContent.themes = formInfo.themes;
86
72
  }
87
- }
88
73
 
89
- isBuildOnDemand(gfv) {
90
- return this.buildOnDemandFormGlobs.isMatch(gfv);
74
+ return JSON.stringify(formMetaContent, undefined, " ");
91
75
  }
92
76
 
93
77
  }, (_applyDecoratedDescriptor(_class.prototype, "getAllFormMetas", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "getAllFormMetas"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "getFormMeta", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, "getFormMeta"), _class.prototype)), _class));
94
78
  exports.BuildServerFormInfoController = BuildServerFormInfoController;
95
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZFNlcnZlci9SZXNvdXJjZXNDb250cm9sbGVycy9CdWlsZFNlcnZlckZvcm1JbmZvQ29udHJvbGxlci50cyJdLCJuYW1lcyI6WyJCdWlsZFNlcnZlckZvcm1JbmZvQ29udHJvbGxlciIsImh0dHBSZXR1cm4iLCJQbGFpblRleHQiLCJodHRwVHlwZSIsIlN0cmluZyIsIlNpbmdsZXRvbkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImZhcm1EaXJlY3RvcnkiLCJyZXNvdXJjZXNEaXJlY3RvcnkiLCJidWlsZE9uRGVtYW5kRm9ybUdsb2JzIiwidXNlRW5naW5lRnJvbUxvY2FsU291cmNlcyIsIkZhcm1EaXJlY3RvcnkiLCJSZXNvdXJjZXNEaXJlY3RvcnkiLCJGb3JtR2xvYnMiLCJnZXRBbGxGb3JtTWV0YXMiLCJ1cGRhdGVBbGwiLCJmYXJtRm9ybUpzb25zIiwiZ2V0QWxsRm9ybUpzb25GaWxlcyIsInJlc291cmNlc01ldGFzIiwiZ2V0QWxsTWV0YUZpbGVzIiwiQXN5bmNJdGVyYXRvciIsImZyb20iLCJmaWx0ZXIiLCJ4IiwiaXNCdWlsZE9uRGVtYW5kIiwiZ2Z2IiwibWFwIiwidG9BcnJheSIsImpvaW4iLCJnZXRGb3JtTWV0YSIsInVwZGF0ZUZvciIsImxvY2FsRW5naW5lTWV0YUNvbnRlbnQiLCJlbmdpbmVOYW1lIiwicmVzb3VyY2VzSGFzaCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1bmRlZmluZWQiLCJmb3JtSnNvbkZpbGUiLCJnZXRGb3JtSnNvblBhdGgiLCJmb3JtSW5mbyIsImVuZ2luZVZlcnNpb24iLCJFcnJvciIsImVuZ2luZVNvdXJjZXMiLCJmb3JtTWV0YUNvbnRlbnQiLCJ0eXBlIiwiRW5naW5lVmVyc2lvblV0aWxzIiwiZW5naW5lVmVyc2lvblRvTmFtZSIsInZlcnNpb24iLCJ0aGVtZXMiLCJnZXRGb3JtTWV0YXNQYXRoIiwiaXNNYXRjaCJdLCJtYXBwaW5ncyI6Ijs7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LEdBQUcsTUFBTSxpREFBcUJILFFBQVEsQ0FBQ0MsYUFBOUIsQ0FBNUI7QUFDQSxZQUFNRyxlQUFnQyxHQUFHO0FBQ3JDWCxRQUFBQSxVQUFVLEVBQ05VLGFBQWEsQ0FBQ0UsSUFBZCxLQUF1QixvQkFBdkIsR0FDTSxPQUROLEdBRU1DLHVDQUFtQkMsbUJBQW5CLENBQXVDSixhQUFhLENBQUNLLE9BQXJELENBSjJCO0FBS3JDZCxRQUFBQSxhQUFhLEVBQUU7QUFMc0IsT0FBekM7O0FBT0EsVUFBSU0sUUFBUSxDQUFDUyxNQUFULElBQW1CWixTQUF2QixFQUFrQztBQUM5Qk8sUUFBQUEsZUFBZSxDQUFDSyxNQUFoQixHQUF5QlQsUUFBUSxDQUFDUyxNQUFsQztBQUNIOztBQUNELGFBQU9kLElBQUksQ0FBQ0MsU0FBTCxDQUFlUSxlQUFmLEVBQWdDUCxTQUFoQyxFQUEyQyxJQUEzQyxDQUFQO0FBQ0gsS0F6QkQsTUF5Qk87QUFDSCxhQUFPLHVCQUFTLEtBQUs1QixrQkFBTCxDQUF3QnlDLGdCQUF4QixDQUF5Q3hCLEdBQXpDLENBQVQsRUFBd0QsT0FBeEQsQ0FBUDtBQUNIO0FBQ0o7O0FBRU9ELEVBQUFBLGVBQWUsQ0FBQ0MsR0FBRCxFQUFnQztBQUNuRCxXQUFPLEtBQUtoQixzQkFBTCxDQUE0QnlDLE9BQTVCLENBQW9DekIsR0FBcEMsQ0FBUDtBQUNIOztBQXZFa0UsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcImZzLWV4dHJhXCI7XG5cbmltcG9ydCB7IEVuZ2luZVZlcnNpb25VdGlscyB9IGZyb20gXCIuLi8uLi8uLi9CdWlsZFRhc2tzL0VuZ2luZVZlcnNpb25VdGlsc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUVuZ2luZVZlcnNpb24gfSBmcm9tIFwiLi4vLi4vLi4vQnVpbGRUYXNrcy9QdWJsaXNoZWRWZXJzaW9uVXRpbHNcIjtcbmltcG9ydCB7IHJlc29sdmVGb3JtSW5mbyB9IGZyb20gXCIuLi8uLi8uLi9CdWlsZFRhc2tzL1Jlc29sdmVGb3JtSW5mb1wiO1xuaW1wb3J0IHsgRm9ybU1ldGFDb250ZW50IH0gZnJvbSBcIi4uLy4uLy4uL0J1aWxkVGFza3MvV3JpdGVGb3JtTWV0YVwiO1xuaW1wb3J0IHsgRm9ybUdsb2JzIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvRm9ybUdsb2JzVXRpbHNcIjtcbmltcG9ydCB7IGh0dHBHZXQgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvTWV0aG9kc1wiO1xuaW1wb3J0IHsgaHR0cFR5cGUsIGh0dHBVcmxQYXJhbSB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9QYXJhbXNcIjtcbmltcG9ydCB7IGh0dHBSZXR1cm4gfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUmVzdWx0c1wiO1xuaW1wb3J0IHsgU2luZ2xldG9uQ29udHJvbGxlciB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvRXhwcmVzc1dyYXBwZXIvU2luZ2xldG9uQ29udHJvbGxlclwiO1xuXG5pbXBvcnQgeyBGYXJtRGlyZWN0b3J5IH0gZnJvbSBcIi4vRGlyZWN0b3JpZXMvRmFybURpcmVjdG9yeVwiO1xuaW1wb3J0IHsgUmVzb3VyY2VzRGlyZWN0b3J5IH0gZnJvbSBcIi4vRGlyZWN0b3JpZXMvUmVzb3VyY2VzRGlyZWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFNlcnZlckZvcm1JbmZvQ29udHJvbGxlciBleHRlbmRzIFNpbmdsZXRvbkNvbnRyb2xsZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmFybURpcmVjdG9yeTogRmFybURpcmVjdG9yeTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlc0RpcmVjdG9yeTogUmVzb3VyY2VzRGlyZWN0b3J5O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYnVpbGRPbkRlbWFuZEZvcm1HbG9iczogRm9ybUdsb2JzO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlRW5naW5lRnJvbUxvY2FsU291cmNlczogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgZmFybURpcmVjdG9yeTogc3RyaW5nLFxuICAgICAgICByZXNvdXJjZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgYnVpbGRPbkRlbWFuZEZvcm1HbG9iczogc3RyaW5nW10sXG4gICAgICAgIHVzZUVuZ2luZUZyb21Mb2NhbFNvdXJjZXM6IGJvb2xlYW5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5ID0gbmV3IEZhcm1EaXJlY3RvcnkoZmFybURpcmVjdG9yeSk7XG4gICAgICAgIHRoaXMucmVzb3VyY2VzRGlyZWN0b3J5ID0gbmV3IFJlc291cmNlc0RpcmVjdG9yeShyZXNvdXJjZXNEaXJlY3RvcnkpO1xuICAgICAgICB0aGlzLmJ1aWxkT25EZW1hbmRGb3JtR2xvYnMgPSBuZXcgRm9ybUdsb2JzKHRoaXMuZmFybURpcmVjdG9yeSwgYnVpbGRPbkRlbWFuZEZvcm1HbG9icyk7XG4gICAgICAgIHRoaXMudXNlRW5naW5lRnJvbUxvY2FsU291cmNlcyA9IHVzZUVuZ2luZUZyb21Mb2NhbFNvdXJjZXM7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbWV0YXNcIiwgaHR0cFJldHVybi5QbGFpblRleHQpXG4gICAgcHVibGljIGFzeW5jIGdldEFsbEZvcm1NZXRhcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBhd2FpdCB0aGlzLmJ1aWxkT25EZW1hbmRGb3JtR2xvYnMudXBkYXRlQWxsKCk7XG4gICAgICAgIGNvbnN0IGZhcm1Gb3JtSnNvbnMgPSBhd2FpdCB0aGlzLmZhcm1EaXJlY3RvcnkuZ2V0QWxsRm9ybUpzb25GaWxlcygpO1xuICAgICAgICBjb25zdCByZXNvdXJjZXNNZXRhcyA9IGF3YWl0IHRoaXMucmVzb3VyY2VzRGlyZWN0b3J5LmdldEFsbE1ldGFGaWxlcygpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4uKGF3YWl0IEFzeW5jSXRlcmF0b3IuZnJvbShmYXJtRm9ybUpzb25zKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoYXN5bmMgeCA9PiB0aGlzLmlzQnVpbGRPbkRlbWFuZCh4LmdmdikpXG4gICAgICAgICAgICAgICAgLm1hcCh4ID0+IGAke3guZ2Z2fS5tZXRhcy5qc29uYClcbiAgICAgICAgICAgICAgICAudG9BcnJheSgpKSxcbiAgICAgICAgICAgIC4uLihhd2FpdCBBc3luY0l0ZXJhdG9yLmZyb20ocmVzb3VyY2VzTWV0YXMpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihhc3luYyB4ID0+ICEoYXdhaXQgdGhpcy5pc0J1aWxkT25EZW1hbmQoeC5nZnYpKSlcbiAgICAgICAgICAgICAgICAubWFwKHggPT4gYCR7eC5nZnZ9Lm1ldGFzLmpzb25gKVxuICAgICAgICAgICAgICAgIC50b0FycmF5KCkpLFxuICAgICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbWV0YXMvOmdmdi5tZXRhcy5qc29uXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0LCBodHRwVXJsUGFyYW0oXCJnZnZcIiwgaHR0cFR5cGUuU3RyaW5nKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0Rm9ybU1ldGEoZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBhd2FpdCB0aGlzLmJ1aWxkT25EZW1hbmRGb3JtR2xvYnMudXBkYXRlRm9yKGdmdik7XG4gICAgICAgIGlmIChhd2FpdCB0aGlzLmlzQnVpbGRPbkRlbWFuZChnZnYpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51c2VFbmdpbmVGcm9tTG9jYWxTb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxFbmdpbmVNZXRhQ29udGVudDogRm9ybU1ldGFDb250ZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICBlbmdpbmVOYW1lOiBcImxvY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlc0hhc2g6IFwibG9jYWwtaGFzaFwiLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGxvY2FsRW5naW5lTWV0YUNvbnRlbnQsIHVuZGVmaW5lZCwgXCIgIFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZvcm1Kc29uRmlsZSA9IHRoaXMuZmFybURpcmVjdG9yeS5nZXRGb3JtSnNvblBhdGgoZ2Z2KTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1JbmZvID0gYXdhaXQgcmVzb2x2ZUZvcm1JbmZvKGZvcm1Kc29uRmlsZSwgZ2Z2LCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgaWYgKGZvcm1JbmZvLmVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiISEhIVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVNvdXJjZXMgPSBhd2FpdCByZXNvbHZlRW5naW5lVmVyc2lvbihmb3JtSW5mby5lbmdpbmVWZXJzaW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1NZXRhQ29udGVudDogRm9ybU1ldGFDb250ZW50ID0ge1xuICAgICAgICAgICAgICAgIGVuZ2luZU5hbWU6XG4gICAgICAgICAgICAgICAgICAgIGVuZ2luZVNvdXJjZXMudHlwZSA9PT0gXCJMb2NhbEVuZ2luZVNvdXJjZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcImxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogRW5naW5lVmVyc2lvblV0aWxzLmVuZ2luZVZlcnNpb25Ub05hbWUoZW5naW5lU291cmNlcy52ZXJzaW9uKSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXNIYXNoOiBcImxvY2FsLWhhc2hcIixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZm9ybUluZm8udGhlbWVzICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGZvcm1NZXRhQ29udGVudC50aGVtZXMgPSBmb3JtSW5mby50aGVtZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZm9ybU1ldGFDb250ZW50LCB1bmRlZmluZWQsIFwiICBcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZpbGUodGhpcy5yZXNvdXJjZXNEaXJlY3RvcnkuZ2V0Rm9ybU1ldGFzUGF0aChnZnYpLCBcInV0Zi04XCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0J1aWxkT25EZW1hbmQoZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRPbkRlbWFuZEZvcm1HbG9icy5pc01hdGNoKGdmdik7XG4gICAgfVxufVxuIl19
79
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZFNlcnZlci9SZXNvdXJjZXNDb250cm9sbGVycy9CdWlsZFNlcnZlckZvcm1JbmZvQ29udHJvbGxlci50cyJdLCJuYW1lcyI6WyJCdWlsZFNlcnZlckZvcm1JbmZvQ29udHJvbGxlciIsImh0dHBSZXR1cm4iLCJQbGFpblRleHQiLCJodHRwVHlwZSIsIlN0cmluZyIsIlNpbmdsZXRvbkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImZhcm1EaXJlY3RvcnkiLCJ1c2VFbmdpbmVGcm9tTG9jYWxTb3VyY2VzIiwibmlnaHRseSIsIkZhcm1EaXJlY3RvcnkiLCJnZXRBbGxGb3JtTWV0YXMiLCJmYXJtRm9ybUpzb25zIiwiZ2V0QWxsRm9ybUpzb25GaWxlcyIsIkFzeW5jSXRlcmF0b3IiLCJmcm9tIiwibWFwIiwieCIsImdmdiIsInRvQXJyYXkiLCJqb2luIiwiZ2V0Rm9ybU1ldGEiLCJsb2NhbEVuZ2luZU1ldGFDb250ZW50IiwiZW5naW5lTmFtZSIsInJlc291cmNlc0hhc2giLCJKU09OIiwic3RyaW5naWZ5IiwidW5kZWZpbmVkIiwiZm9ybUpzb25GaWxlIiwiZ2V0Rm9ybUpzb25QYXRoIiwiZm9ybUluZm8iLCJlbmdpbmVWZXJzaW9uIiwidHlwZSIsInByZUlkIiwiRXJyb3IiLCJlbmdpbmVTb3VyY2VzIiwiZm9ybU1ldGFDb250ZW50IiwiRW5naW5lVmVyc2lvblV0aWxzIiwiZW5naW5lVmVyc2lvblRvTmFtZSIsInZlcnNpb24iLCJ0aGVtZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7Ozs7O0lBRWFBLDZCLFdBWVIsc0JBQVEsUUFBUixFQUFrQkMsb0JBQVdDLFNBQTdCLEMsVUFVQSxzQkFBUSx3QkFBUixFQUFrQ0Qsb0JBQVdDLFNBQTdDLEVBQXdELDBCQUFhLEtBQWIsRUFBb0JDLGlCQUFTQyxNQUE3QixDQUF4RCxDLFlBdEJFLE1BQU1KLDZCQUFOLFNBQTRDSyx3Q0FBNUMsQ0FBZ0U7QUFLNURDLEVBQUFBLFdBQVcsQ0FBQ0MsYUFBRCxFQUF3QkMseUJBQXhCLEVBQTREQyxPQUE1RCxFQUE4RTtBQUM1RjtBQUQ0RixTQUovRUYsYUFJK0U7QUFBQSxTQUgvRUUsT0FHK0U7QUFBQSxTQUYvRUQseUJBRStFO0FBRTVGLFNBQUtDLE9BQUwsR0FBZUEsT0FBZjtBQUNBLFNBQUtGLGFBQUwsR0FBcUIsSUFBSUcsNEJBQUosQ0FBa0JILGFBQWxCLENBQXJCO0FBQ0EsU0FBS0MseUJBQUwsR0FBaUNBLHlCQUFqQztBQUNIOztBQUcyQixRQUFmRyxlQUFlLEdBQW9CO0FBQzVDLFVBQU1DLGFBQWEsR0FBRyxNQUFNLEtBQUtMLGFBQUwsQ0FBbUJNLG1CQUFuQixFQUE1QjtBQUNBLFdBQU8sQ0FDSCxJQUFJLE1BQU1DLGFBQWEsQ0FBQ0MsSUFBZCxDQUFtQkgsYUFBbkIsRUFDTEksR0FESyxDQUNEQyxDQUFDLElBQUssR0FBRUEsQ0FBQyxDQUFDQyxHQUFJLGFBRGIsRUFFTEMsT0FGSyxFQUFWLENBREcsRUFJTEMsSUFKSyxDQUlBLElBSkEsQ0FBUDtBQUtIOztBQUd1QixRQUFYQyxXQUFXLENBQUNILEdBQUQsRUFBK0I7QUFDbkQsUUFBSSxLQUFLVix5QkFBVCxFQUFvQztBQUNoQyxZQUFNYyxzQkFBdUMsR0FBRztBQUM1Q0MsUUFBQUEsVUFBVSxFQUFFLE9BRGdDO0FBRTVDQyxRQUFBQSxhQUFhLEVBQUU7QUFGNkIsT0FBaEQ7QUFJQSxhQUFPQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUosc0JBQWYsRUFBdUNLLFNBQXZDLEVBQWtELElBQWxELENBQVA7QUFDSDs7QUFDRCxVQUFNQyxZQUFZLEdBQUcsS0FBS3JCLGFBQUwsQ0FBbUJzQixlQUFuQixDQUFtQ1gsR0FBbkMsQ0FBckI7QUFDQSxVQUFNWSxRQUFRLEdBQUcsTUFBTSxzQ0FBZ0JGLFlBQWhCLEVBQThCVixHQUE5QixFQUFtQ1MsU0FBbkMsQ0FBdkI7QUFDQSxVQUFNSSxhQUEyQyxHQUFHLEtBQUt0QixPQUFMLEdBQzlDO0FBQUV1QixNQUFBQSxJQUFJLEVBQUUsS0FBUjtBQUFlQyxNQUFBQSxLQUFLLEVBQUU7QUFBdEIsS0FEOEMsR0FFOUNILFFBQVEsQ0FBQ0MsYUFGZjs7QUFHQSxRQUFJQSxhQUFhLElBQUlKLFNBQXJCLEVBQWdDO0FBQzVCLFlBQU0sSUFBSU8sS0FBSixDQUFVLE1BQVYsQ0FBTjtBQUNIOztBQUNELFVBQU1DLGFBQWEsR0FBRyxNQUFNLGlEQUFxQkosYUFBckIsQ0FBNUI7QUFDQSxVQUFNSyxlQUFnQyxHQUFHO0FBQ3JDYixNQUFBQSxVQUFVLEVBQ05ZLGFBQWEsQ0FBQ0gsSUFBZCxLQUF1QixvQkFBdkIsR0FDTSxPQUROLEdBRU1LLHVDQUFtQkMsbUJBQW5CLENBQXVDSCxhQUFhLENBQUNJLE9BQXJELENBSjJCO0FBS3JDZixNQUFBQSxhQUFhLEVBQUU7QUFMc0IsS0FBekM7O0FBT0EsUUFBSU0sUUFBUSxDQUFDVSxNQUFULElBQW1CYixTQUF2QixFQUFrQztBQUM5QlMsTUFBQUEsZUFBZSxDQUFDSSxNQUFoQixHQUF5QlYsUUFBUSxDQUFDVSxNQUFsQztBQUNIOztBQUNELFdBQU9mLElBQUksQ0FBQ0MsU0FBTCxDQUFlVSxlQUFmLEVBQWdDVCxTQUFoQyxFQUEyQyxJQUEzQyxDQUFQO0FBQ0g7O0FBbkRrRSxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW5naW5lVmVyc2lvblV0aWxzIH0gZnJvbSBcIi4uLy4uLy4uL0J1aWxkVGFza3MvRW5naW5lVmVyc2lvblV0aWxzXCI7XG5pbXBvcnQgeyByZXNvbHZlRW5naW5lVmVyc2lvbiB9IGZyb20gXCIuLi8uLi8uLi9CdWlsZFRhc2tzL1B1Ymxpc2hlZFZlcnNpb25VdGlsc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUZvcm1JbmZvIH0gZnJvbSBcIi4uLy4uLy4uL0J1aWxkVGFza3MvUmVzb2x2ZUZvcm1JbmZvXCI7XG5pbXBvcnQgeyBGb3JtTWV0YUNvbnRlbnQgfSBmcm9tIFwiLi4vLi4vLi4vQnVpbGRUYXNrcy9Xcml0ZUZvcm1NZXRhXCI7XG5pbXBvcnQgeyBodHRwR2V0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL01ldGhvZHNcIjtcbmltcG9ydCB7IGh0dHBUeXBlLCBodHRwVXJsUGFyYW0gfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUGFyYW1zXCI7XG5pbXBvcnQgeyBodHRwUmV0dXJuIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1Jlc3VsdHNcIjtcbmltcG9ydCB7IFNpbmdsZXRvbkNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0V4cHJlc3NXcmFwcGVyL1NpbmdsZXRvbkNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IENhbmR5VmVyc2lvblNwZWMgfSBmcm9tIFwiLi4vLi4vLi4vQnVpbGRUYXNrcy9WZXJzaW9uXCI7XG5cbmltcG9ydCB7IEZhcm1EaXJlY3RvcnkgfSBmcm9tIFwiLi9EaXJlY3Rvcmllcy9GYXJtRGlyZWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFNlcnZlckZvcm1JbmZvQ29udHJvbGxlciBleHRlbmRzIFNpbmdsZXRvbkNvbnRyb2xsZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmFybURpcmVjdG9yeTogRmFybURpcmVjdG9yeTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5pZ2h0bHk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VFbmdpbmVGcm9tTG9jYWxTb3VyY2VzOiBib29sZWFuO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZhcm1EaXJlY3Rvcnk6IHN0cmluZywgdXNlRW5naW5lRnJvbUxvY2FsU291cmNlczogYm9vbGVhbiwgbmlnaHRseTogYm9vbGVhbikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm5pZ2h0bHkgPSBuaWdodGx5O1xuICAgICAgICB0aGlzLmZhcm1EaXJlY3RvcnkgPSBuZXcgRmFybURpcmVjdG9yeShmYXJtRGlyZWN0b3J5KTtcbiAgICAgICAgdGhpcy51c2VFbmdpbmVGcm9tTG9jYWxTb3VyY2VzID0gdXNlRW5naW5lRnJvbUxvY2FsU291cmNlcztcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9tZXRhc1wiLCBodHRwUmV0dXJuLlBsYWluVGV4dClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsRm9ybU1ldGFzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGZhcm1Gb3JtSnNvbnMgPSBhd2FpdCB0aGlzLmZhcm1EaXJlY3RvcnkuZ2V0QWxsRm9ybUpzb25GaWxlcygpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4uKGF3YWl0IEFzeW5jSXRlcmF0b3IuZnJvbShmYXJtRm9ybUpzb25zKVxuICAgICAgICAgICAgICAgIC5tYXAoeCA9PiBgJHt4Lmdmdn0ubWV0YXMuanNvbmApXG4gICAgICAgICAgICAgICAgLnRvQXJyYXkoKSksXG4gICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9tZXRhcy86Z2Z2Lm1ldGFzLmpzb25cIiwgaHR0cFJldHVybi5QbGFpblRleHQsIGh0dHBVcmxQYXJhbShcImdmdlwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRGb3JtTWV0YShnZnY6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICh0aGlzLnVzZUVuZ2luZUZyb21Mb2NhbFNvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsRW5naW5lTWV0YUNvbnRlbnQ6IEZvcm1NZXRhQ29udGVudCA9IHtcbiAgICAgICAgICAgICAgICBlbmdpbmVOYW1lOiBcImxvY2FsXCIsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzSGFzaDogXCJsb2NhbC1oYXNoXCIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGxvY2FsRW5naW5lTWV0YUNvbnRlbnQsIHVuZGVmaW5lZCwgXCIgIFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtSnNvbkZpbGUgPSB0aGlzLmZhcm1EaXJlY3RvcnkuZ2V0Rm9ybUpzb25QYXRoKGdmdik7XG4gICAgICAgIGNvbnN0IGZvcm1JbmZvID0gYXdhaXQgcmVzb2x2ZUZvcm1JbmZvKGZvcm1Kc29uRmlsZSwgZ2Z2LCB1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCBlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBDYW5keVZlcnNpb25TcGVjID0gdGhpcy5uaWdodGx5XG4gICAgICAgICAgICA/IHsgdHlwZTogXCJwcmVcIiwgcHJlSWQ6IFwibmlnaHRseVwiIH1cbiAgICAgICAgICAgIDogZm9ybUluZm8uZW5naW5lVmVyc2lvbjtcbiAgICAgICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIhISEhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZ2luZVNvdXJjZXMgPSBhd2FpdCByZXNvbHZlRW5naW5lVmVyc2lvbihlbmdpbmVWZXJzaW9uKTtcbiAgICAgICAgY29uc3QgZm9ybU1ldGFDb250ZW50OiBGb3JtTWV0YUNvbnRlbnQgPSB7XG4gICAgICAgICAgICBlbmdpbmVOYW1lOlxuICAgICAgICAgICAgICAgIGVuZ2luZVNvdXJjZXMudHlwZSA9PT0gXCJMb2NhbEVuZ2luZVNvdXJjZXNcIlxuICAgICAgICAgICAgICAgICAgICA/IFwibG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICA6IEVuZ2luZVZlcnNpb25VdGlscy5lbmdpbmVWZXJzaW9uVG9OYW1lKGVuZ2luZVNvdXJjZXMudmVyc2lvbiksXG4gICAgICAgICAgICByZXNvdXJjZXNIYXNoOiBcImxvY2FsLWhhc2hcIixcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGZvcm1JbmZvLnRoZW1lcyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvcm1NZXRhQ29udGVudC50aGVtZXMgPSBmb3JtSW5mby50aGVtZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGZvcm1NZXRhQ29udGVudCwgdW5kZWZpbmVkLCBcIiAgXCIpO1xuICAgIH1cbn1cbiJdfQ==
@@ -35,7 +35,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
35
35
 
36
36
  class BuildFormDevServer {
37
37
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
- constructor(port, farmDirectory, gfv, candyModulesDirectory, hlFarmDirectoryPath, useGeneratorFromLocalSources, engineDirectory, buildDebugOnly, skipCodeReformatting) {
38
+ constructor(port, farmDirectory, gfv, candyModulesDirectory, hlFarmDirectoryPath, useGeneratorFromLocalSources, engineDirectory, buildDebugOnly, skipCodeReformatting, nightly) {
39
39
  this.port = void 0;
40
40
  this.farmDirectory = void 0;
41
41
  this.gfv = void 0;
@@ -46,6 +46,7 @@ class BuildFormDevServer {
46
46
  this.webpackDevServerStarted = false;
47
47
  this.useGeneratorFromLocalSources = void 0;
48
48
  this.engineDirectory = void 0;
49
+ this.nightly = void 0;
49
50
  this.buildDebugOnly = void 0;
50
51
  this.skipCodeReformatting = void 0;
51
52
  this.webpackHybridFileSystem = void 0;
@@ -59,6 +60,7 @@ class BuildFormDevServer {
59
60
  this.engineDirectory = engineDirectory;
60
61
  this.buildDebugOnly = buildDebugOnly;
61
62
  this.skipCodeReformatting = skipCodeReformatting;
63
+ this.nightly = nightly;
62
64
  }
63
65
 
64
66
  start() {
@@ -70,7 +72,7 @@ class BuildFormDevServer {
70
72
  const formDirPath = _path.default.join(this.farmDirectory, "forms", this.gfv);
71
73
 
72
74
  this.webpackHybridFileSystem = new _WebpackHybridFileSystem.WebpackHybridFileSystem(_path.default.join(formDirPath, "form"));
73
- this.generateChain = _Observe.Observe.file(_path.default.join(formDirPath, "form.json")).transform(formJsonFile => (0, _ResolveFormInfo.resolveFormInfo)(formJsonFile, formDirPath, undefined)).transform(async x => {
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 => {
74
76
  if (this.useGeneratorFromLocalSources) {
75
77
  return { ...x,
76
78
  generatorSource: (0, _PublishedVersionUtils.resolveLocalGeneratorSource)(this.engineDirectory),
@@ -149,19 +151,16 @@ class BuildFormDevServer {
149
151
  await (0, _AsyncUtils.delay)(500);
150
152
  }
151
153
 
152
- return (await (0, _nodeFetch.default)(`http://localhost:${this.port}/${filename}`, {
154
+ const response = await (0, _nodeFetch.default)(`http://localhost:${this.port}/${filename}`, {
153
155
  method: "GET"
154
- })).body;
155
- }
156
+ });
156
157
 
157
- async getFileAsBuffer(filename) {
158
- while (!this.webpackDevServerStarted) {
159
- await (0, _AsyncUtils.delay)(500);
158
+ if (response.status != 200) {
159
+ const textResponse = await response.text();
160
+ throw new Error(textResponse);
160
161
  }
161
162
 
162
- return (await (0, _nodeFetch.default)(`http://localhost:${this.port}/${filename}`, {
163
- method: "GET"
164
- })).buffer();
163
+ return response.body;
165
164
  }
166
165
 
167
166
  formatError(e) {
@@ -175,4 +174,4 @@ class BuildFormDevServer {
175
174
  }
176
175
 
177
176
  exports.BuildFormDevServer = BuildFormDevServer;
178
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZFNlcnZlci9SZXNvdXJjZXNDb250cm9sbGVycy9EZXZTZXJ2ZXJzL0J1aWxkRm9ybURldlNlcnZlci50cyJdLCJuYW1lcyI6WyJCdWlsZEZvcm1EZXZTZXJ2ZXIiLCJjb25zdHJ1Y3RvciIsInBvcnQiLCJmYXJtRGlyZWN0b3J5IiwiZ2Z2IiwiY2FuZHlNb2R1bGVzRGlyZWN0b3J5IiwiaGxGYXJtRGlyZWN0b3J5UGF0aCIsInVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMiLCJlbmdpbmVEaXJlY3RvcnkiLCJidWlsZERlYnVnT25seSIsInNraXBDb2RlUmVmb3JtYXR0aW5nIiwic3RhcnRQYXJhbGxlbExpbWl0IiwiZ2VuZXJhdGVDaGFpbiIsIndlYnBhY2tEZXZTZXJ2ZXJTdGFydGVkIiwid2VicGFja0h5YnJpZEZpbGVTeXN0ZW0iLCJzdGFydCIsInVuZGVmaW5lZCIsImZvcm1EaXJQYXRoIiwicGF0aCIsImpvaW4iLCJXZWJwYWNrSHlicmlkRmlsZVN5c3RlbSIsIk9ic2VydmUiLCJmaWxlIiwidHJhbnNmb3JtIiwiZm9ybUpzb25GaWxlIiwieCIsImdlbmVyYXRvclNvdXJjZSIsImVuZ2luZVNvdXJjZSIsImdlbmVyYXRvclZlcnNpb24iLCJFcnJvciIsImVuZ2luZVZlcnNpb24iLCJhdHRhY2giLCJmaSIsInkiLCJnZW5lcmF0b3IiLCJmaWxlcyIsImZvcm1Tb3VyY2VzUGF0aCIsImRvIiwicmVzb3VyY2VzSGFzaCIsImUiLCJmb3JtRW50cnlQb2ludFBhdGgiLCJ3cml0ZUJhdGNoIiwiZm9ybWF0RXJyb3IiLCJvYnNlcnZlIiwiZ2V0RmlsZSIsImZpbGVuYW1lIiwibWV0aG9kIiwidGV4dCIsImdldEdlbmVyYXRlZEZpbGVBc1N0cmVhbSIsImZpbGVOYW1lIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWFkRmlsZSIsImVycm9yIiwiZGF0YSIsIlJlYWRhYmxlIiwiZnJvbSIsImdldEZpbGVBc1N0cmVhbSIsImJvZHkiLCJnZXRGaWxlQXNCdWZmZXIiLCJidWZmZXIiLCJzdGFjayJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUVBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQU1BOztBQUNBOztBQUdBOztBQUVBOztBQUNBOztBQUNBOzs7O0FBRU8sTUFBTUEsa0JBQU4sQ0FBeUI7QUFPNUI7QUFTT0MsRUFBQUEsV0FBVyxDQUNkQyxJQURjLEVBRWRDLGFBRmMsRUFHZEMsR0FIYyxFQUlkQyxxQkFKYyxFQUtkQyxtQkFMYyxFQU1kQyw0QkFOYyxFQU9kQyxlQVBjLEVBUWRDLGNBUmMsRUFTZEMsb0JBVGMsRUFVaEI7QUFBQSxTQXpCZVIsSUF5QmY7QUFBQSxTQXhCZUMsYUF3QmY7QUFBQSxTQXZCZUMsR0F1QmY7QUFBQSxTQXRCZUMscUJBc0JmO0FBQUEsU0FyQmVDLG1CQXFCZjtBQUFBLFNBcEJlSyxrQkFvQmY7QUFBQSxTQWxCTUMsYUFrQk47QUFBQSxTQWpCTUMsdUJBaUJOLEdBakJnQyxLQWlCaEM7QUFBQSxTQWhCZU4sNEJBZ0JmO0FBQUEsU0FmZUMsZUFlZjtBQUFBLFNBZGVDLGNBY2Y7QUFBQSxTQWJlQyxvQkFhZjtBQUFBLFNBWk1JLHVCQVlOO0FBQ0UsU0FBS1osSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0MsYUFBTCxHQUFxQkEsYUFBckI7QUFDQSxTQUFLQyxHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLQyxxQkFBTCxHQUE2QkEscUJBQTdCO0FBQ0EsU0FBS0MsbUJBQUwsR0FBMkJBLG1CQUEzQjtBQUNBLFNBQUtLLGtCQUFMLEdBQTBCLHFCQUFPLENBQVAsQ0FBMUI7QUFDQSxTQUFLSiw0QkFBTCxHQUFvQ0EsNEJBQXBDO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QkEsZUFBdkI7QUFDQSxTQUFLQyxjQUFMLEdBQXNCQSxjQUF0QjtBQUNBLFNBQUtDLG9CQUFMLEdBQTRCQSxvQkFBNUI7QUFDSDs7QUFFTUssRUFBQUEsS0FB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QUNIOztBQXRLMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tIFwic3RyZWFtXCI7XG5cbmltcG9ydCBmZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiO1xuaW1wb3J0IHBMaW1pdCwgeyBMaW1pdCB9IGZyb20gXCJwLWxpbWl0XCI7XG5cbmltcG9ydCB7IGdlbmVyYXRlRm9ybSB9IGZyb20gXCIuLi8uLi8uLi8uLi9CdWlsZFRhc2tzL0Zvcm0vR2VuZXJhdGVGb3JtXCI7XG5pbXBvcnQgeyBnZW5lcmF0b3JGYWN0b3J5LCBnZXRHZW5lcmF0b3JTb3VyY2VLZXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQnVpbGRUYXNrcy9HZW5lcmF0b3IvQWNxdWlyZUZvcm1HZW5lcmF0b3JcIjtcbmltcG9ydCB7XG4gICAgcmVzb2x2ZUVuZ2luZVZlcnNpb24sXG4gICAgcmVzb2x2ZUdlbmVyYXRvclZlcnNpb24sXG4gICAgcmVzb2x2ZUxvY2FsRW5naW5lU291cmNlLFxuICAgIHJlc29sdmVMb2NhbEdlbmVyYXRvclNvdXJjZSxcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL0J1aWxkVGFza3MvUHVibGlzaGVkVmVyc2lvblV0aWxzXCI7XG5pbXBvcnQgeyByZXNvbHZlRm9ybUluZm8gfSBmcm9tIFwiLi4vLi4vLi4vLi4vQnVpbGRUYXNrcy9SZXNvbHZlRm9ybUluZm9cIjtcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9Bc3luY1V0aWxzXCI7XG5pbXBvcnQgeyBSZWFzb25PckVycm9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbnMvRXJyb3JVbnR5cGVkXCI7XG5pbXBvcnQgeyBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbnMvVGFza3NDb3JlL0NoYWluYWJsZVZhbHVlUHJvZHVjZXJcIjtcbmltcG9ydCB7IE9ic2VydmUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9ucy9UYXNrc0NvcmUvT2JzZXJ2ZVwiO1xuXG5pbXBvcnQgeyBnZXRSZXBvcnRHZW5lcmF0b3JFcnJvclRvUGFnZUJvZHlTY3JpcHQgfSBmcm9tIFwiLi9SZXBvcnRHZW5lcmF0b3JFcnJvclRvUGFnZUJvZHlcIjtcbmltcG9ydCB7IHJ1bkZvcm1Db21waWxhdGlvblZpYVdlYnBhY2tEZXZTZXJ2ZXIgfSBmcm9tIFwiLi9SdW5Gb3JtQ29tcGlsYXRpb25WaWFXZWJwYWNrRGV2U2VydmVyXCI7XG5pbXBvcnQgeyBXZWJwYWNrSHlicmlkRmlsZVN5c3RlbSB9IGZyb20gXCIuL1dlYnBhY2tJbk1lbW9yeVV0aWxzL1dlYnBhY2tIeWJyaWRGaWxlU3lzdGVtXCI7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZEZvcm1EZXZTZXJ2ZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmFybURpcmVjdG9yeTogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2Z2OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYW5keU1vZHVsZXNEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0UGFyYWxsZWxMaW1pdDogTGltaXQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcml2YXRlIGdlbmVyYXRlQ2hhaW4/OiBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPGFueT47XG4gICAgcHJpdmF0ZSB3ZWJwYWNrRGV2U2VydmVyU3RhcnRlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlczogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVuZ2luZURpcmVjdG9yeTogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYnVpbGREZWJ1Z09ubHk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBza2lwQ29kZVJlZm9ybWF0dGluZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHdlYnBhY2tIeWJyaWRGaWxlU3lzdGVtPzogV2VicGFja0h5YnJpZEZpbGVTeXN0ZW07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHBvcnQ6IG51bWJlcixcbiAgICAgICAgZmFybURpcmVjdG9yeTogc3RyaW5nLFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgY2FuZHlNb2R1bGVzRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZyxcbiAgICAgICAgdXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlczogYm9vbGVhbixcbiAgICAgICAgZW5naW5lRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGJ1aWxkRGVidWdPbmx5OiBib29sZWFuLFxuICAgICAgICBza2lwQ29kZVJlZm9ybWF0dGluZzogYm9vbGVhblxuICAgICkge1xuICAgICAgICB0aGlzLnBvcnQgPSBwb3J0O1xuICAgICAgICB0aGlzLmZhcm1EaXJlY3RvcnkgPSBmYXJtRGlyZWN0b3J5O1xuICAgICAgICB0aGlzLmdmdiA9IGdmdjtcbiAgICAgICAgdGhpcy5jYW5keU1vZHVsZXNEaXJlY3RvcnkgPSBjYW5keU1vZHVsZXNEaXJlY3Rvcnk7XG4gICAgICAgIHRoaXMuaGxGYXJtRGlyZWN0b3J5UGF0aCA9IGhsRmFybURpcmVjdG9yeVBhdGg7XG4gICAgICAgIHRoaXMuc3RhcnRQYXJhbGxlbExpbWl0ID0gcExpbWl0KDEpO1xuICAgICAgICB0aGlzLnVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMgPSB1c2VHZW5lcmF0b3JGcm9tTG9jYWxTb3VyY2VzO1xuICAgICAgICB0aGlzLmVuZ2luZURpcmVjdG9yeSA9IGVuZ2luZURpcmVjdG9yeTtcbiAgICAgICAgdGhpcy5idWlsZERlYnVnT25seSA9IGJ1aWxkRGVidWdPbmx5O1xuICAgICAgICB0aGlzLnNraXBDb2RlUmVmb3JtYXR0aW5nID0gc2tpcENvZGVSZWZvcm1hdHRpbmc7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFBhcmFsbGVsTGltaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2VuZXJhdGVDaGFpbiAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmb3JtRGlyUGF0aCA9IHBhdGguam9pbih0aGlzLmZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiwgdGhpcy5nZnYpO1xuICAgICAgICAgICAgdGhpcy53ZWJwYWNrSHlicmlkRmlsZVN5c3RlbSA9IG5ldyBXZWJwYWNrSHlicmlkRmlsZVN5c3RlbShwYXRoLmpvaW4oZm9ybURpclBhdGgsIFwiZm9ybVwiKSk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDaGFpbiA9IE9ic2VydmUuZmlsZShwYXRoLmpvaW4oZm9ybURpclBhdGgsIFwiZm9ybS5qc29uXCIpKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oZm9ybUpzb25GaWxlID0+IHJlc29sdmVGb3JtSW5mbyhmb3JtSnNvbkZpbGUsIGZvcm1EaXJQYXRoLCB1bmRlZmluZWQpKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgeCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JTb3VyY2U6IHJlc29sdmVMb2NhbEdlbmVyYXRvclNvdXJjZSh0aGlzLmVuZ2luZURpcmVjdG9yeSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lU291cmNlOiByZXNvbHZlTG9jYWxFbmdpbmVTb3VyY2UodGhpcy5lbmdpbmVEaXJlY3RvcnkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LmdlbmVyYXRvclZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2VuZXJhdG9yVmVyc2lvbiBpcyBubyBkZWZpbmVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHguZW5naW5lVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbmdpbmVWZXJzaW9uIGlzIG5vIGRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLngsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yU291cmNlOiBhd2FpdCByZXNvbHZlR2VuZXJhdG9yVmVyc2lvbih4LmdlbmVyYXRvclZlcnNpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZVNvdXJjZTogYXdhaXQgcmVzb2x2ZUVuZ2luZVZlcnNpb24oeC5lbmdpbmVWZXJzaW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRhY2goXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IGdlbmVyYXRvckZhY3RvcnkoZmkuZ2VuZXJhdG9yU291cmNlLCB0aGlzLmNhbmR5TW9kdWxlc0RpcmVjdG9yeSwgZmFsc2UsIHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIChmaSwgeSkgPT4gKHsgLi4uZmksIGdlbmVyYXRvcjogeSB9KSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgZmkgPT4gZ2V0R2VuZXJhdG9yU291cmNlS2V5KGZpLmdlbmVyYXRvclNvdXJjZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybVNvdXJjZXNQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIuLi8uLi9jb250cm9scy8qKi9nZW5lcmF0b3IvKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2hlbWFzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3VnYXIvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250cm9scy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF1dG9jYWxjLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaGVscGVycy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInZhbGlkYXRpb25zLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibG9jYWxpemF0aW9uLyoqLypcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBnZW5lcmF0ZUZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybVNvdXJjZXNQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhsRmFybURpcmVjdG9yeVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkuZ2VuZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBDb2RlUmVmb3JtYXR0aW5nOiB0aGlzLnNraXBDb2RlUmVmb3JtYXR0aW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNIYXNoOiBcImxvY2FsLWhhc2hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2VicGFja0h5YnJpZEZpbGVTeXN0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1FbnRyeVBvaW50UGF0aCA9IHBhdGguam9pbih0aGlzLmZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiwgdGhpcy5nZnYsIFwiZm9ybVwiLCBcIndlYi5qc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMud2VicGFja0h5YnJpZEZpbGVTeXN0ZW0/LndyaXRlQmF0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtRW50cnlQb2ludFBhdGhdOiBnZXRSZXBvcnRHZW5lcmF0b3JFcnJvclRvUGFnZUJvZHlTY3JpcHQodGhpcy5mb3JtYXRFcnJvcihlKSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICAgICAgYXdhaXQgcnVuRm9ybUNvbXBpbGF0aW9uVmlhV2VicGFja0RldlNlcnZlcihcbiAgICAgICAgICAgICAgICB0aGlzLmdmdixcbiAgICAgICAgICAgICAgICB0aGlzLmZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKHRoaXMuZmFybURpcmVjdG9yeSwgXCJyZXNcIiksXG4gICAgICAgICAgICAgICAgXCJsb2NhbC1oYXNoXCIsXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZERlYnVnT25seSxcbiAgICAgICAgICAgICAgICB0aGlzLndlYnBhY2tIeWJyaWRGaWxlU3lzdGVtLFxuICAgICAgICAgICAgICAgIHRoaXMucG9ydFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMud2VicGFja0RldlNlcnZlclN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmlsZShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgd2hpbGUgKCF0aGlzLndlYnBhY2tEZXZTZXJ2ZXJTdGFydGVkKSB7XG4gICAgICAgICAgICBhd2FpdCBkZWxheSg1MDApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoYXdhaXQgZmV0Y2goYGh0dHA6Ly9sb2NhbGhvc3Q6JHt0aGlzLnBvcnR9LyR7ZmlsZW5hbWV9YCwgeyBtZXRob2Q6IFwiR0VUXCIgfSkpLnRleHQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0R2VuZXJhdGVkRmlsZUFzU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE5vZGVKUy5SZWFkYWJsZVN0cmVhbT4ge1xuICAgICAgICB3aGlsZSAoIXRoaXMud2VicGFja0RldlNlcnZlclN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IGRlbGF5KDUwMCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmpvaW4odGhpcy5mYXJtRGlyZWN0b3J5LCBcImZvcm1zXCIsIHRoaXMuZ2Z2LCBcImZvcm1cIiwgZmlsZW5hbWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy53ZWJwYWNrSHlicmlkRmlsZVN5c3RlbT8ucmVhZEZpbGUoZmlsZU5hbWUsIFwidXRmLThcIiwgKGVycm9yLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShSZWFkYWJsZS5mcm9tKFtkYXRhXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmlsZUFzU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE5vZGVKUy5SZWFkYWJsZVN0cmVhbT4ge1xuICAgICAgICB3aGlsZSAoIXRoaXMud2VicGFja0RldlNlcnZlclN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IGRlbGF5KDUwMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChhd2FpdCBmZXRjaChgaHR0cDovL2xvY2FsaG9zdDoke3RoaXMucG9ydH0vJHtmaWxlbmFtZX1gLCB7IG1ldGhvZDogXCJHRVRcIiB9KSkuYm9keTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmlsZUFzQnVmZmVyKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICB3aGlsZSAoIXRoaXMud2VicGFja0RldlNlcnZlclN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IGRlbGF5KDUwMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChhd2FpdCBmZXRjaChgaHR0cDovL2xvY2FsaG9zdDoke3RoaXMucG9ydH0vJHtmaWxlbmFtZX1gLCB7IG1ldGhvZDogXCJHRVRcIiB9KSkuYnVmZmVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRFcnJvcihlOiBSZWFzb25PckVycm9yKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGAke2V9XFxuJHtlLnN0YWNrfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke2V9YDtcbiAgICB9XG59XG4iXX0=
177
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZFNlcnZlci9SZXNvdXJjZXNDb250cm9sbGVycy9EZXZTZXJ2ZXJzL0J1aWxkRm9ybURldlNlcnZlci50cyJdLCJuYW1lcyI6WyJCdWlsZEZvcm1EZXZTZXJ2ZXIiLCJjb25zdHJ1Y3RvciIsInBvcnQiLCJmYXJtRGlyZWN0b3J5IiwiZ2Z2IiwiY2FuZHlNb2R1bGVzRGlyZWN0b3J5IiwiaGxGYXJtRGlyZWN0b3J5UGF0aCIsInVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMiLCJlbmdpbmVEaXJlY3RvcnkiLCJidWlsZERlYnVnT25seSIsInNraXBDb2RlUmVmb3JtYXR0aW5nIiwibmlnaHRseSIsInN0YXJ0UGFyYWxsZWxMaW1pdCIsImdlbmVyYXRlQ2hhaW4iLCJ3ZWJwYWNrRGV2U2VydmVyU3RhcnRlZCIsIndlYnBhY2tIeWJyaWRGaWxlU3lzdGVtIiwic3RhcnQiLCJ1bmRlZmluZWQiLCJmb3JtRGlyUGF0aCIsInBhdGgiLCJqb2luIiwiV2VicGFja0h5YnJpZEZpbGVTeXN0ZW0iLCJPYnNlcnZlIiwiZmlsZSIsInRyYW5zZm9ybSIsImZvcm1Kc29uRmlsZSIsIngiLCJnZW5lcmF0b3JTb3VyY2UiLCJlbmdpbmVTb3VyY2UiLCJnZW5lcmF0b3JWZXJzaW9uIiwiRXJyb3IiLCJlbmdpbmVWZXJzaW9uIiwiYXR0YWNoIiwiZmkiLCJ5IiwiZ2VuZXJhdG9yIiwiZmlsZXMiLCJmb3JtU291cmNlc1BhdGgiLCJkbyIsInJlc291cmNlc0hhc2giLCJlIiwiZm9ybUVudHJ5UG9pbnRQYXRoIiwid3JpdGVCYXRjaCIsImZvcm1hdEVycm9yIiwib2JzZXJ2ZSIsImdldEZpbGUiLCJmaWxlbmFtZSIsIm1ldGhvZCIsInRleHQiLCJnZXRHZW5lcmF0ZWRGaWxlQXNTdHJlYW0iLCJmaWxlTmFtZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVhZEZpbGUiLCJlcnJvciIsImRhdGEiLCJSZWFkYWJsZSIsImZyb20iLCJnZXRGaWxlQXNTdHJlYW0iLCJyZXNwb25zZSIsInN0YXR1cyIsInRleHRSZXNwb25zZSIsImJvZHkiLCJzdGFjayJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUVBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQU1BOztBQUNBOztBQUdBOztBQUVBOztBQUNBOztBQUNBOzs7O0FBRU8sTUFBTUEsa0JBQU4sQ0FBeUI7QUFPNUI7QUFVT0MsRUFBQUEsV0FBVyxDQUNkQyxJQURjLEVBRWRDLGFBRmMsRUFHZEMsR0FIYyxFQUlkQyxxQkFKYyxFQUtkQyxtQkFMYyxFQU1kQyw0QkFOYyxFQU9kQyxlQVBjLEVBUWRDLGNBUmMsRUFTZEMsb0JBVGMsRUFVZEMsT0FWYyxFQVdoQjtBQUFBLFNBM0JlVCxJQTJCZjtBQUFBLFNBMUJlQyxhQTBCZjtBQUFBLFNBekJlQyxHQXlCZjtBQUFBLFNBeEJlQyxxQkF3QmY7QUFBQSxTQXZCZUMsbUJBdUJmO0FBQUEsU0F0QmVNLGtCQXNCZjtBQUFBLFNBcEJNQyxhQW9CTjtBQUFBLFNBbkJNQyx1QkFtQk4sR0FuQmdDLEtBbUJoQztBQUFBLFNBbEJlUCw0QkFrQmY7QUFBQSxTQWpCZUMsZUFpQmY7QUFBQSxTQWhCZUcsT0FnQmY7QUFBQSxTQWZlRixjQWVmO0FBQUEsU0FkZUMsb0JBY2Y7QUFBQSxTQWJNSyx1QkFhTjtBQUNFLFNBQUtiLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUtDLGFBQUwsR0FBcUJBLGFBQXJCO0FBQ0EsU0FBS0MsR0FBTCxHQUFXQSxHQUFYO0FBQ0EsU0FBS0MscUJBQUwsR0FBNkJBLHFCQUE3QjtBQUNBLFNBQUtDLG1CQUFMLEdBQTJCQSxtQkFBM0I7QUFDQSxTQUFLTSxrQkFBTCxHQUEwQixxQkFBTyxDQUFQLENBQTFCO0FBQ0EsU0FBS0wsNEJBQUwsR0FBb0NBLDRCQUFwQztBQUNBLFNBQUtDLGVBQUwsR0FBdUJBLGVBQXZCO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQkEsY0FBdEI7QUFD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RSxLQUFJQSxDQUFDLENBQUN3QixLQUFNLEVBQXhCO0FBQ0g7O0FBQ0QsV0FBUSxHQUFFeEIsQ0FBRSxFQUFaO0FBQ0g7O0FBbEwyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gXCJzdHJlYW1cIjtcblxuaW1wb3J0IGZldGNoIGZyb20gXCJub2RlLWZldGNoXCI7XG5pbXBvcnQgcExpbWl0LCB7IExpbWl0IH0gZnJvbSBcInAtbGltaXRcIjtcblxuaW1wb3J0IHsgZ2VuZXJhdGVGb3JtIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0J1aWxkVGFza3MvRm9ybS9HZW5lcmF0ZUZvcm1cIjtcbmltcG9ydCB7IGdlbmVyYXRvckZhY3RvcnksIGdldEdlbmVyYXRvclNvdXJjZUtleSB9IGZyb20gXCIuLi8uLi8uLi8uLi9CdWlsZFRhc2tzL0dlbmVyYXRvci9BY3F1aXJlRm9ybUdlbmVyYXRvclwiO1xuaW1wb3J0IHtcbiAgICByZXNvbHZlRW5naW5lVmVyc2lvbixcbiAgICByZXNvbHZlR2VuZXJhdG9yVmVyc2lvbixcbiAgICByZXNvbHZlTG9jYWxFbmdpbmVTb3VyY2UsXG4gICAgcmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlLFxufSBmcm9tIFwiLi4vLi4vLi4vLi4vQnVpbGRUYXNrcy9QdWJsaXNoZWRWZXJzaW9uVXRpbHNcIjtcbmltcG9ydCB7IHJlc29sdmVGb3JtSW5mbyB9IGZyb20gXCIuLi8uLi8uLi8uLi9CdWlsZFRhc2tzL1Jlc29sdmVGb3JtSW5mb1wiO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0FzeW5jVXRpbHNcIjtcbmltcG9ydCB7IFJlYXNvbk9yRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9ucy9FcnJvclVudHlwZWRcIjtcbmltcG9ydCB7IENoYWluYWJsZVZhbHVlUHJvZHVjZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9ucy9UYXNrc0NvcmUvQ2hhaW5hYmxlVmFsdWVQcm9kdWNlclwiO1xuaW1wb3J0IHsgT2JzZXJ2ZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9PYnNlcnZlXCI7XG5cbmltcG9ydCB7IGdldFJlcG9ydEdlbmVyYXRvckVycm9yVG9QYWdlQm9keVNjcmlwdCB9IGZyb20gXCIuL1JlcG9ydEdlbmVyYXRvckVycm9yVG9QYWdlQm9keVwiO1xuaW1wb3J0IHsgcnVuRm9ybUNvbXBpbGF0aW9uVmlhV2VicGFja0RldlNlcnZlciB9IGZyb20gXCIuL1J1bkZvcm1Db21waWxhdGlvblZpYVdlYnBhY2tEZXZTZXJ2ZXJcIjtcbmltcG9ydCB7IFdlYnBhY2tIeWJyaWRGaWxlU3lzdGVtIH0gZnJvbSBcIi4vV2VicGFja0luTWVtb3J5VXRpbHMvV2VicGFja0h5YnJpZEZpbGVTeXN0ZW1cIjtcblxuZXhwb3J0IGNsYXNzIEJ1aWxkRm9ybURldlNlcnZlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYXJtRGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBnZnY6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhbmR5TW9kdWxlc0RpcmVjdG9yeTogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaGxGYXJtRGlyZWN0b3J5UGF0aDogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RhcnRQYXJhbGxlbExpbWl0OiBMaW1pdDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByaXZhdGUgZ2VuZXJhdGVDaGFpbj86IENoYWluYWJsZVZhbHVlUHJvZHVjZXI8YW55PjtcbiAgICBwcml2YXRlIHdlYnBhY2tEZXZTZXJ2ZXJTdGFydGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VHZW5lcmF0b3JGcm9tTG9jYWxTb3VyY2VzOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZW5naW5lRGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuaWdodGx5OiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYnVpbGREZWJ1Z09ubHk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBza2lwQ29kZVJlZm9ybWF0dGluZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHdlYnBhY2tIeWJyaWRGaWxlU3lzdGVtPzogV2VicGFja0h5YnJpZEZpbGVTeXN0ZW07XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHBvcnQ6IG51bWJlcixcbiAgICAgICAgZmFybURpcmVjdG9yeTogc3RyaW5nLFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgY2FuZHlNb2R1bGVzRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZyxcbiAgICAgICAgdXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlczogYm9vbGVhbixcbiAgICAgICAgZW5naW5lRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGJ1aWxkRGVidWdPbmx5OiBib29sZWFuLFxuICAgICAgICBza2lwQ29kZVJlZm9ybWF0dGluZzogYm9vbGVhbixcbiAgICAgICAgbmlnaHRseTogYm9vbGVhblxuICAgICkge1xuICAgICAgICB0aGlzLnBvcnQgPSBwb3J0O1xuICAgICAgICB0aGlzLmZhcm1EaXJlY3RvcnkgPSBmYXJtRGlyZWN0b3J5O1xuICAgICAgICB0aGlzLmdmdiA9IGdmdjtcbiAgICAgICAgdGhpcy5jYW5keU1vZHVsZXNEaXJlY3RvcnkgPSBjYW5keU1vZHVsZXNEaXJlY3Rvcnk7XG4gICAgICAgIHRoaXMuaGxGYXJtRGlyZWN0b3J5UGF0aCA9IGhsRmFybURpcmVjdG9yeVBhdGg7XG4gICAgICAgIHRoaXMuc3RhcnRQYXJhbGxlbExpbWl0ID0gcExpbWl0KDEpO1xuICAgICAgICB0aGlzLnVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMgPSB1c2VHZW5lcmF0b3JGcm9tTG9jYWxTb3VyY2VzO1xuICAgICAgICB0aGlzLmVuZ2luZURpcmVjdG9yeSA9IGVuZ2luZURpcmVjdG9yeTtcbiAgICAgICAgdGhpcy5idWlsZERlYnVnT25seSA9IGJ1aWxkRGVidWdPbmx5O1xuICAgICAgICB0aGlzLnNraXBDb2RlUmVmb3JtYXR0aW5nID0gc2tpcENvZGVSZWZvcm1hdHRpbmc7XG4gICAgICAgIHRoaXMubmlnaHRseSA9IG5pZ2h0bHk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFBhcmFsbGVsTGltaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2VuZXJhdGVDaGFpbiAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmb3JtRGlyUGF0aCA9IHBhdGguam9pbih0aGlzLmZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiwgdGhpcy5nZnYpO1xuICAgICAgICAgICAgdGhpcy53ZWJwYWNrSHlicmlkRmlsZVN5c3RlbSA9IG5ldyBXZWJwYWNrSHlicmlkRmlsZVN5c3RlbShwYXRoLmpvaW4oZm9ybURpclBhdGgsIFwiZm9ybVwiKSk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDaGFpbiA9IE9ic2VydmUuZmlsZShwYXRoLmpvaW4oZm9ybURpclBhdGgsIFwiZm9ybS5qc29uXCIpKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oZm9ybUpzb25GaWxlID0+XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVGb3JtSW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Kc29uRmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EaXJQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uaWdodGx5XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnRyYW5zZm9ybShhc3luYyB4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvclNvdXJjZTogcmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlKHRoaXMuZW5naW5lRGlyZWN0b3J5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVTb3VyY2U6IHJlc29sdmVMb2NhbEVuZ2luZVNvdXJjZSh0aGlzLmVuZ2luZURpcmVjdG9yeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHguZ2VuZXJhdG9yVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJnZW5lcmF0b3JWZXJzaW9uIGlzIG5vIGRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5lbmdpbmVWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVuZ2luZVZlcnNpb24gaXMgbm8gZGVmaW5lZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JTb3VyY2U6IGF3YWl0IHJlc29sdmVHZW5lcmF0b3JWZXJzaW9uKHguZ2VuZXJhdG9yVmVyc2lvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lU291cmNlOiBhd2FpdCByZXNvbHZlRW5naW5lVmVyc2lvbih4LmVuZ2luZVZlcnNpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dGFjaChcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgZmkgPT4gZ2VuZXJhdG9yRmFjdG9yeShmaS5nZW5lcmF0b3JTb3VyY2UsIHRoaXMuY2FuZHlNb2R1bGVzRGlyZWN0b3J5LCBmYWxzZSwgdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgKGZpLCB5KSA9PiAoeyAuLi5maSwgZ2VuZXJhdG9yOiB5IH0pLFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PiBnZXRHZW5lcmF0b3JTb3VyY2VLZXkoZmkuZ2VuZXJhdG9yU291cmNlKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtU291cmNlc1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIi4uLy4uL2NvbnRyb2xzLyoqL2dlbmVyYXRvci8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNjaGVtYXMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdWdhci8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXV0b2NhbGMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJoZWxwZXJzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsaWRhdGlvbnMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsb2NhbGl6YXRpb24vKiovKlwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmRvKGFzeW5jIGZpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXRlRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtU291cmNlc1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGxGYXJtRGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaS5nZW5lcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcENvZGVSZWZvcm1hdHRpbmc6IHRoaXMuc2tpcENvZGVSZWZvcm1hdHRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc0hhc2g6IFwibG9jYWwtaGFzaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWJwYWNrSHlicmlkRmlsZVN5c3RlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybUVudHJ5UG9pbnRQYXRoID0gcGF0aC5qb2luKHRoaXMuZmFybURpcmVjdG9yeSwgXCJmb3Jtc1wiLCB0aGlzLmdmdiwgXCJmb3JtXCIsIFwid2ViLmpzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy53ZWJwYWNrSHlicmlkRmlsZVN5c3RlbT8ud3JpdGVCYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1FbnRyeVBvaW50UGF0aF06IGdldFJlcG9ydEdlbmVyYXRvckVycm9yVG9QYWdlQm9keVNjcmlwdCh0aGlzLmZvcm1hdEVycm9yKGUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgICAgICBhd2FpdCBydW5Gb3JtQ29tcGlsYXRpb25WaWFXZWJwYWNrRGV2U2VydmVyKFxuICAgICAgICAgICAgICAgIHRoaXMuZ2Z2LFxuICAgICAgICAgICAgICAgIHRoaXMuZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5mYXJtRGlyZWN0b3J5LCBcInJlc1wiKSxcbiAgICAgICAgICAgICAgICBcImxvY2FsLWhhc2hcIixcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRGVidWdPbmx5LFxuICAgICAgICAgICAgICAgIHRoaXMud2VicGFja0h5YnJpZEZpbGVTeXN0ZW0sXG4gICAgICAgICAgICAgICAgdGhpcy5wb3J0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy53ZWJwYWNrRGV2U2VydmVyU3RhcnRlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGaWxlKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB3aGlsZSAoIXRoaXMud2VicGFja0RldlNlcnZlclN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IGRlbGF5KDUwMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChhd2FpdCBmZXRjaChgaHR0cDovL2xvY2FsaG9zdDoke3RoaXMucG9ydH0vJHtmaWxlbmFtZX1gLCB7IG1ldGhvZDogXCJHRVRcIiB9KSkudGV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRHZW5lcmF0ZWRGaWxlQXNTdHJlYW0oZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8Tm9kZUpTLlJlYWRhYmxlU3RyZWFtPiB7XG4gICAgICAgIHdoaWxlICghdGhpcy53ZWJwYWNrRGV2U2VydmVyU3RhcnRlZCkge1xuICAgICAgICAgICAgYXdhaXQgZGVsYXkoNTAwKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguam9pbih0aGlzLmZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiwgdGhpcy5nZnYsIFwiZm9ybVwiLCBmaWxlbmFtZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLndlYnBhY2tIeWJyaWRGaWxlU3lzdGVtPy5yZWFkRmlsZShmaWxlTmFtZSwgXCJ1dGYtOFwiLCAoZXJyb3IsIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFJlYWRhYmxlLmZyb20oW2RhdGFdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGaWxlQXNTdHJlYW0oZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8Tm9kZUpTLlJlYWRhYmxlU3RyZWFtPiB7XG4gICAgICAgIHdoaWxlICghdGhpcy53ZWJwYWNrRGV2U2VydmVyU3RhcnRlZCkge1xuICAgICAgICAgICAgYXdhaXQgZGVsYXkoNTAwKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwOi8vbG9jYWxob3N0OiR7dGhpcy5wb3J0fS8ke2ZpbGVuYW1lfWAsIHsgbWV0aG9kOiBcIkdFVFwiIH0pO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9IDIwMCkge1xuICAgICAgICAgICAgY29uc3QgdGV4dFJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRleHRSZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRFcnJvcihlOiBSZWFzb25PckVycm9yKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGAke2V9XFxuJHtlLnN0YWNrfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke2V9YDtcbiAgICB9XG59XG4iXX0=