@kontur.candy/tools 2.174.0 → 2.175.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 (29) hide show
  1. package/CHANGELOG.md +14 -1
  2. package/distr/Common/FormPathUtils.js +15 -0
  3. package/distr/Common/WellKnownDirectories.js +13 -0
  4. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +3 -3
  5. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +3 -2
  6. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +3 -3
  7. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +3 -3
  8. package/distr/Tools/src/BuildTasks/ReadFormSource.js +3 -2
  9. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +3 -4
  10. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +13 -9
  11. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +59 -115
  12. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +34 -7
  13. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +2 -2
  14. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +2 -2
  15. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +5 -2
  16. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +76 -30
  17. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +3 -6
  18. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +211 -16
  19. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +7 -1
  20. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +10 -6
  21. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +4 -2
  22. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +3 -2
  23. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +3 -2
  24. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +8 -4
  25. package/distr/Tools/src/Commons/FormGlobsUtils.js +80 -2
  26. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +12 -4
  27. package/distr/Tools/src/Commons/TasksCore/Observe.js +5 -1
  28. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +4 -4
  29. package/package.json +1 -1
@@ -7,38 +7,233 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.FarmDirectory = void 0;
8
8
  var _path = _interopRequireDefault(require("path"));
9
9
  var _fs = require("fs");
10
+ var _fsExtra = require("fs-extra");
11
+ var _pLimit = _interopRequireDefault(require("p-limit"));
10
12
  var _FormGlobsUtils = require("../../../../Commons/FormGlobsUtils");
11
13
  var _FsUtils = require("../../../../Commons/FsUtils");
12
- var _PathPattern = require("../../../../Commons/PathPattern");
13
14
  var _TypingUtils = require("../../../../../../Common/TypingUtils");
15
+ var _ExtractGfvsFromFileName = require("../../../../Commons/ExtractGfvsFromFileName");
16
+ var _WellKnownDirectories = require("../../../../../../Common/WellKnownDirectories");
14
17
  class FarmDirectory {
15
18
  constructor(farmDirectory) {
16
19
  this.farmDirectory = void 0;
20
+ this.gfvToPathMap = void 0;
21
+ this.allGfvInfos = void 0;
22
+ this.ensureGfvDirectoriesUpdated = void 0;
17
23
  this.farmDirectory = farmDirectory;
24
+ const updateGfvDirectoriesLimit = (0, _pLimit.default)(1);
25
+ this.ensureGfvDirectoriesUpdated = async () => {
26
+ if (this.allGfvInfos == undefined || this.gfvToPathMap == undefined) {
27
+ await updateGfvDirectoriesLimit(async () => {
28
+ if (this.allGfvInfos == undefined || this.gfvToPathMap == undefined) {
29
+ await this.updateGfvDirectories();
30
+ }
31
+ });
32
+ }
33
+ };
34
+ setTimeout(() => {
35
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
36
+ updateGfvDirectoriesLimit(() => this.updateGfvDirectories());
37
+ }, 60000);
18
38
  }
19
- async getAllFormJsonFiles() {
20
- const pattern = new _PathPattern.PathPattern("forms/{gfv}/form.json");
21
- const files = await (0, _FsUtils.globAsync)("forms/*/form.json", {
22
- cwd: this.farmDirectory
39
+ async updateGfvDirectories() {
40
+ this.allGfvInfos = await _FormGlobsUtils.FormGlobs.enumerateFormsInRepository(_path.default.join(this.farmDirectory, ".."));
41
+ this.gfvToPathMap = new Map(this.allGfvInfos.map(x => [x.gfv, x.formPath]));
42
+ }
43
+ async getAllPicklists() {
44
+ return await (0, _FsUtils.globAsync)("*", {
45
+ cwd: _path.default.join(this.farmDirectory, "picklists")
23
46
  });
24
- return files.map(x => {
25
- var _pattern$execStrict$g;
26
- return {
27
- relativePath: x,
28
- gfv: (_pattern$execStrict$g = pattern.execStrict(x)["gfv"]) !== null && _pattern$execStrict$g !== void 0 ? _pattern$execStrict$g : (0, _TypingUtils.reject)()
29
- };
47
+ }
48
+ async getFormDirectory() {
49
+ return await (0, _FsUtils.globAsync)("*", {
50
+ cwd: _path.default.join(this.farmDirectory, "picklists")
30
51
  });
31
52
  }
53
+ async getAllFormJsonFiles() {
54
+ const formGfvPaths = await this.enumerateAllGfvs();
55
+ return formGfvPaths.map(x => ({
56
+ gfv: x.gfv
57
+ }));
58
+ }
59
+ async enumerateAllGfvs() {
60
+ var _this$allGfvInfos;
61
+ await this.ensureGfvDirectoriesUpdated();
62
+ return (_this$allGfvInfos = this.allGfvInfos) !== null && _this$allGfvInfos !== void 0 ? _this$allGfvInfos : (0, _TypingUtils.reject)();
63
+ }
64
+ async getGfvToPathMap() {
65
+ var _this$gfvToPathMap;
66
+ await this.ensureGfvDirectoriesUpdated();
67
+ return (_this$gfvToPathMap = this.gfvToPathMap) !== null && _this$gfvToPathMap !== void 0 ? _this$gfvToPathMap : (0, _TypingUtils.reject)();
68
+ }
69
+ async getAllGfvs() {
70
+ const formGfvPaths = await this.enumerateAllGfvs();
71
+ return formGfvPaths.map(x => x.gfv);
72
+ }
32
73
  async resolveFormGlobs(formGlobs) {
74
+ await this.ensureGfvDirectoriesUpdated();
33
75
  return _FormGlobsUtils.FormGlobs.resolveGlobsToGfvs(await _FormGlobsUtils.FormGlobs.resolveSpecifiers(formGlobs, this.farmDirectory), this.farmDirectory);
34
76
  }
35
- getFormJsonPath(gfv) {
36
- const formDirPath = _path.default.join(this.farmDirectory, "forms", gfv);
37
- if ((0, _fs.existsSync)(_path.default.join(formDirPath, "form.json"))) {
38
- return _path.default.join(formDirPath, "form.json");
77
+ async getFormJsonPath(gfv) {
78
+ var _this$gfvToPathMap2;
79
+ await this.ensureGfvDirectoriesUpdated();
80
+ const formDirPath = ((_this$gfvToPathMap2 = this.gfvToPathMap) !== null && _this$gfvToPathMap2 !== void 0 ? _this$gfvToPathMap2 : (0, _TypingUtils.reject)()).get(gfv);
81
+ if (formDirPath != undefined && (0, _fs.existsSync)(_path.default.join(formDirPath, _WellKnownDirectories.WellKnownDirectories.FormJsonFileName))) {
82
+ return _path.default.join(formDirPath, _WellKnownDirectories.WellKnownDirectories.FormJsonFileName);
83
+ }
84
+ return undefined;
85
+ }
86
+ async getAllConverterFilePaths() {
87
+ const result = [];
88
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
89
+ result.push(...(await (0, _FsUtils.globAsync)("converters/*", {
90
+ cwd: gfvInfo.formPath
91
+ })));
92
+ }
93
+ return result;
94
+ }
95
+ async getConverterFilePathByFileNameOrUndefined(filename) {
96
+ const gfvToPathMap = await this.getGfvToPathMap();
97
+ for (const gfv of (0, _ExtractGfvsFromFileName.extractGfvsFromFileName)(filename)) {
98
+ const formPath = gfvToPathMap.get(gfv);
99
+ if (formPath == undefined) {
100
+ continue;
101
+ }
102
+ const filePath = _path.default.join(formPath, "converters", filename);
103
+ if (await (0, _fsExtra.pathExists)(filePath)) {
104
+ return filePath;
105
+ }
106
+ }
107
+ return undefined;
108
+ }
109
+ async getAllSchemasFilePaths() {
110
+ const result = [];
111
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
112
+ result.push(...(await (0, _FsUtils.globAsync)("schemas/*", {
113
+ cwd: gfvInfo.formPath
114
+ })));
115
+ }
116
+ return result;
117
+ }
118
+ async getSchemaFilePathByFileNameOrUndefined(filename) {
119
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
120
+ const filePath = _path.default.join(gfvInfo.formPath, "schemas", filename);
121
+ if (await (0, _fsExtra.pathExists)(filePath)) {
122
+ return filePath;
123
+ }
124
+ }
125
+ return undefined;
126
+ }
127
+ async getAllNormalizeFilePaths() {
128
+ const result = [];
129
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
130
+ result.push(...(await (0, _FsUtils.globAsync)("normalize/*", {
131
+ cwd: gfvInfo.formPath
132
+ })));
133
+ }
134
+ return result;
135
+ }
136
+ async getNormalizeFilePathByFileNameOrUndefined(filename) {
137
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
138
+ const filePath = _path.default.join(gfvInfo.formPath, "normalize", filename);
139
+ if (await (0, _fsExtra.pathExists)(filePath)) {
140
+ return filePath;
141
+ }
142
+ }
143
+ return undefined;
144
+ }
145
+ async getAllUnmapFilePaths() {
146
+ const result = [];
147
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
148
+ result.push(...(await (0, _FsUtils.globAsync)("unmap/*", {
149
+ cwd: gfvInfo.formPath
150
+ })));
151
+ }
152
+ return result;
153
+ }
154
+ async getUnmapFilePathByFileNameOrUndefined(filename) {
155
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
156
+ const filePath = _path.default.join(gfvInfo.formPath, "unmap", filename);
157
+ if (await (0, _fsExtra.pathExists)(filePath)) {
158
+ return filePath;
159
+ }
160
+ }
161
+ return undefined;
162
+ }
163
+ async getAllMapFilePaths() {
164
+ const result = [];
165
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
166
+ result.push(...(await (0, _FsUtils.globAsync)("map/*", {
167
+ cwd: gfvInfo.formPath
168
+ })));
169
+ }
170
+ return result;
171
+ }
172
+ async getMapFilePathByFileNameOrUndefined(filename) {
173
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
174
+ const filePath = _path.default.join(gfvInfo.formPath, "map", filename);
175
+ if (await (0, _fsExtra.pathExists)(filePath)) {
176
+ return filePath;
177
+ }
178
+ }
179
+ return undefined;
180
+ }
181
+ async getAllPatchFilePaths() {
182
+ const result = [];
183
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
184
+ result.push(...(await (0, _FsUtils.globAsync)("patch/*", {
185
+ cwd: gfvInfo.formPath
186
+ })));
187
+ }
188
+ return result;
189
+ }
190
+ async getPatchFilePathByFileNameOrUndefined(filename) {
191
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
192
+ const filePath = _path.default.join(gfvInfo.formPath, "patch", filename);
193
+ if (await (0, _fsExtra.pathExists)(filePath)) {
194
+ return filePath;
195
+ }
196
+ }
197
+ return undefined;
198
+ }
199
+ async getAllMergersFilePaths() {
200
+ const result = [];
201
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
202
+ result.push(...(await (0, _FsUtils.globAsync)("mergers/*", {
203
+ cwd: gfvInfo.formPath
204
+ })));
205
+ }
206
+ return result;
207
+ }
208
+ async getMergersFilePathByFileNameOrUndefined(filename) {
209
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
210
+ const filePath = _path.default.join(gfvInfo.formPath, "mergers", filename);
211
+ if (await (0, _fsExtra.pathExists)(filePath)) {
212
+ return filePath;
213
+ }
214
+ }
215
+ return undefined;
216
+ }
217
+ async getAllPresentationsFileNames() {
218
+ const result = [];
219
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
220
+ if (await (0, _fsExtra.pathExists)(_path.default.join(gfvInfo.formPath, "presentations.json"))) {
221
+ result.push(`${gfvInfo.gfv}.presentations.json`);
222
+ }
223
+ }
224
+ return result;
225
+ }
226
+ async getPresentationsFilePathByGfvOrUndefined(gfv) {
227
+ for (const gfvInfo of await this.enumerateAllGfvs()) {
228
+ if (gfvInfo.gfv === gfv) {
229
+ const filePath = _path.default.join(gfvInfo.formPath, "presentations.json");
230
+ if (await (0, _fsExtra.pathExists)(filePath)) {
231
+ return filePath;
232
+ }
233
+ }
39
234
  }
40
235
  return undefined;
41
236
  }
42
237
  }
43
238
  exports.FarmDirectory = FarmDirectory;
44
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2ZzIiwiX0Zvcm1HbG9ic1V0aWxzIiwiX0ZzVXRpbHMiLCJfUGF0aFBhdHRlcm4iLCJfVHlwaW5nVXRpbHMiLCJGYXJtRGlyZWN0b3J5IiwiY29uc3RydWN0b3IiLCJmYXJtRGlyZWN0b3J5IiwiZ2V0QWxsRm9ybUpzb25GaWxlcyIsInBhdHRlcm4iLCJQYXRoUGF0dGVybiIsImZpbGVzIiwiZ2xvYkFzeW5jIiwiY3dkIiwibWFwIiwieCIsIl9wYXR0ZXJuJGV4ZWNTdHJpY3QkZyIsInJlbGF0aXZlUGF0aCIsImdmdiIsImV4ZWNTdHJpY3QiLCJyZWplY3QiLCJyZXNvbHZlRm9ybUdsb2JzIiwiZm9ybUdsb2JzIiwiRm9ybUdsb2JzIiwicmVzb2x2ZUdsb2JzVG9HZnZzIiwicmVzb2x2ZVNwZWNpZmllcnMiLCJnZXRGb3JtSnNvblBhdGgiLCJmb3JtRGlyUGF0aCIsInBhdGgiLCJqb2luIiwiZXhpc3RzU3luYyIsInVuZGVmaW5lZCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvQ0xJQ29tbWFuZHMvQnVpbGRTZXJ2ZXIvUmVzb3VyY2VzQ29udHJvbGxlcnMvRGlyZWN0b3JpZXMvRmFybURpcmVjdG9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJmc1wiO1xuXG5pbXBvcnQgeyBGb3JtR2xvYnMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9ucy9Gb3JtR2xvYnNVdGlsc1wiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbnMvRnNVdGlsc1wiO1xuaW1wb3J0IHsgUGF0aFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9ucy9QYXRoUGF0dGVyblwiO1xuaW1wb3J0IHsgcmVqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9UeXBpbmdVdGlsc1wiO1xuXG5pbnRlcmZhY2UgRmFybUZpbGVJbmZvIHtcbiAgICByZWxhdGl2ZVBhdGg6IHN0cmluZztcbiAgICBnZnY6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEZhcm1EaXJlY3Rvcnkge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmFybURpcmVjdG9yeTogc3RyaW5nO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZhcm1EaXJlY3Rvcnk6IHN0cmluZykge1xuICAgICAgICB0aGlzLmZhcm1EaXJlY3RvcnkgPSBmYXJtRGlyZWN0b3J5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxGb3JtSnNvbkZpbGVzKCk6IFByb21pc2U8RmFybUZpbGVJbmZvW10+IHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBQYXRoUGF0dGVybihcImZvcm1zL3tnZnZ9L2Zvcm0uanNvblwiKTtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBnbG9iQXN5bmMoXCJmb3Jtcy8qL2Zvcm0uanNvblwiLCB7IGN3ZDogdGhpcy5mYXJtRGlyZWN0b3J5IH0pO1xuICAgICAgICByZXR1cm4gZmlsZXMubWFwKHggPT4gKHtcbiAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogeCxcbiAgICAgICAgICAgIGdmdjogcGF0dGVybi5leGVjU3RyaWN0KHgpW1wiZ2Z2XCJdID8/IHJlamVjdCgpLFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlc29sdmVGb3JtR2xvYnMoZm9ybUdsb2JzOiBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIEZvcm1HbG9icy5yZXNvbHZlR2xvYnNUb0dmdnMoXG4gICAgICAgICAgICBhd2FpdCBGb3JtR2xvYnMucmVzb2x2ZVNwZWNpZmllcnMoZm9ybUdsb2JzLCB0aGlzLmZhcm1EaXJlY3RvcnkpLFxuICAgICAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm1Kc29uUGF0aChnZnY6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGZvcm1EaXJQYXRoID0gcGF0aC5qb2luKHRoaXMuZmFybURpcmVjdG9yeSwgXCJmb3Jtc1wiLCBnZnYpO1xuICAgICAgICBpZiAoZXhpc3RzU3luYyhwYXRoLmpvaW4oZm9ybURpclBhdGgsIFwiZm9ybS5qc29uXCIpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGguam9pbihmb3JtRGlyUGF0aCwgXCJmb3JtLmpzb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxHQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxlQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxZQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxZQUFBLEdBQUFMLE9BQUE7QUFPTyxNQUFNTSxhQUFhLENBQUM7RUFHaEJDLFdBQVdBLENBQUNDLGFBQXFCLEVBQUU7SUFBQSxLQUZ6QkEsYUFBYTtJQUcxQixJQUFJLENBQUNBLGFBQWEsR0FBR0EsYUFBYTtFQUN0QztFQUVBLE1BQWFDLG1CQUFtQkEsQ0FBQSxFQUE0QjtJQUN4RCxNQUFNQyxPQUFPLEdBQUcsSUFBSUMsd0JBQVcsQ0FBQyx1QkFBdUIsQ0FBQztJQUN4RCxNQUFNQyxLQUFLLEdBQUcsTUFBTSxJQUFBQyxrQkFBUyxFQUFDLG1CQUFtQixFQUFFO01BQUVDLEdBQUcsRUFBRSxJQUFJLENBQUNOO0lBQWMsQ0FBQyxDQUFDO0lBQy9FLE9BQU9JLEtBQUssQ0FBQ0csR0FBRyxDQUFDQyxDQUFDO01BQUEsSUFBQUMscUJBQUE7TUFBQSxPQUFLO1FBQ25CQyxZQUFZLEVBQUVGLENBQUM7UUFDZkcsR0FBRyxHQUFBRixxQkFBQSxHQUFFUCxPQUFPLENBQUNVLFVBQVUsQ0FBQ0osQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQUFDLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksSUFBQUksbUJBQU0sRUFBQztNQUNoRCxDQUFDO0lBQUEsQ0FBQyxDQUFDO0VBQ1A7RUFFQSxNQUFhQyxnQkFBZ0JBLENBQUNDLFNBQW1CLEVBQXFCO0lBQ2xFLE9BQU9DLHlCQUFTLENBQUNDLGtCQUFrQixDQUMvQixNQUFNRCx5QkFBUyxDQUFDRSxpQkFBaUIsQ0FBQ0gsU0FBUyxFQUFFLElBQUksQ0FBQ2YsYUFBYSxDQUFDLEVBQ2hFLElBQUksQ0FBQ0EsYUFDVCxDQUFDO0VBQ0w7RUFFT21CLGVBQWVBLENBQUNSLEdBQVcsRUFBc0I7SUFDcEQsTUFBTVMsV0FBVyxHQUFHQyxhQUFJLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUN0QixhQUFhLEVBQUUsT0FBTyxFQUFFVyxHQUFHLENBQUM7SUFDL0QsSUFBSSxJQUFBWSxjQUFVLEVBQUNGLGFBQUksQ0FBQ0MsSUFBSSxDQUFDRixXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRTtNQUNqRCxPQUFPQyxhQUFJLENBQUNDLElBQUksQ0FBQ0YsV0FBVyxFQUFFLFdBQVcsQ0FBQztJQUM5QztJQUNBLE9BQU9JLFNBQVM7RUFDcEI7QUFDSjtBQUFDQyxPQUFBLENBQUEzQixhQUFBLEdBQUFBLGFBQUEifQ==
239
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2ZzIiwiX2ZzRXh0cmEiLCJfcExpbWl0IiwiX0Zvcm1HbG9ic1V0aWxzIiwiX0ZzVXRpbHMiLCJfVHlwaW5nVXRpbHMiLCJfRXh0cmFjdEdmdnNGcm9tRmlsZU5hbWUiLCJfV2VsbEtub3duRGlyZWN0b3JpZXMiLCJGYXJtRGlyZWN0b3J5IiwiY29uc3RydWN0b3IiLCJmYXJtRGlyZWN0b3J5IiwiZ2Z2VG9QYXRoTWFwIiwiYWxsR2Z2SW5mb3MiLCJlbnN1cmVHZnZEaXJlY3Rvcmllc1VwZGF0ZWQiLCJ1cGRhdGVHZnZEaXJlY3Rvcmllc0xpbWl0IiwicExpbWl0IiwidW5kZWZpbmVkIiwidXBkYXRlR2Z2RGlyZWN0b3JpZXMiLCJzZXRUaW1lb3V0IiwiRm9ybUdsb2JzIiwiZW51bWVyYXRlRm9ybXNJblJlcG9zaXRvcnkiLCJwYXRoIiwiam9pbiIsIk1hcCIsIm1hcCIsIngiLCJnZnYiLCJmb3JtUGF0aCIsImdldEFsbFBpY2tsaXN0cyIsImdsb2JBc3luYyIsImN3ZCIsImdldEZvcm1EaXJlY3RvcnkiLCJnZXRBbGxGb3JtSnNvbkZpbGVzIiwiZm9ybUdmdlBhdGhzIiwiZW51bWVyYXRlQWxsR2Z2cyIsIl90aGlzJGFsbEdmdkluZm9zIiwicmVqZWN0IiwiZ2V0R2Z2VG9QYXRoTWFwIiwiX3RoaXMkZ2Z2VG9QYXRoTWFwIiwiZ2V0QWxsR2Z2cyIsInJlc29sdmVGb3JtR2xvYnMiLCJmb3JtR2xvYnMiLCJyZXNvbHZlR2xvYnNUb0dmdnMiLCJyZXNvbHZlU3BlY2lmaWVycyIsImdldEZvcm1Kc29uUGF0aCIsIl90aGlzJGdmdlRvUGF0aE1hcDIiLCJmb3JtRGlyUGF0aCIsImdldCIsImV4aXN0c1N5bmMiLCJXZWxsS25vd25EaXJlY3RvcmllcyIsIkZvcm1Kc29uRmlsZU5hbWUiLCJnZXRBbGxDb252ZXJ0ZXJGaWxlUGF0aHMiLCJyZXN1bHQiLCJnZnZJbmZvIiwicHVzaCIsImdldENvbnZlcnRlckZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZmlsZW5hbWUiLCJleHRyYWN0R2Z2c0Zyb21GaWxlTmFtZSIsImZpbGVQYXRoIiwicGF0aEV4aXN0cyIsImdldEFsbFNjaGVtYXNGaWxlUGF0aHMiLCJnZXRTY2hlbWFGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZCIsImdldEFsbE5vcm1hbGl6ZUZpbGVQYXRocyIsImdldE5vcm1hbGl6ZUZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZ2V0QWxsVW5tYXBGaWxlUGF0aHMiLCJnZXRVbm1hcEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZ2V0QWxsTWFwRmlsZVBhdGhzIiwiZ2V0TWFwRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQiLCJnZXRBbGxQYXRjaEZpbGVQYXRocyIsImdldFBhdGNoRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQiLCJnZXRBbGxNZXJnZXJzRmlsZVBhdGhzIiwiZ2V0TWVyZ2Vyc0ZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZ2V0QWxsUHJlc2VudGF0aW9uc0ZpbGVOYW1lcyIsImdldFByZXNlbnRhdGlvbnNGaWxlUGF0aEJ5R2Z2T3JVbmRlZmluZWQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL0NMSUNvbW1hbmRzL0J1aWxkU2VydmVyL1Jlc291cmNlc0NvbnRyb2xsZXJzL0RpcmVjdG9yaWVzL0Zhcm1EaXJlY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIjtcblxuaW1wb3J0IHsgcGF0aEV4aXN0cyB9IGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHBMaW1pdCBmcm9tIFwicC1saW1pdFwiO1xuXG5pbXBvcnQgeyBGb3JtR2xvYnMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9ucy9Gb3JtR2xvYnNVdGlsc1wiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbnMvRnNVdGlsc1wiO1xuaW1wb3J0IHsgcmVqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgZXh0cmFjdEdmdnNGcm9tRmlsZU5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9ucy9FeHRyYWN0R2Z2c0Zyb21GaWxlTmFtZVwiO1xuaW1wb3J0IHsgV2VsbEtub3duRGlyZWN0b3JpZXMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vQ29tbW9uL1dlbGxLbm93bkRpcmVjdG9yaWVzXCI7XG5cbmludGVyZmFjZSBGYXJtRmlsZUluZm8ge1xuICAgIGdmdjogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRmFybURpcmVjdG9yeSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYXJtRGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBnZnZUb1BhdGhNYXA6IHVuZGVmaW5lZCB8IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHJpdmF0ZSBhbGxHZnZJbmZvcz86IEFycmF5PHsgZ2Z2OiBzdHJpbmc7IGZvcm1QYXRoOiBzdHJpbmc7IGZvcm1SZWxhdGl2ZVBhdGg6IHN0cmluZyB9PjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVuc3VyZUdmdkRpcmVjdG9yaWVzVXBkYXRlZDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihmYXJtRGlyZWN0b3J5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5ID0gZmFybURpcmVjdG9yeTtcbiAgICAgICAgY29uc3QgdXBkYXRlR2Z2RGlyZWN0b3JpZXNMaW1pdCA9IHBMaW1pdCgxKTtcbiAgICAgICAgdGhpcy5lbnN1cmVHZnZEaXJlY3Rvcmllc1VwZGF0ZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxHZnZJbmZvcyA9PSB1bmRlZmluZWQgfHwgdGhpcy5nZnZUb1BhdGhNYXAgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdXBkYXRlR2Z2RGlyZWN0b3JpZXNMaW1pdChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsbEdmdkluZm9zID09IHVuZGVmaW5lZCB8fCB0aGlzLmdmdlRvUGF0aE1hcCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlR2Z2RGlyZWN0b3JpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgICAgICAgIHVwZGF0ZUdmdkRpcmVjdG9yaWVzTGltaXQoKCkgPT4gdGhpcy51cGRhdGVHZnZEaXJlY3RvcmllcygpKTtcbiAgICAgICAgfSwgNjAwMDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgdXBkYXRlR2Z2RGlyZWN0b3JpZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuYWxsR2Z2SW5mb3MgPSBhd2FpdCBGb3JtR2xvYnMuZW51bWVyYXRlRm9ybXNJblJlcG9zaXRvcnkocGF0aC5qb2luKHRoaXMuZmFybURpcmVjdG9yeSwgXCIuLlwiKSk7XG4gICAgICAgIHRoaXMuZ2Z2VG9QYXRoTWFwID0gbmV3IE1hcCh0aGlzLmFsbEdmdkluZm9zLm1hcCh4ID0+IFt4LmdmdiwgeC5mb3JtUGF0aF0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsUGlja2xpc3RzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdsb2JBc3luYyhcIipcIiwgeyBjd2Q6IHBhdGguam9pbih0aGlzLmZhcm1EaXJlY3RvcnksIFwicGlja2xpc3RzXCIpIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGb3JtRGlyZWN0b3J5KCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdsb2JBc3luYyhcIipcIiwgeyBjd2Q6IHBhdGguam9pbih0aGlzLmZhcm1EaXJlY3RvcnksIFwicGlja2xpc3RzXCIpIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxGb3JtSnNvbkZpbGVzKCk6IFByb21pc2U8RmFybUZpbGVJbmZvW10+IHtcbiAgICAgICAgY29uc3QgZm9ybUdmdlBhdGhzID0gYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCk7XG4gICAgICAgIHJldHVybiBmb3JtR2Z2UGF0aHMubWFwKHggPT4gKHtcbiAgICAgICAgICAgIGdmdjogeC5nZnYsXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGVudW1lcmF0ZUFsbEdmdnMoKTogUHJvbWlzZTxBcnJheTx7IGdmdjogc3RyaW5nOyBmb3JtUGF0aDogc3RyaW5nOyBmb3JtUmVsYXRpdmVQYXRoOiBzdHJpbmcgfT4+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVHZnZEaXJlY3Rvcmllc1VwZGF0ZWQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsR2Z2SW5mb3MgPz8gcmVqZWN0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRHZnZUb1BhdGhNYXAoKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBzdHJpbmc+PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlR2Z2RGlyZWN0b3JpZXNVcGRhdGVkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdmdlRvUGF0aE1hcCA/PyByZWplY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsR2Z2cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IGZvcm1HZnZQYXRocyA9IGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpO1xuICAgICAgICByZXR1cm4gZm9ybUdmdlBhdGhzLm1hcCh4ID0+IHguZ2Z2KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVzb2x2ZUZvcm1HbG9icyhmb3JtR2xvYnM6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUdmdkRpcmVjdG9yaWVzVXBkYXRlZCgpO1xuICAgICAgICByZXR1cm4gRm9ybUdsb2JzLnJlc29sdmVHbG9ic1RvR2Z2cyhcbiAgICAgICAgICAgIGF3YWl0IEZvcm1HbG9icy5yZXNvbHZlU3BlY2lmaWVycyhmb3JtR2xvYnMsIHRoaXMuZmFybURpcmVjdG9yeSksXG4gICAgICAgICAgICB0aGlzLmZhcm1EaXJlY3RvcnlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Rm9ybUpzb25QYXRoKGdmdjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVHZnZEaXJlY3Rvcmllc1VwZGF0ZWQoKTtcbiAgICAgICAgY29uc3QgZm9ybURpclBhdGggPSAodGhpcy5nZnZUb1BhdGhNYXAgPz8gcmVqZWN0KCkpLmdldChnZnYpO1xuICAgICAgICBpZiAoZm9ybURpclBhdGggIT0gdW5kZWZpbmVkICYmIGV4aXN0c1N5bmMocGF0aC5qb2luKGZvcm1EaXJQYXRoLCBXZWxsS25vd25EaXJlY3Rvcmllcy5Gb3JtSnNvbkZpbGVOYW1lKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRoLmpvaW4oZm9ybURpclBhdGgsIFdlbGxLbm93bkRpcmVjdG9yaWVzLkZvcm1Kc29uRmlsZU5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbENvbnZlcnRlckZpbGVQYXRocygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdmdkluZm8gb2YgYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLihhd2FpdCBnbG9iQXN5bmMoXCJjb252ZXJ0ZXJzLypcIiwgeyBjd2Q6IGdmdkluZm8uZm9ybVBhdGggfSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDb252ZXJ0ZXJGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZChmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgZ2Z2VG9QYXRoTWFwID0gYXdhaXQgdGhpcy5nZXRHZnZUb1BhdGhNYXAoKTtcbiAgICAgICAgZm9yIChjb25zdCBnZnYgb2YgZXh0cmFjdEdmdnNGcm9tRmlsZU5hbWUoZmlsZW5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtUGF0aCA9IGdmdlRvUGF0aE1hcC5nZXQoZ2Z2KTtcbiAgICAgICAgICAgIGlmIChmb3JtUGF0aCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGZvcm1QYXRoLCBcImNvbnZlcnRlcnNcIiwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFNjaGVtYXNGaWxlUGF0aHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi4oYXdhaXQgZ2xvYkFzeW5jKFwic2NoZW1hcy8qXCIsIHsgY3dkOiBnZnZJbmZvLmZvcm1QYXRoIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0U2NoZW1hRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZ2Z2SW5mby5mb3JtUGF0aCwgXCJzY2hlbWFzXCIsIGZpbGVuYW1lKTtcbiAgICAgICAgICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxOb3JtYWxpemVGaWxlUGF0aHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi4oYXdhaXQgZ2xvYkFzeW5jKFwibm9ybWFsaXplLypcIiwgeyBjd2Q6IGdmdkluZm8uZm9ybVBhdGggfSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXROb3JtYWxpemVGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZChmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihnZnZJbmZvLmZvcm1QYXRoLCBcIm5vcm1hbGl6ZVwiLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsVW5tYXBGaWxlUGF0aHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi4oYXdhaXQgZ2xvYkFzeW5jKFwidW5tYXAvKlwiLCB7IGN3ZDogZ2Z2SW5mby5mb3JtUGF0aCB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFVubWFwRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZ2Z2SW5mby5mb3JtUGF0aCwgXCJ1bm1hcFwiLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsTWFwRmlsZVBhdGhzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uKGF3YWl0IGdsb2JBc3luYyhcIm1hcC8qXCIsIHsgY3dkOiBnZnZJbmZvLmZvcm1QYXRoIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0TWFwRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZ2Z2SW5mby5mb3JtUGF0aCwgXCJtYXBcIiwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFBhdGNoRmlsZVBhdGhzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uKGF3YWl0IGdsb2JBc3luYyhcInBhdGNoLypcIiwgeyBjd2Q6IGdmdkluZm8uZm9ybVBhdGggfSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRQYXRjaEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGdmdkluZm8gb2YgYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGdmdkluZm8uZm9ybVBhdGgsIFwicGF0Y2hcIiwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbE1lcmdlcnNGaWxlUGF0aHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi4oYXdhaXQgZ2xvYkFzeW5jKFwibWVyZ2Vycy8qXCIsIHsgY3dkOiBnZnZJbmZvLmZvcm1QYXRoIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0TWVyZ2Vyc0ZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGdmdkluZm8gb2YgYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGdmdkluZm8uZm9ybVBhdGgsIFwibWVyZ2Vyc1wiLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsUHJlc2VudGF0aW9uc0ZpbGVOYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdmdkluZm8gb2YgYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCkpIHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKHBhdGguam9pbihnZnZJbmZvLmZvcm1QYXRoLCBcInByZXNlbnRhdGlvbnMuanNvblwiKSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChgJHtnZnZJbmZvLmdmdn0ucHJlc2VudGF0aW9ucy5qc29uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0UHJlc2VudGF0aW9uc0ZpbGVQYXRoQnlHZnZPclVuZGVmaW5lZChnZnY6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgaWYgKGdmdkluZm8uZ2Z2ID09PSBnZnYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihnZnZJbmZvLmZvcm1QYXRoLCBcInByZXNlbnRhdGlvbnMuanNvblwiKTtcbiAgICAgICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEdBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFJLGVBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFlBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLHdCQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxxQkFBQSxHQUFBUixPQUFBO0FBTU8sTUFBTVMsYUFBYSxDQUFDO0VBTWhCQyxXQUFXQSxDQUFDQyxhQUFxQixFQUFFO0lBQUEsS0FMekJBLGFBQWE7SUFBQSxLQUN0QkMsWUFBWTtJQUFBLEtBQ1pDLFdBQVc7SUFBQSxLQUNGQywyQkFBMkI7SUFHeEMsSUFBSSxDQUFDSCxhQUFhLEdBQUdBLGFBQWE7SUFDbEMsTUFBTUkseUJBQXlCLEdBQUcsSUFBQUMsZUFBTSxFQUFDLENBQUMs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
@@ -13,10 +13,16 @@ function globToRegexp(inputGlob) {
13
13
  }
14
14
  return "[^\\/]*?";
15
15
  }
16
+ if (x === "**") {
17
+ if (index === pathTokens.length - 1) {
18
+ return ".*$";
19
+ }
20
+ return ".*?";
21
+ }
16
22
  if (x.includes("*")) {
17
23
  return x.replace("*", "[^\\/]*?");
18
24
  }
19
25
  return x;
20
26
  }).join("[\\/\\\\]"));
21
27
  }
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnbG9iVG9SZWdleHAiLCJpbnB1dEdsb2IiLCJwYXRoVG9rZW5zIiwic3BsaXQiLCJSZWdFeHAiLCJtYXAiLCJ4IiwiaW5kZXgiLCJsZW5ndGgiLCJpbmNsdWRlcyIsInJlcGxhY2UiLCJqb2luIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL0NMSUNvbW1hbmRzL0J1aWxkU2VydmVyL1Jlc291cmNlc0NvbnRyb2xsZXJzL0dsb2JUb1JlZ2V4cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2xvYlRvUmVnZXhwKGlucHV0R2xvYjogc3RyaW5nKTogUmVnRXhwIHtcbiAgICBjb25zdCBwYXRoVG9rZW5zID0gaW5wdXRHbG9iLnNwbGl0KFwiL1wiKTtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICAgICAgXCJeXCIgK1xuICAgICAgICAgICAgcGF0aFRva2Vuc1xuICAgICAgICAgICAgICAgIC5tYXAoKHgsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4ID09PSBcIipcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBwYXRoVG9rZW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIuKiRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlteXFxcXC9dKj9cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5pbmNsdWRlcyhcIipcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnJlcGxhY2UoXCIqXCIsIFwiW15cXFxcL10qP1wiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKFwiW1xcXFwvXFxcXFxcXFxdXCIpXG4gICAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQU8sU0FBU0EsWUFBWUEsQ0FBQ0MsU0FBaUIsRUFBVTtFQUNwRCxNQUFNQyxVQUFVLEdBQUdELFNBQVMsQ0FBQ0UsS0FBSyxDQUFDLEdBQUcsQ0FBQztFQUN2QyxPQUFPLElBQUlDLE1BQU0sQ0FDYixHQUFHLEdBQ0NGLFVBQVUsQ0FDTEcsR0FBRyxDQUFDLENBQUNDLENBQUMsRUFBRUMsS0FBSyxLQUFLO0lBQ2YsSUFBSUQsQ0FBQyxLQUFLLEdBQUcsRUFBRTtNQUNYLElBQUlDLEtBQUssS0FBS0wsVUFBVSxDQUFDTSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ2pDLE9BQU8sS0FBSztNQUNoQjtNQUNBLE9BQU8sVUFBVTtJQUNyQjtJQUNBLElBQUlGLENBQUMsQ0FBQ0csUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ2pCLE9BQU9ILENBQUMsQ0FBQ0ksT0FBTyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUM7SUFDckM7SUFDQSxPQUFPSixDQUFDO0VBQ1osQ0FBQyxDQUFDLENBQ0RLLElBQUksQ0FBQyxXQUFXLENBQzdCLENBQUM7QUFDTCJ9
28
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnbG9iVG9SZWdleHAiLCJpbnB1dEdsb2IiLCJwYXRoVG9rZW5zIiwic3BsaXQiLCJSZWdFeHAiLCJtYXAiLCJ4IiwiaW5kZXgiLCJsZW5ndGgiLCJpbmNsdWRlcyIsInJlcGxhY2UiLCJqb2luIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL0NMSUNvbW1hbmRzL0J1aWxkU2VydmVyL1Jlc291cmNlc0NvbnRyb2xsZXJzL0dsb2JUb1JlZ2V4cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2xvYlRvUmVnZXhwKGlucHV0R2xvYjogc3RyaW5nKTogUmVnRXhwIHtcbiAgICBjb25zdCBwYXRoVG9rZW5zID0gaW5wdXRHbG9iLnNwbGl0KFwiL1wiKTtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICAgICAgXCJeXCIgK1xuICAgICAgICAgICAgcGF0aFRva2Vuc1xuICAgICAgICAgICAgICAgIC5tYXAoKHgsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4ID09PSBcIipcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBwYXRoVG9rZW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIuKiRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlteXFxcXC9dKj9cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PT0gXCIqKlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHBhdGhUb2tlbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIi4qJFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiLio/XCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHguaW5jbHVkZXMoXCIqXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geC5yZXBsYWNlKFwiKlwiLCBcIlteXFxcXC9dKj9cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbihcIltcXFxcL1xcXFxcXFxcXVwiKVxuICAgICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFPLFNBQVNBLFlBQVlBLENBQUNDLFNBQWlCLEVBQVU7RUFDcEQsTUFBTUMsVUFBVSxHQUFHRCxTQUFTLENBQUNFLEtBQUssQ0FBQyxHQUFHLENBQUM7RUFDdkMsT0FBTyxJQUFJQyxNQUFNLENBQ2IsR0FBRyxHQUNDRixVQUFVLENBQ0xHLEdBQUcsQ0FBQyxDQUFDQyxDQUFDLEVBQUVDLEtBQUssS0FBSztJQUNmLElBQUlELENBQUMsS0FBSyxHQUFHLEVBQUU7TUFDWCxJQUFJQyxLQUFLLEtBQUtMLFVBQVUsQ0FBQ00sTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNqQyxPQUFPLEtBQUs7TUFDaEI7TUFDQSxPQUFPLFVBQVU7SUFDckI7SUFDQSxJQUFJRixDQUFDLEtBQUssSUFBSSxFQUFFO01BQ1osSUFBSUMsS0FBSyxLQUFLTCxVQUFVLENBQUNNLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDakMsT0FBTyxLQUFLO01BQ2hCO01BQ0EsT0FBTyxLQUFLO0lBQ2hCO0lBQ0EsSUFBSUYsQ0FBQyxDQUFDRyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDakIsT0FBT0gsQ0FBQyxDQUFDSSxPQUFPLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQztJQUNyQztJQUNBLE9BQU9KLENBQUM7RUFDWixDQUFDLENBQUMsQ0FDREssSUFBSSxDQUFDLFdBQVcsQ0FDN0IsQ0FBQztBQUNMIn0=
@@ -24,6 +24,8 @@ var _Observe = require("../../Commons/TasksCore/Observe");
24
24
  var _TimingUtils = require("../../Commons/TimingUtils");
25
25
  var _WriteAttachmentPathFiles = require("../../BuildTasks/Form/WriteAttachmentPathFiles");
26
26
  var _getRngSchemaFilename = require("../../../../Common/getRngSchemaFilename");
27
+ var _FormPathUtils = require("../../../../Common/FormPathUtils");
28
+ var _WellKnownDirectories = require("../../../../Common/WellKnownDirectories");
27
29
  async function runDevBuild(context, options, engineDirectory, resourcesDirectory, farmDirectory, candyModulesDirectory, hlFarmDirectoryPath) {
28
30
  const devBuildOptions = options;
29
31
  const engineWebpackConfigTask = await (0, _EngineStructureUtils.createEngineWebpackConfigTask)(engineDirectory);
@@ -32,6 +34,7 @@ async function runDevBuild(context, options, engineDirectory, resourcesDirectory
32
34
  const buildClientJsChain = clientWebpackConfigTask.chainWith(p => new _BuildClientJsTask.BuildClientJsTask(p, resourcesDirectory));
33
35
  const staticResourcesChain = _Observe.Observe.files(_path.default.join(__dirname, "..", "..", "StaticFilesForResourcesDir"), "*.js").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("STATICS"), x, _path.default.join(resourcesDirectory, "public", "scripts")));
34
36
  const pickListsChain = _Observe.Observe.files(_path.default.join(farmDirectory, "picklists"), "*.json").do(x => _FSTask.FSTask.copyRecursively(context.logger.withPrefix("PICKLISTS"), x, _path.default.join(resourcesDirectory, "picklists")));
37
+ const repositoryRoot = _path.default.join(farmDirectory, "..");
35
38
  const formGlobs = await _FormGlobsUtils.FormGlobs.validateGlobs(await _FormGlobsUtils.FormGlobs.resolveSpecifiers(options.formGlobs, farmDirectory), farmDirectory);
36
39
 
37
40
  /** Конвертеры описи для форм, которые пока не реализованы на кенди, сама механика описи перенесена в формы в кенди апи, поэтому они должны быть в candy.resources
@@ -41,11 +44,12 @@ async function runDevBuild(context, options, engineDirectory, resourcesDirectory
41
44
  if (formGlobs[0] === "*") {
42
45
  resourcesExternalConvertersChain = _Observe.Observe.files(_path.default.join(farmDirectory, "externalConverters"), "*.xslt").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("EXTERNAL-CONVERTERS"), x, _path.default.join(resourcesDirectory, "converters")));
43
46
  }
44
- const buildFormsChain = _Observe.Observe.directory(_path.default.join(farmDirectory, "forms"), formGlobs).splitToParallelChains(x => x, x => x, gfv => {
45
- const formDirPath = _path.default.join(farmDirectory, "forms", gfv);
46
- const formSchemasDirPath = _path.default.join(farmDirectory, "forms", gfv, "schemas");
47
+ const buildFormsChain = _Observe.Observe.formDirectories(repositoryRoot, formGlobs).splitToParallelChains(x => x, x => x, async formRelativePath => {
48
+ const gfv = (0, _FormPathUtils.extractGfvFromFormPath)(formRelativePath);
49
+ const formDirPath = _path.default.join(repositoryRoot, formRelativePath);
50
+ const formSchemasDirPath = _path.default.join(formDirPath, "schemas");
47
51
  const rngSchemaMask = `*${(0, _getRngSchemaFilename.getRngSchemaFilename)(formSchemasDirPath, gfv)}`;
48
- return _Observe.Observe.file(_path.default.join(formDirPath, "form.json")).transform(formJsonFile => (0, _ResolveFormInfo.resolveFormInfo)(formJsonFile, formDirPath, engineDirectory)).transform(async x => ({
52
+ return _Observe.Observe.file(_path.default.join(formDirPath, _WellKnownDirectories.WellKnownDirectories.FormJsonFileName)).transform(formJsonFile => (0, _ResolveFormInfo.resolveFormInfo)(formJsonFile, formDirPath, engineDirectory)).transform(async x => ({
49
53
  ...x,
50
54
  generatorSource: (0, _PublishedVersionUtils.resolveLocalGeneratorSource)(engineDirectory),
51
55
  engineSource: (0, _PublishedVersionUtils.resolveLocalEngineSource)(engineDirectory)
@@ -63,7 +67,7 @@ async function runDevBuild(context, options, engineDirectory, resourcesDirectory
63
67
  skipCodeReformatting: options.skipGeneratedCodeReformatting,
64
68
  resourcesHash: fi.dependenciesHash
65
69
  });
66
- }).attach(async fi => _Observe.Observe.files(_path.default.join(formDirPath, "form"), "**/*")).do(fi => (0, _CompileForm.compileForm)(fi.formName, fi.themes, farmDirectory, resourcesDirectory, fi.dependenciesHash, options.buildDebugOnly)).do(fi => (0, _WriteFLangNormalizationFiles.writeFLangNormalizationFiles)(fi.formName, farmDirectory, resourcesDirectory)).do(fi => (0, _WriteAttachmentPathFiles.writeAttachmentPathFiles)(fi.formName, farmDirectory, resourcesDirectory)).do(fi => (0, _WriteFormMeta.writeFormMeta)(resourcesDirectory, gfv, fi.engineSource, fi.dependenciesHash, fi.themes)).attach(async fi => _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "schemas"), rngSchemaMask).do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("SCHEMAS"), x, _path.default.join(resourcesDirectory, "schemas")))).attach(async fi => _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "converters"), "*").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("CONVERTERS"), x, _path.default.join(resourcesDirectory, "converters")))).attach(async fi => _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "mergers"), "*").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("MERGERS"), x, _path.default.join(resourcesDirectory, "mergers")))).attach(async fi => _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "normalize"), "*.xml").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("NORMALIZE"), x, _path.default.join(resourcesDirectory, "normalize")))).attach(async fi => _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "patch"), "*.xslt").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("PATCH"), x, _path.default.join(resourcesDirectory, "patch")))).attach(async fi => _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "map"), "*.xml").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("MAP"), x, _path.default.join(resourcesDirectory, "map")))).attach(async fi => _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "unmap"), "*.xml").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("UNMAP"), x, _path.default.join(resourcesDirectory, "unmap"))));
70
+ }).attach(async fi => _Observe.Observe.files(_path.default.join(formDirPath, "form"), "**/*")).do(fi => (0, _CompileForm.compileForm)(fi.formName, fi.themes, farmDirectory, formDirPath, resourcesDirectory, fi.dependenciesHash, options.buildDebugOnly)).do(fi => (0, _WriteFLangNormalizationFiles.writeFLangNormalizationFiles)(fi.formName, farmDirectory, formDirPath, resourcesDirectory)).do(fi => (0, _WriteAttachmentPathFiles.writeAttachmentPathFiles)(fi.formName, farmDirectory, formDirPath, resourcesDirectory)).do(fi => (0, _WriteFormMeta.writeFormMeta)(resourcesDirectory, gfv, fi.engineSource, fi.dependenciesHash, fi.themes)).attach(async fi => _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "schemas"), rngSchemaMask).do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("SCHEMAS"), x, _path.default.join(resourcesDirectory, "schemas")))).attach(async fi => _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "converters"), "*").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("CONVERTERS"), x, _path.default.join(resourcesDirectory, "converters")))).attach(async fi => _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "mergers"), "*").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("MERGERS"), x, _path.default.join(resourcesDirectory, "mergers")))).attach(async fi => _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "normalize"), "*.xml").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("NORMALIZE"), x, _path.default.join(resourcesDirectory, "normalize")))).attach(async fi => _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "patch"), "*.xslt").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("PATCH"), x, _path.default.join(resourcesDirectory, "patch")))).attach(async fi => _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "map"), "*.xml").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("MAP"), x, _path.default.join(resourcesDirectory, "map")))).attach(async fi => _Observe.Observe.files(_path.default.join(fi.formSourcesPath, "unmap"), "*.xml").do(x => _FSTask.FSTask.copyRecursively((0, _StaticLogger.getLogger)().withPrefix("UNMAP"), x, _path.default.join(resourcesDirectory, "unmap"))));
67
71
  });
68
72
  if (devBuildOptions.watch) {
69
73
  const stopObserve1 = await buildEngineChain.observe();
@@ -98,4 +102,4 @@ async function runDevBuild(context, options, engineDirectory, resourcesDirectory
98
102
  console.log(`${_chalk.default.greenBright("Build success")} Total time: ${(0, _TimingUtils.printTime)(totalTime)}`);
99
103
  }
100
104
  }
101
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NoYWxrIiwiX0J1aWxkQ2xpZW50SnNUYXNrIiwiX0J1aWxkTG9jYWxFbmdpbmVUYXNrIiwiX0VuZ2luZVN0cnVjdHVyZVV0aWxzIiwiX0NvbXBpbGVGb3JtIiwiX0dlbmVyYXRlRm9ybSIsIl9Xcml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIiwiX0ZTVGFzayIsIl9BY3F1aXJlRm9ybUdlbmVyYXRvciIsIl9QdWJsaXNoZWRWZXJzaW9uVXRpbHMiLCJfUmVzb2x2ZUZvcm1JbmZvIiwiX1dyaXRlRm9ybU1ldGEiLCJfRm9ybUdsb2JzVXRpbHMiLCJfU3RhdGljTG9nZ2VyIiwiX09ic2VydmUiLCJfVGltaW5nVXRpbHMiLCJfV3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIiwiX2dldFJuZ1NjaGVtYUZpbGVuYW1lIiwicnVuRGV2QnVpbGQiLCJjb250ZXh0Iiwib3B0aW9ucyIsImVuZ2luZURpcmVjdG9yeSIsInJlc291cmNlc0RpcmVjdG9yeSIsImZhcm1EaXJlY3RvcnkiLCJjYW5keU1vZHVsZXNEaXJlY3RvcnkiLCJobEZhcm1EaXJlY3RvcnlQYXRoIiwiZGV2QnVpbGRPcHRpb25zIiwiZW5naW5lV2VicGFja0NvbmZpZ1Rhc2siLCJjcmVhdGVFbmdpbmVXZWJwYWNrQ29uZmlnVGFzayIsImJ1aWxkRW5naW5lQ2hhaW4iLCJjaGFpbldpdGgiLCJwIiwiQnVpbGRMb2NhbEVuZ2luZVRhc2siLCJidWlsZERlYnVnT25seSIsImNsaWVudFdlYnBhY2tDb25maWdUYXNrIiwiY3JlYXRlQ2xpZW50V2VicGFja0NvbmZpZ1Rhc2siLCJidWlsZENsaWVudEpzQ2hhaW4iLCJCdWlsZENsaWVudEpzVGFzayIsInN0YXRpY1Jlc291cmNlc0NoYWluIiwiT2JzZXJ2ZSIsImZpbGVzIiwicGF0aCIsImpvaW4iLCJfX2Rpcm5hbWUiLCJkbyIsIngiLCJGU1Rhc2siLCJjb3B5UmVjdXJzaXZlbHkiLCJnZXRMb2dnZXIiLCJ3aXRoUHJlZml4IiwicGlja0xpc3RzQ2hhaW4iLCJsb2dnZXIiLCJmb3JtR2xvYnMiLCJGb3JtR2xvYnMiLCJ2YWxpZGF0ZUdsb2JzIiwicmVzb2x2ZVNwZWNpZmllcnMiLCJyZXNvdXJjZXNFeHRlcm5hbENvbnZlcnRlcnNDaGFpbiIsImVtcHR5IiwiYnVpbGRGb3Jtc0NoYWluIiwiZGlyZWN0b3J5Iiwic3BsaXRUb1BhcmFsbGVsQ2hhaW5zIiwiZ2Z2IiwiZm9ybURpclBhdGgiLCJmb3JtU2NoZW1hc0RpclBhdGgiLCJybmdTY2hlbWFNYXNrIiwiZ2V0Um5nU2NoZW1hRmlsZW5hbWUiLCJmaWxlIiwidHJhbnNmb3JtIiwiZm9ybUpzb25GaWxlIiwicmVzb2x2ZUZvcm1JbmZvIiwiZ2VuZXJhdG9yU291cmNlIiwicmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlIiwiZW5naW5lU291cmNlIiwicmVzb2x2ZUxvY2FsRW5naW5lU291cmNlIiwiYXR0YWNoIiwiZmkiLCJnZW5lcmF0b3JGYWN0b3J5IiwidW5kZWZpbmVkIiwieSIsImdlbmVyYXRvciIsImdldEdlbmVyYXRvclNvdXJjZUtleSIsImZvcm1Tb3VyY2VzUGF0aCIsImRlcGVuZGVuY2llc0hhc2giLCJnZXRBbGxEZXBlbmRlbmNpZXNIYXNoIiwic2tpcEdlbmVyYXRpb24iLCJnZW5lcmF0ZUZvcm0iLCJza2lwQ29kZVJlZm9ybWF0dGluZyIsInNraXBHZW5lcmF0ZWRDb2RlUmVmb3JtYXR0aW5nIiwicmVzb3VyY2VzSGFzaCIsImNvbXBpbGVGb3JtIiwiZm9ybU5hbWUiLCJ0aGVtZXMiLCJ3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIiwid3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIiwid3JpdGVGb3JtTWV0YSIsIndhdGNoIiwic3RvcE9ic2VydmUxIiwib2JzZXJ2ZSIsInN0b3BPYnNlcnZlMiIsInN0b3BPYnNlcnZlMyIsInN0b3BPYnNlcnZlNCIsInN0b3BPYnNlcnZlNSIsInN0b3BPYnNlcnZlNiIsIndhaXRGb3JFeGl0Iiwic3RhcnREYXRlIiwiRGF0ZSIsIm5vdyIsIlByb21pc2UiLCJhbGwiLCJjdXJyZW50VmFsdWUiLCJlIiwiY29udGludWVPbkVycm9yIiwiZXJyb3IiLCJ0b3RhbFRpbWUiLCJjb25zb2xlIiwibG9nIiwiY2hhbGsiLCJncmVlbkJyaWdodCIsInByaW50VGltZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9EZXZCdWlsZC9SdW5EZXZCdWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5cbmltcG9ydCB7IEJ1aWxkQ2xpZW50SnNUYXNrIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvQ2xpZW50SlMvQnVpbGRDbGllbnRKc1Rhc2tcIjtcbmltcG9ydCB7IEJ1aWxkTG9jYWxFbmdpbmVUYXNrIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRW5naW5lL0J1aWxkTG9jYWxFbmdpbmVUYXNrXCI7XG5pbXBvcnQgeyBjcmVhdGVDbGllbnRXZWJwYWNrQ29uZmlnVGFzaywgY3JlYXRlRW5naW5lV2VicGFja0NvbmZpZ1Rhc2sgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9FbmdpbmVTdHJ1Y3R1cmVVdGlsc1wiO1xuaW1wb3J0IHsgY29tcGlsZUZvcm0gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0NvbXBpbGVGb3JtXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUZvcm0gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0dlbmVyYXRlRm9ybVwiO1xuaW1wb3J0IHsgd3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlcyB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vV3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlc1wiO1xuaW1wb3J0IHsgRlNUYXNrIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRlNUYXNrXCI7XG5pbXBvcnQgeyBnZW5lcmF0b3JGYWN0b3J5LCBnZXRHZW5lcmF0b3JTb3VyY2VLZXkgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9HZW5lcmF0b3IvQWNxdWlyZUZvcm1HZW5lcmF0b3JcIjtcbmltcG9ydCB7IHJlc29sdmVMb2NhbEVuZ2luZVNvdXJjZSwgcmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvUHVibGlzaGVkVmVyc2lvblV0aWxzXCI7XG5pbXBvcnQgeyByZXNvbHZlRm9ybUluZm8gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9SZXNvbHZlRm9ybUluZm9cIjtcbmltcG9ydCB7IHdyaXRlRm9ybU1ldGEgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Xcml0ZUZvcm1NZXRhXCI7XG5pbXBvcnQgeyBDb25zb2xlQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvQ29uc29sZUFwcGxpY2F0aW9uL0NvbnNvbGVBcHBsaWNhdGlvbkNvbnRleHRcIjtcbmltcG9ydCB7IEZvcm1HbG9icyB9IGZyb20gXCIuLi8uLi9Db21tb25zL0Zvcm1HbG9ic1V0aWxzXCI7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9Mb2dnaW5nL1N0YXRpY0xvZ2dlclwiO1xuaW1wb3J0IHsgT2JzZXJ2ZSB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9PYnNlcnZlXCI7XG5pbXBvcnQgeyBwcmludFRpbWUgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UaW1pbmdVdGlsc1wiO1xuaW1wb3J0IHsgd3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRm9ybS9Xcml0ZUF0dGFjaG1lbnRQYXRoRmlsZXNcIjtcbmltcG9ydCB7IENoYWluYWJsZVZhbHVlUHJvZHVjZXIgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UYXNrc0NvcmUvQ2hhaW5hYmxlVmFsdWVQcm9kdWNlclwiO1xuaW1wb3J0IHsgRW1wdHlQcm9kdWNlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9FbXB0eVByb2R1Y2VyXCI7XG5pbXBvcnQgeyBnZXRSbmdTY2hlbWFGaWxlbmFtZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vZ2V0Um5nU2NoZW1hRmlsZW5hbWVcIjtcblxuaW1wb3J0IHsgRGV2ZWxvcG1lbnRCdWlsZE9wdGlvbnMgfSBmcm9tIFwiLi9EZXZCdWlsZE9wdGlvbnNcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkRldkJ1aWxkKFxuICAgIGNvbnRleHQ6IENvbnNvbGVBcHBsaWNhdGlvbkNvbnRleHQsXG4gICAgb3B0aW9uczogRGV2ZWxvcG1lbnRCdWlsZE9wdGlvbnMsXG4gICAgZW5naW5lRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgcmVzb3VyY2VzRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgZmFybURpcmVjdG9yeTogc3RyaW5nLFxuICAgIGNhbmR5TW9kdWxlc0RpcmVjdG9yeTogc3RyaW5nLFxuICAgIGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGV2QnVpbGRPcHRpb25zID0gb3B0aW9ucztcblxuICAgIGNvbnN0IGVuZ2luZVdlYnBhY2tDb25maWdUYXNrID0gYXdhaXQgY3JlYXRlRW5naW5lV2VicGFja0NvbmZpZ1Rhc2soZW5naW5lRGlyZWN0b3J5KTtcbiAgICBjb25zdCBidWlsZEVuZ2luZUNoYWluID0gZW5naW5lV2VicGFja0NvbmZpZ1Rhc2suY2hhaW5XaXRoKFxuICAgICAgICBwID0+IG5ldyBCdWlsZExvY2FsRW5naW5lVGFzayhwLCByZXNvdXJjZXNEaXJlY3RvcnksIG9wdGlvbnMuYnVpbGREZWJ1Z09ubHkpXG4gICAgKTtcblxuICAgIGNvbnN0IGNsaWVudFdlYnBhY2tDb25maWdUYXNrID0gYXdhaXQgY3JlYXRlQ2xpZW50V2VicGFja0NvbmZpZ1Rhc2soZW5naW5lRGlyZWN0b3J5KTtcbiAgICBjb25zdCBidWlsZENsaWVudEpzQ2hhaW4gPSBjbGllbnRXZWJwYWNrQ29uZmlnVGFzay5jaGFpbldpdGgocCA9PiBuZXcgQnVpbGRDbGllbnRKc1Rhc2socCwgcmVzb3VyY2VzRGlyZWN0b3J5KSk7XG5cbiAgICBjb25zdCBzdGF0aWNSZXNvdXJjZXNDaGFpbiA9IE9ic2VydmUuZmlsZXMoXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcIlN0YXRpY0ZpbGVzRm9yUmVzb3VyY2VzRGlyXCIpLFxuICAgICAgICBcIiouanNcIlxuICAgICkuZG8oeCA9PlxuICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJTVEFUSUNTXCIpLCB4LCBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInB1YmxpY1wiLCBcInNjcmlwdHNcIikpXG4gICAgKTtcblxuICAgIGNvbnN0IHBpY2tMaXN0c0NoYWluID0gT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJwaWNrbGlzdHNcIiksIFwiKi5qc29uXCIpLmRvKHggPT5cbiAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShjb250ZXh0LmxvZ2dlci53aXRoUHJlZml4KFwiUElDS0xJU1RTXCIpLCB4LCBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInBpY2tsaXN0c1wiKSlcbiAgICApO1xuXG4gICAgY29uc3QgZm9ybUdsb2JzID0gYXdhaXQgRm9ybUdsb2JzLnZhbGlkYXRlR2xvYnMoXG4gICAgICAgIGF3YWl0IEZvcm1HbG9icy5yZXNvbHZlU3BlY2lmaWVycyhvcHRpb25zLmZvcm1HbG9icywgZmFybURpcmVjdG9yeSksXG4gICAgICAgIGZhcm1EaXJlY3RvcnlcbiAgICApO1xuXG4gICAgLyoqINCa0L7QvdCy0LXRgNGC0LXRgNGLINC+0L/QuNGB0Lgg0LTQu9GPINGE0L7RgNC8LCDQutC+0YLQvtGA0YvQtSDQv9C+0LrQsCDQvdC1INGA0LXQsNC70LjQt9C+0LLQsNC90Ysg0L3QsCDQutC10L3QtNC4LCDRgdCw0LzQsCDQvNC10YXQsNC90LjQutCwINC+0L/QuNGB0Lgg0L/QtdGA0LXQvdC10YHQtdC90LAg0LIg0YTQvtGA0LzRiyDQsiDQutC10L3QtNC4INCw0L/QuCwg0L/QvtGN0YLQvtC80YMg0L7QvdC4INC00L7Qu9C20L3RiyDQsdGL0YLRjCDQsiBjYW5keS5yZXNvdXJjZXNcbiAgICAgKiAg0KDQtdCw0LvQuNC30YPQtdGC0YHRjyDRgtC+0LvRjNC60L4g0L/RgNC4INC+0LHRidC10Lwg0LHQuNC70LTQtSDRhNC+0YDQvDogY2FuZHkgYnVpbGQgKlxuICAgICAqICovXG4gICAgbGV0IHJlc291cmNlc0V4dGVybmFsQ29udmVydGVyc0NoYWluOiBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPHN0cmluZz4gfCBFbXB0eVByb2R1Y2VyID0gT2JzZXJ2ZS5lbXB0eSgpO1xuICAgIGlmIChmb3JtR2xvYnNbMF0gPT09IFwiKlwiKSB7XG4gICAgICAgIHJlc291cmNlc0V4dGVybmFsQ29udmVydGVyc0NoYWluID0gT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJleHRlcm5hbENvbnZlcnRlcnNcIiksIFwiKi54c2x0XCIpLmRvKFxuICAgICAgICAgICAgeCA9PlxuICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJFWFRFUk5BTC1DT05WRVJURVJTXCIpLFxuICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcImNvbnZlcnRlcnNcIilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRGb3Jtc0NoYWluID0gT2JzZXJ2ZS5kaXJlY3RvcnkocGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiksIGZvcm1HbG9icykuc3BsaXRUb1BhcmFsbGVsQ2hhaW5zKFxuICAgICAgICB4ID0+IHgsXG4gICAgICAgIHggPT4geCxcbiAgICAgICAgZ2Z2ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EaXJQYXRoID0gcGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiwgZ2Z2KTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1TY2hlbWFzRGlyUGF0aCA9IHBhdGguam9pbihmYXJtRGlyZWN0b3J5LCBcImZvcm1zXCIsIGdmdiwgXCJzY2hlbWFzXCIpO1xuICAgICAgICAgICAgY29uc3Qgcm5nU2NoZW1hTWFzayA9IGAqJHtnZXRSbmdTY2hlbWFGaWxlbmFtZShmb3JtU2NoZW1hc0RpclBhdGgsIGdmdil9YDtcblxuICAgICAgICAgICAgcmV0dXJuIE9ic2VydmUuZmlsZShwYXRoLmpvaW4oZm9ybURpclBhdGgsIFwiZm9ybS5qc29uXCIpKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oZm9ybUpzb25GaWxlID0+IHJlc29sdmVGb3JtSW5mbyhmb3JtSnNvbkZpbGUsIGZvcm1EaXJQYXRoLCBlbmdpbmVEaXJlY3RvcnkpKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgeCA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JTb3VyY2U6IHJlc29sdmVMb2NhbEdlbmVyYXRvclNvdXJjZShlbmdpbmVEaXJlY3RvcnkpLFxuICAgICAgICAgICAgICAgICAgICBlbmdpbmVTb3VyY2U6IHJlc29sdmVMb2NhbEVuZ2luZVNvdXJjZShlbmdpbmVEaXJlY3RvcnkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IGdlbmVyYXRvckZhY3RvcnkoZmkuZ2VuZXJhdG9yU291cmNlLCBjYW5keU1vZHVsZXNEaXJlY3RvcnksIGZhbHNlLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICBhc3luYyAoZmksIHkpID0+ICh7IC4uLmZpLCBnZW5lcmF0b3I6IHkgfSksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IGdldEdlbmVyYXRvclNvdXJjZUtleShmaS5nZW5lcmF0b3JTb3VyY2UpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1Tb3VyY2VzUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLi4vLi4vY29udHJvbHMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2hlbWFzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3VnYXIvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250cm9scy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF1dG9jYWxjLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaGVscGVycy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInZhbGlkYXRpb25zLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibG9jYWxpemF0aW9uLyoqLypcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgZmkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZmksXG4gICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llc0hhc2g6IGF3YWl0IGZpLmdlbmVyYXRvci5nZXRBbGxEZXBlbmRlbmNpZXNIYXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURpclBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNraXBHZW5lcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtU291cmNlc1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmdlbmVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwQ29kZVJlZm9ybWF0dGluZzogb3B0aW9ucy5za2lwR2VuZXJhdGVkQ29kZVJlZm9ybWF0dGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNIYXNoOiBmaS5kZXBlbmRlbmNpZXNIYXNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PiBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmb3JtRGlyUGF0aCwgXCJmb3JtXCIpLCBcIioqLypcIikpXG4gICAgICAgICAgICAgICAgLmRvKGZpID0+XG4gICAgICAgICAgICAgICAgICAgIGNvbXBpbGVGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS50aGVtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZGVwZW5kZW5jaWVzSGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYnVpbGREZWJ1Z09ubHlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuZG8oZmkgPT4gd3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlcyhmaS5mb3JtTmFtZSwgZmFybURpcmVjdG9yeSwgcmVzb3VyY2VzRGlyZWN0b3J5KSlcbiAgICAgICAgICAgICAgICAuZG8oZmkgPT4gd3JpdGVBdHRhY2htZW50UGF0aEZpbGVzKGZpLmZvcm1OYW1lLCBmYXJtRGlyZWN0b3J5LCByZXNvdXJjZXNEaXJlY3RvcnkpKVxuICAgICAgICAgICAgICAgIC5kbyhmaSA9PiB3cml0ZUZvcm1NZXRhKHJlc291cmNlc0RpcmVjdG9yeSwgZ2Z2LCBmaS5lbmdpbmVTb3VyY2UsIGZpLmRlcGVuZGVuY2llc0hhc2gsIGZpLnRoZW1lcykpXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwic2NoZW1hc1wiKSwgcm5nU2NoZW1hTWFzaykuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiU0NIRU1BU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwic2NoZW1hc1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcImNvbnZlcnRlcnNcIiksIFwiKlwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJDT05WRVJURVJTXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJjb252ZXJ0ZXJzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwibWVyZ2Vyc1wiKSwgXCIqXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIk1FUkdFUlNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcIm1lcmdlcnNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJub3JtYWxpemVcIiksIFwiKi54bWxcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiTk9STUFMSVpFXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJub3JtYWxpemVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJwYXRjaFwiKSwgXCIqLnhzbHRcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiUEFUQ0hcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInBhdGNoXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwibWFwXCIpLCBcIioueG1sXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIk1BUFwiKSwgeCwgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJtYXBcIikpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwidW5tYXBcIiksIFwiKi54bWxcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiVU5NQVBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInVubWFwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGlmIChkZXZCdWlsZE9wdGlvbnMud2F0Y2gpIHtcbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmUxID0gYXdhaXQgYnVpbGRFbmdpbmVDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlMiA9IGF3YWl0IGJ1aWxkQ2xpZW50SnNDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlMyA9IGF3YWl0IHN0YXRpY1Jlc291cmNlc0NoYWluLm9ic2VydmUoKTtcbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmU0ID0gYXdhaXQgYnVpbGRGb3Jtc0NoYWluLm9ic2VydmUoKTtcbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmU1ID0gYXdhaXQgcGlja0xpc3RzQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTYgPSBhd2FpdCByZXNvdXJjZXNFeHRlcm5hbENvbnZlcnRlcnNDaGFpbi5vYnNlcnZlKCk7XG5cbiAgICAgICAgYXdhaXQgY29udGV4dC53YWl0Rm9yRXhpdCgpO1xuXG4gICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlMSgpO1xuICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTIoKTtcbiAgICAgICAgYXdhaXQgc3RvcE9ic2VydmUzKCk7XG4gICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlNCgpO1xuICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTUoKTtcbiAgICAgICAgYXdhaXQgc3RvcE9ic2VydmU2KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gRGF0ZS5ub3coKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgYnVpbGRFbmdpbmVDaGFpbi5jdXJyZW50VmFsdWUsXG4gICAgICAgICAgICBidWlsZENsaWVudEpzQ2hhaW4uY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgc3RhdGljUmVzb3VyY2VzQ2hhaW4uY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgcmVzb3VyY2VzRXh0ZXJuYWxDb252ZXJ0ZXJzQ2hhaW4uY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBwaWNrTGlzdHNDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJ1aWxkRm9ybXNDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jb250aW51ZU9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9nZ2VyLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKCksXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCB0b3RhbFRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnREYXRlO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmxvZyhgJHtjaGFsay5ncmVlbkJyaWdodChcIkJ1aWxkIHN1Y2Nlc3NcIil9IFRvdGFsIHRpbWU6ICR7cHJpbnRUaW1lKHRvdGFsVGltZSl9YCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUUsa0JBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLHFCQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxxQkFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sYUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sNkJBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLE9BQUEsR0FB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
105
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NoYWxrIiwiX0J1aWxkQ2xpZW50SnNUYXNrIiwiX0J1aWxkTG9jYWxFbmdpbmVUYXNrIiwiX0VuZ2luZVN0cnVjdHVyZVV0aWxzIiwiX0NvbXBpbGVGb3JtIiwiX0dlbmVyYXRlRm9ybSIsIl9Xcml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIiwiX0ZTVGFzayIsIl9BY3F1aXJlRm9ybUdlbmVyYXRvciIsIl9QdWJsaXNoZWRWZXJzaW9uVXRpbHMiLCJfUmVzb2x2ZUZvcm1JbmZvIiwiX1dyaXRlRm9ybU1ldGEiLCJfRm9ybUdsb2JzVXRpbHMiLCJfU3RhdGljTG9nZ2VyIiwiX09ic2VydmUiLCJfVGltaW5nVXRpbHMiLCJfV3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIiwiX2dldFJuZ1NjaGVtYUZpbGVuYW1lIiwiX0Zvcm1QYXRoVXRpbHMiLCJfV2VsbEtub3duRGlyZWN0b3JpZXMiLCJydW5EZXZCdWlsZCIsImNvbnRleHQiLCJvcHRpb25zIiwiZW5naW5lRGlyZWN0b3J5IiwicmVzb3VyY2VzRGlyZWN0b3J5IiwiZmFybURpcmVjdG9yeSIsImNhbmR5TW9kdWxlc0RpcmVjdG9yeSIsImhsRmFybURpcmVjdG9yeVBhdGgiLCJkZXZCdWlsZE9wdGlvbnMiLCJlbmdpbmVXZWJwYWNrQ29uZmlnVGFzayIsImNyZWF0ZUVuZ2luZVdlYnBhY2tDb25maWdUYXNrIiwiYnVpbGRFbmdpbmVDaGFpbiIsImNoYWluV2l0aCIsInAiLCJCdWlsZExvY2FsRW5naW5lVGFzayIsImJ1aWxkRGVidWdPbmx5IiwiY2xpZW50V2VicGFja0NvbmZpZ1Rhc2siLCJjcmVhdGVDbGllbnRXZWJwYWNrQ29uZmlnVGFzayIsImJ1aWxkQ2xpZW50SnNDaGFpbiIsIkJ1aWxkQ2xpZW50SnNUYXNrIiwic3RhdGljUmVzb3VyY2VzQ2hhaW4iLCJPYnNlcnZlIiwiZmlsZXMiLCJwYXRoIiwiam9pbiIsIl9fZGlybmFtZSIsImRvIiwieCIsIkZTVGFzayIsImNvcHlSZWN1cnNpdmVseSIsImdldExvZ2dlciIsIndpdGhQcmVmaXgiLCJwaWNrTGlzdHNDaGFpbiIsImxvZ2dlciIsInJlcG9zaXRvcnlSb290IiwiZm9ybUdsb2JzIiwiRm9ybUdsb2JzIiwidmFsaWRhdGVHbG9icyIsInJlc29sdmVTcGVjaWZpZXJzIiwicmVzb3VyY2VzRXh0ZXJuYWxDb252ZXJ0ZXJzQ2hhaW4iLCJlbXB0eSIsImJ1aWxkRm9ybXNDaGFpbiIsImZvcm1EaXJlY3RvcmllcyIsInNwbGl0VG9QYXJhbGxlbENoYWlucyIsImZvcm1SZWxhdGl2ZVBhdGgiLCJnZnYiLCJleHRyYWN0R2Z2RnJvbUZvcm1QYXRoIiwiZm9ybURpclBhdGgiLCJmb3JtU2NoZW1hc0RpclBhdGgiLCJybmdTY2hlbWFNYXNrIiwiZ2V0Um5nU2NoZW1hRmlsZW5hbWUiLCJmaWxlIiwiV2VsbEtub3duRGlyZWN0b3JpZXMiLCJGb3JtSnNvbkZpbGVOYW1lIiwidHJhbnNmb3JtIiwiZm9ybUpzb25GaWxlIiwicmVzb2x2ZUZvcm1JbmZvIiwiZ2VuZXJhdG9yU291cmNlIiwicmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlIiwiZW5naW5lU291cmNlIiwicmVzb2x2ZUxvY2FsRW5naW5lU291cmNlIiwiYXR0YWNoIiwiZmkiLCJnZW5lcmF0b3JGYWN0b3J5IiwidW5kZWZpbmVkIiwieSIsImdlbmVyYXRvciIsImdldEdlbmVyYXRvclNvdXJjZUtleSIsImZvcm1Tb3VyY2VzUGF0aCIsImRlcGVuZGVuY2llc0hhc2giLCJnZXRBbGxEZXBlbmRlbmNpZXNIYXNoIiwic2tpcEdlbmVyYXRpb24iLCJnZW5lcmF0ZUZvcm0iLCJza2lwQ29kZVJlZm9ybWF0dGluZyIsInNraXBHZW5lcmF0ZWRDb2RlUmVmb3JtYXR0aW5nIiwicmVzb3VyY2VzSGFzaCIsImNvbXBpbGVGb3JtIiwiZm9ybU5hbWUiLCJ0aGVtZXMiLCJ3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIiwid3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIiwid3JpdGVGb3JtTWV0YSIsIndhdGNoIiwic3RvcE9ic2VydmUxIiwib2JzZXJ2ZSIsInN0b3BPYnNlcnZlMiIsInN0b3BPYnNlcnZlMyIsInN0b3BPYnNlcnZlNCIsInN0b3BPYnNlcnZlNSIsInN0b3BPYnNlcnZlNiIsIndhaXRGb3JFeGl0Iiwic3RhcnREYXRlIiwiRGF0ZSIsIm5vdyIsIlByb21pc2UiLCJhbGwiLCJjdXJyZW50VmFsdWUiLCJlIiwiY29udGludWVPbkVycm9yIiwiZXJyb3IiLCJ0b3RhbFRpbWUiLCJjb25zb2xlIiwibG9nIiwiY2hhbGsiLCJncmVlbkJyaWdodCIsInByaW50VGltZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9EZXZCdWlsZC9SdW5EZXZCdWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5cbmltcG9ydCB7IEJ1aWxkQ2xpZW50SnNUYXNrIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvQ2xpZW50SlMvQnVpbGRDbGllbnRKc1Rhc2tcIjtcbmltcG9ydCB7IEJ1aWxkTG9jYWxFbmdpbmVUYXNrIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRW5naW5lL0J1aWxkTG9jYWxFbmdpbmVUYXNrXCI7XG5pbXBvcnQgeyBjcmVhdGVDbGllbnRXZWJwYWNrQ29uZmlnVGFzaywgY3JlYXRlRW5naW5lV2VicGFja0NvbmZpZ1Rhc2sgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9FbmdpbmVTdHJ1Y3R1cmVVdGlsc1wiO1xuaW1wb3J0IHsgY29tcGlsZUZvcm0gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0NvbXBpbGVGb3JtXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUZvcm0gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0dlbmVyYXRlRm9ybVwiO1xuaW1wb3J0IHsgd3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlcyB9IGZyb20gXCIuLi8uLi9CdWlsZFRhc2tzL0Zvcm0vV3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlc1wiO1xuaW1wb3J0IHsgRlNUYXNrIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRlNUYXNrXCI7XG5pbXBvcnQgeyBnZW5lcmF0b3JGYWN0b3J5LCBnZXRHZW5lcmF0b3JTb3VyY2VLZXkgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9HZW5lcmF0b3IvQWNxdWlyZUZvcm1HZW5lcmF0b3JcIjtcbmltcG9ydCB7IHJlc29sdmVMb2NhbEVuZ2luZVNvdXJjZSwgcmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvUHVibGlzaGVkVmVyc2lvblV0aWxzXCI7XG5pbXBvcnQgeyByZXNvbHZlRm9ybUluZm8gfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9SZXNvbHZlRm9ybUluZm9cIjtcbmltcG9ydCB7IHdyaXRlRm9ybU1ldGEgfSBmcm9tIFwiLi4vLi4vQnVpbGRUYXNrcy9Xcml0ZUZvcm1NZXRhXCI7XG5pbXBvcnQgeyBDb25zb2xlQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvQ29uc29sZUFwcGxpY2F0aW9uL0NvbnNvbGVBcHBsaWNhdGlvbkNvbnRleHRcIjtcbmltcG9ydCB7IEZvcm1HbG9icyB9IGZyb20gXCIuLi8uLi9Db21tb25zL0Zvcm1HbG9ic1V0aWxzXCI7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9Mb2dnaW5nL1N0YXRpY0xvZ2dlclwiO1xuaW1wb3J0IHsgT2JzZXJ2ZSB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9PYnNlcnZlXCI7XG5pbXBvcnQgeyBwcmludFRpbWUgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UaW1pbmdVdGlsc1wiO1xuaW1wb3J0IHsgd3JpdGVBdHRhY2htZW50UGF0aEZpbGVzIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvRm9ybS9Xcml0ZUF0dGFjaG1lbnRQYXRoRmlsZXNcIjtcbmltcG9ydCB7IENoYWluYWJsZVZhbHVlUHJvZHVjZXIgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9UYXNrc0NvcmUvQ2hhaW5hYmxlVmFsdWVQcm9kdWNlclwiO1xuaW1wb3J0IHsgRW1wdHlQcm9kdWNlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9FbXB0eVByb2R1Y2VyXCI7XG5pbXBvcnQgeyBnZXRSbmdTY2hlbWFGaWxlbmFtZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vZ2V0Um5nU2NoZW1hRmlsZW5hbWVcIjtcbmltcG9ydCB7IGV4dHJhY3RHZnZGcm9tRm9ybVBhdGggfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0Zvcm1QYXRoVXRpbHNcIjtcbmltcG9ydCB7IFdlbGxLbm93bkRpcmVjdG9yaWVzIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9XZWxsS25vd25EaXJlY3Rvcmllc1wiO1xuXG5pbXBvcnQgeyBEZXZlbG9wbWVudEJ1aWxkT3B0aW9ucyB9IGZyb20gXCIuL0RldkJ1aWxkT3B0aW9uc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRGV2QnVpbGQoXG4gICAgY29udGV4dDogQ29uc29sZUFwcGxpY2F0aW9uQ29udGV4dCxcbiAgICBvcHRpb25zOiBEZXZlbG9wbWVudEJ1aWxkT3B0aW9ucyxcbiAgICBlbmdpbmVEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICByZXNvdXJjZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBmYXJtRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgY2FuZHlNb2R1bGVzRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgaGxGYXJtRGlyZWN0b3J5UGF0aDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkZXZCdWlsZE9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgY29uc3QgZW5naW5lV2VicGFja0NvbmZpZ1Rhc2sgPSBhd2FpdCBjcmVhdGVFbmdpbmVXZWJwYWNrQ29uZmlnVGFzayhlbmdpbmVEaXJlY3RvcnkpO1xuICAgIGNvbnN0IGJ1aWxkRW5naW5lQ2hhaW4gPSBlbmdpbmVXZWJwYWNrQ29uZmlnVGFzay5jaGFpbldpdGgoXG4gICAgICAgIHAgPT4gbmV3IEJ1aWxkTG9jYWxFbmdpbmVUYXNrKHAsIHJlc291cmNlc0RpcmVjdG9yeSwgb3B0aW9ucy5idWlsZERlYnVnT25seSlcbiAgICApO1xuXG4gICAgY29uc3QgY2xpZW50V2VicGFja0NvbmZpZ1Rhc2sgPSBhd2FpdCBjcmVhdGVDbGllbnRXZWJwYWNrQ29uZmlnVGFzayhlbmdpbmVEaXJlY3RvcnkpO1xuICAgIGNvbnN0IGJ1aWxkQ2xpZW50SnNDaGFpbiA9IGNsaWVudFdlYnBhY2tDb25maWdUYXNrLmNoYWluV2l0aChwID0+IG5ldyBCdWlsZENsaWVudEpzVGFzayhwLCByZXNvdXJjZXNEaXJlY3RvcnkpKTtcblxuICAgIGNvbnN0IHN0YXRpY1Jlc291cmNlc0NoYWluID0gT2JzZXJ2ZS5maWxlcyhcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiU3RhdGljRmlsZXNGb3JSZXNvdXJjZXNEaXJcIiksXG4gICAgICAgIFwiKi5qc1wiXG4gICAgKS5kbyh4ID0+XG4gICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIlNUQVRJQ1NcIiksIHgsIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwicHVibGljXCIsIFwic2NyaXB0c1wiKSlcbiAgICApO1xuXG4gICAgY29uc3QgcGlja0xpc3RzQ2hhaW4gPSBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmYXJtRGlyZWN0b3J5LCBcInBpY2tsaXN0c1wiKSwgXCIqLmpzb25cIikuZG8oeCA9PlxuICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KGNvbnRleHQubG9nZ2VyLndpdGhQcmVmaXgoXCJQSUNLTElTVFNcIiksIHgsIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwicGlja2xpc3RzXCIpKVxuICAgICk7XG5cbiAgICBjb25zdCByZXBvc2l0b3J5Um9vdCA9IHBhdGguam9pbihmYXJtRGlyZWN0b3J5LCBcIi4uXCIpO1xuICAgIGNvbnN0IGZvcm1HbG9icyA9IGF3YWl0IEZvcm1HbG9icy52YWxpZGF0ZUdsb2JzKFxuICAgICAgICBhd2FpdCBGb3JtR2xvYnMucmVzb2x2ZVNwZWNpZmllcnMob3B0aW9ucy5mb3JtR2xvYnMsIGZhcm1EaXJlY3RvcnkpLFxuICAgICAgICBmYXJtRGlyZWN0b3J5XG4gICAgKTtcblxuICAgIC8qKiDQmtC+0L3QstC10YDRgtC10YDRiyDQvtC/0LjRgdC4INC00LvRjyDRhNC+0YDQvCwg0LrQvtGC0L7RgNGL0LUg0L/QvtC60LAg0L3QtSDRgNC10LDQu9C40LfQvtCy0LDQvdGLINC90LAg0LrQtdC90LTQuCwg0YHQsNC80LAg0LzQtdGF0LDQvdC40LrQsCDQvtC/0LjRgdC4INC/0LXRgNC10L3QtdGB0LXQvdCwINCyINGE0L7RgNC80Ysg0LIg0LrQtdC90LTQuCDQsNC/0LgsINC/0L7RjdGC0L7QvNGDINC+0L3QuCDQtNC+0LvQttC90Ysg0LHRi9GC0Ywg0LIgY2FuZHkucmVzb3VyY2VzXG4gICAgICogINCg0LXQsNC70LjQt9GD0LXRgtGB0Y8g0YLQvtC70YzQutC+INC/0YDQuCDQvtCx0YnQtdC8INCx0LjQu9C00LUg0YTQvtGA0Lw6IGNhbmR5IGJ1aWxkICpcbiAgICAgKiAqL1xuICAgIGxldCByZXNvdXJjZXNFeHRlcm5hbENvbnZlcnRlcnNDaGFpbjogQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxzdHJpbmc+IHwgRW1wdHlQcm9kdWNlciA9IE9ic2VydmUuZW1wdHkoKTtcbiAgICBpZiAoZm9ybUdsb2JzWzBdID09PSBcIipcIikge1xuICAgICAgICByZXNvdXJjZXNFeHRlcm5hbENvbnZlcnRlcnNDaGFpbiA9IE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwiZXh0ZXJuYWxDb252ZXJ0ZXJzXCIpLCBcIioueHNsdFwiKS5kbyhcbiAgICAgICAgICAgIHggPT5cbiAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiRVhURVJOQUwtQ09OVkVSVEVSU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJjb252ZXJ0ZXJzXCIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1aWxkRm9ybXNDaGFpbiA9IE9ic2VydmUuZm9ybURpcmVjdG9yaWVzKHJlcG9zaXRvcnlSb290LCBmb3JtR2xvYnMpLnNwbGl0VG9QYXJhbGxlbENoYWlucyhcbiAgICAgICAgeCA9PiB4LFxuICAgICAgICB4ID0+IHgsXG4gICAgICAgIGFzeW5jIGZvcm1SZWxhdGl2ZVBhdGggPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2Z2ID0gZXh0cmFjdEdmdkZyb21Gb3JtUGF0aChmb3JtUmVsYXRpdmVQYXRoKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EaXJQYXRoID0gcGF0aC5qb2luKHJlcG9zaXRvcnlSb290LCBmb3JtUmVsYXRpdmVQYXRoKTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1TY2hlbWFzRGlyUGF0aCA9IHBhdGguam9pbihmb3JtRGlyUGF0aCwgXCJzY2hlbWFzXCIpO1xuICAgICAgICAgICAgY29uc3Qgcm5nU2NoZW1hTWFzayA9IGAqJHtnZXRSbmdTY2hlbWFGaWxlbmFtZShmb3JtU2NoZW1hc0RpclBhdGgsIGdmdil9YDtcblxuICAgICAgICAgICAgcmV0dXJuIE9ic2VydmUuZmlsZShwYXRoLmpvaW4oZm9ybURpclBhdGgsIFdlbGxLbm93bkRpcmVjdG9yaWVzLkZvcm1Kc29uRmlsZU5hbWUpKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oZm9ybUpzb25GaWxlID0+IHJlc29sdmVGb3JtSW5mbyhmb3JtSnNvbkZpbGUsIGZvcm1EaXJQYXRoLCBlbmdpbmVEaXJlY3RvcnkpKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgeCA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JTb3VyY2U6IHJlc29sdmVMb2NhbEdlbmVyYXRvclNvdXJjZShlbmdpbmVEaXJlY3RvcnkpLFxuICAgICAgICAgICAgICAgICAgICBlbmdpbmVTb3VyY2U6IHJlc29sdmVMb2NhbEVuZ2luZVNvdXJjZShlbmdpbmVEaXJlY3RvcnkpLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IGdlbmVyYXRvckZhY3RvcnkoZmkuZ2VuZXJhdG9yU291cmNlLCBjYW5keU1vZHVsZXNEaXJlY3RvcnksIGZhbHNlLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICBhc3luYyAoZmksIHkpID0+ICh7IC4uLmZpLCBnZW5lcmF0b3I6IHkgfSksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IGdldEdlbmVyYXRvclNvdXJjZUtleShmaS5nZW5lcmF0b3JTb3VyY2UpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1Tb3VyY2VzUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLi4vLi4vY29udHJvbHMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2hlbWFzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3VnYXIvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250cm9scy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF1dG9jYWxjLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaGVscGVycy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInZhbGlkYXRpb25zLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibG9jYWxpemF0aW9uLyoqLypcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgZmkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZmksXG4gICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llc0hhc2g6IGF3YWl0IGZpLmdlbmVyYXRvci5nZXRBbGxEZXBlbmRlbmNpZXNIYXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURpclBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNraXBHZW5lcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtU291cmNlc1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmdlbmVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwQ29kZVJlZm9ybWF0dGluZzogb3B0aW9ucy5za2lwR2VuZXJhdGVkQ29kZVJlZm9ybWF0dGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNIYXNoOiBmaS5kZXBlbmRlbmNpZXNIYXNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PiBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmb3JtRGlyUGF0aCwgXCJmb3JtXCIpLCBcIioqLypcIikpXG4gICAgICAgICAgICAgICAgLmRvKGZpID0+XG4gICAgICAgICAgICAgICAgICAgIGNvbXBpbGVGb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS50aGVtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURpclBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBmaS5kZXBlbmRlbmNpZXNIYXNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5idWlsZERlYnVnT25seVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5kbyhmaSA9PiB3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzKGZpLmZvcm1OYW1lLCBmYXJtRGlyZWN0b3J5LCBmb3JtRGlyUGF0aCwgcmVzb3VyY2VzRGlyZWN0b3J5KSlcbiAgICAgICAgICAgICAgICAuZG8oZmkgPT4gd3JpdGVBdHRhY2htZW50UGF0aEZpbGVzKGZpLmZvcm1OYW1lLCBmYXJtRGlyZWN0b3J5LCBmb3JtRGlyUGF0aCwgcmVzb3VyY2VzRGlyZWN0b3J5KSlcbiAgICAgICAgICAgICAgICAuZG8oZmkgPT4gd3JpdGVGb3JtTWV0YShyZXNvdXJjZXNEaXJlY3RvcnksIGdmdiwgZmkuZW5naW5lU291cmNlLCBmaS5kZXBlbmRlbmNpZXNIYXNoLCBmaS50aGVtZXMpKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcInNjaGVtYXNcIiksIHJuZ1NjaGVtYU1hc2spLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIlNDSEVNQVNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcInNjaGVtYXNcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0YWNoKGFzeW5jIGZpID0+XG4gICAgICAgICAgICAgICAgICAgIE9ic2VydmUuZmlsZXMocGF0aC5qb2luKGZpLmZvcm1Tb3VyY2VzUGF0aCwgXCJjb252ZXJ0ZXJzXCIpLCBcIipcIikuZG8oeCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgRlNUYXNrLmNvcHlSZWN1cnNpdmVseShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMb2dnZXIoKS53aXRoUHJlZml4KFwiQ09OVkVSVEVSU1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwiY29udmVydGVyc1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcIm1lcmdlcnNcIiksIFwiKlwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJNRVJHRVJTXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJtZXJnZXJzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwibm9ybWFsaXplXCIpLCBcIioueG1sXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIk5PUk1BTElaRVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwibm9ybWFsaXplXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKHBhdGguam9pbihmaS5mb3JtU291cmNlc1BhdGgsIFwicGF0Y2hcIiksIFwiKi54c2x0XCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIlBBVENIXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJwYXRjaFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcIm1hcFwiKSwgXCIqLnhtbFwiKS5kbyh4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBGU1Rhc2suY29weVJlY3Vyc2l2ZWx5KGdldExvZ2dlcigpLndpdGhQcmVmaXgoXCJNQVBcIiksIHgsIHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwibWFwXCIpKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhwYXRoLmpvaW4oZmkuZm9ybVNvdXJjZXNQYXRoLCBcInVubWFwXCIpLCBcIioueG1sXCIpLmRvKHggPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZTVGFzay5jb3B5UmVjdXJzaXZlbHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TG9nZ2VyKCkud2l0aFByZWZpeChcIlVOTUFQXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5qb2luKHJlc291cmNlc0RpcmVjdG9yeSwgXCJ1bm1hcFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAoZGV2QnVpbGRPcHRpb25zLndhdGNoKSB7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlMSA9IGF3YWl0IGJ1aWxkRW5naW5lQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTIgPSBhd2FpdCBidWlsZENsaWVudEpzQ2hhaW4ub2JzZXJ2ZSgpO1xuICAgICAgICBjb25zdCBzdG9wT2JzZXJ2ZTMgPSBhd2FpdCBzdGF0aWNSZXNvdXJjZXNDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlNCA9IGF3YWl0IGJ1aWxkRm9ybXNDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgIGNvbnN0IHN0b3BPYnNlcnZlNSA9IGF3YWl0IHBpY2tMaXN0c0NoYWluLm9ic2VydmUoKTtcbiAgICAgICAgY29uc3Qgc3RvcE9ic2VydmU2ID0gYXdhaXQgcmVzb3VyY2VzRXh0ZXJuYWxDb252ZXJ0ZXJzQ2hhaW4ub2JzZXJ2ZSgpO1xuXG4gICAgICAgIGF3YWl0IGNvbnRleHQud2FpdEZvckV4aXQoKTtcblxuICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTEoKTtcbiAgICAgICAgYXdhaXQgc3RvcE9ic2VydmUyKCk7XG4gICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlMygpO1xuICAgICAgICBhd2FpdCBzdG9wT2JzZXJ2ZTQoKTtcbiAgICAgICAgYXdhaXQgc3RvcE9ic2VydmU1KCk7XG4gICAgICAgIGF3YWl0IHN0b3BPYnNlcnZlNigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IERhdGUubm93KCk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIGJ1aWxkRW5naW5lQ2hhaW4uY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgYnVpbGRDbGllbnRKc0NoYWluLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIHN0YXRpY1Jlc291cmNlc0NoYWluLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIHJlc291cmNlc0V4dGVybmFsQ29udmVydGVyc0NoYWluLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcGlja0xpc3RzQ2hhaW4uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBidWlsZEZvcm1zQ2hhaW4uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29udGludWVPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvZ2dlci5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpLFxuICAgICAgICBdKTtcbiAgICAgICAgY29uc3QgdG90YWxUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0RGF0ZTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5sb2coYCR7Y2hhbGsuZ3JlZW5CcmlnaHQoXCJCdWlsZCBzdWNjZXNzXCIpfSBUb3RhbCB0aW1lOiAke3ByaW50VGltZSh0b3RhbFRpbWUpfWApO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFFLGtCQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxxQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUkscUJBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFlBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLGFBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLDZCQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxPQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxxQkFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsc0JBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLGdCQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSxjQUFBLEdBQUFaLE9BQUE7QUFFQSxJQUFBYSxlQUFBLEdBQUFiLE9BQUE7QUFDQSxJQUFBYyxhQUFBLEdBQUFkLE9BQUE7QUFDQSxJQUFBZSxRQUFBLEdBQUFmLE9BQUE7QUFDQSxJQUFBZ0IsWUFBQSxHQUFBaEIsT0FBQTtBQUNBLElBQUFpQix5QkFBQSxHQUFBakIsT0FBQTtBQUdBLElBQUFrQixxQkFBQSxHQUFBbEIsT0FBQTtBQUNBLElBQUFtQixjQUFBLEdBQUFuQixPQUFBO0FBQ0EsSUFBQW9CLHFCQUFBLEdBQUFwQixPQUFBO0FBSU8sZUFBZXFCLFdBQVdBLENBQzdCQyxPQUFrQyxFQUNs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
@@ -9,6 +9,7 @@ var _path = _interopRequireDefault(require("path"));
9
9
  var _ResolveFormInfo = require("../../BuildTasks/ResolveFormInfo");
10
10
  var _FormGlobsUtils = require("../../Commons/FormGlobsUtils");
11
11
  var _IterableUtils = require("../../../../Common/IterableUtils");
12
+ var _WellKnownDirectories = require("../../../../Common/WellKnownDirectories");
12
13
  async function runFormStats(context, options, farmDirectory) {
13
14
  const formGlobs = await _FormGlobsUtils.FormGlobs.validateGlobs(await _FormGlobsUtils.FormGlobs.resolveSpecifiers(options.formGlobs, farmDirectory), farmDirectory);
14
15
  const gfvs = await _FormGlobsUtils.FormGlobs.resolveGlobsToGfvs(formGlobs, farmDirectory);
@@ -16,7 +17,8 @@ async function runFormStats(context, options, farmDirectory) {
16
17
  for (const gfv of gfvs) {
17
18
  try {
18
19
  var _engineToGfvMap$engin, _engineToGfvMap$engin2;
19
- const formJsonContent = await (0, _ResolveFormInfo.readFormConfig)(_path.default.join(farmDirectory, "forms", gfv, "form.json"), context.logger);
20
+ // TODO
21
+ const formJsonContent = await (0, _ResolveFormInfo.readFormConfig)(_path.default.join(farmDirectory, "forms", gfv, _WellKnownDirectories.WellKnownDirectories.FormJsonFileName), context.logger);
20
22
  let engineBranch;
21
23
  if (formJsonContent.mode === "copy-legacy-prebuilt-resources") {
22
24
  engineBranch = "LegacyCopyPrebuilt";
@@ -43,4 +45,4 @@ async function runFormStats(context, options, farmDirectory) {
43
45
  context.logger.log(` ${gfvs.join(", ")}`);
44
46
  }
45
47
  }
46
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX1Jlc29sdmVGb3JtSW5mbyIsIl9Gb3JtR2xvYnNVdGlscyIsIl9JdGVyYWJsZVV0aWxzIiwicnVuRm9ybVN0YXRzIiwiY29udGV4dCIsIm9wdGlvbnMiLCJmYXJtRGlyZWN0b3J5IiwiZm9ybUdsb2JzIiwiRm9ybUdsb2JzIiwidmFsaWRhdGVHbG9icyIsInJlc29sdmVTcGVjaWZpZXJzIiwiZ2Z2cyIsInJlc29sdmVHbG9ic1RvR2Z2cyIsImVuZ2luZVRvR2Z2TWFwIiwiZ2Z2IiwiX2VuZ2luZVRvR2Z2TWFwJGVuZ2luIiwiX2VuZ2luZVRvR2Z2TWFwJGVuZ2luMiIsImZvcm1Kc29uQ29udGVudCIsInJlYWRGb3JtQ29uZmlnIiwicGF0aCIsImpvaW4iLCJsb2dnZXIiLCJlbmdpbmVCcmFuY2giLCJtb2RlIiwiX2Zvcm1Kc29uQ29udGVudCRkZXBlIiwiX2Zvcm1Kc29uQ29udGVudCRkZXBlMiIsImRlcGVuZGVuY2llcyIsImVuZ2luZSIsInB1c2giLCJlIiwiZW5naW5lR2Z2cyIsIml0ZXJhdGVFbnRyaWVzIiwibG9nIiwibGVuZ3RoIiwiT2JqZWN0Iiwia2V5cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9Gb3JtU3RhdHMvUnVuRm9ybVN0YXRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IHJlYWRGb3JtQ29uZmlnIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvUmVzb2x2ZUZvcm1JbmZvXCI7XG5pbXBvcnQgeyBDb25zb2xlQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvQ29uc29sZUFwcGxpY2F0aW9uL0NvbnNvbGVBcHBsaWNhdGlvbkNvbnRleHRcIjtcbmltcG9ydCB7IEZvcm1HbG9icyB9IGZyb20gXCIuLi8uLi9Db21tb25zL0Zvcm1HbG9ic1V0aWxzXCI7XG5pbXBvcnQgeyBpdGVyYXRlRW50cmllcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vSXRlcmFibGVVdGlsc1wiO1xuXG5pbXBvcnQgeyBGb3JtU3RhdHNPcHRpb25zIH0gZnJvbSBcIi4vRm9ybVN0YXRzT3B0aW9uc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRm9ybVN0YXRzKFxuICAgIGNvbnRleHQ6IENvbnNvbGVBcHBsaWNhdGlvbkNvbnRleHQsXG4gICAgb3B0aW9uczogRm9ybVN0YXRzT3B0aW9ucyxcbiAgICBmYXJtRGlyZWN0b3J5OiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZvcm1HbG9icyA9IGF3YWl0IEZvcm1HbG9icy52YWxpZGF0ZUdsb2JzKFxuICAgICAgICBhd2FpdCBGb3JtR2xvYnMucmVzb2x2ZVNwZWNpZmllcnMob3B0aW9ucy5mb3JtR2xvYnMsIGZhcm1EaXJlY3RvcnkpLFxuICAgICAgICBmYXJtRGlyZWN0b3J5XG4gICAgKTtcbiAgICBjb25zdCBnZnZzID0gYXdhaXQgRm9ybUdsb2JzLnJlc29sdmVHbG9ic1RvR2Z2cyhmb3JtR2xvYnMsIGZhcm1EaXJlY3RvcnkpO1xuXG4gICAgY29uc3QgZW5naW5lVG9HZnZNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICAgIGZvciAoY29uc3QgZ2Z2IG9mIGdmdnMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1Kc29uQ29udGVudCA9IGF3YWl0IHJlYWRGb3JtQ29uZmlnKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihmYXJtRGlyZWN0b3J5LCBcImZvcm1zXCIsIGdmdiwgXCJmb3JtLmpzb25cIiksXG4gICAgICAgICAgICAgICAgY29udGV4dC5sb2dnZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgZW5naW5lQnJhbmNoOiBzdHJpbmc7XG4gICAgICAgICAgICBpZiAoZm9ybUpzb25Db250ZW50Lm1vZGUgPT09IFwiY29weS1sZWdhY3ktcHJlYnVpbHQtcmVzb3VyY2VzXCIpIHtcbiAgICAgICAgICAgICAgICBlbmdpbmVCcmFuY2ggPSBcIkxlZ2FjeUNvcHlQcmVidWlsdFwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtSnNvbkNvbnRlbnQubW9kZSA9PT0gXCJuby1lZGl0b3JcIikge1xuICAgICAgICAgICAgICAgIGVuZ2luZUJyYW5jaCA9IFwiTm9FZGl0b3JcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZW5naW5lQnJhbmNoID0gZm9ybUpzb25Db250ZW50LmRlcGVuZGVuY2llcz8uZW5naW5lID8/IFwiVW5rbm93blwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW5naW5lVG9HZnZNYXBbZW5naW5lQnJhbmNoXSA9IGVuZ2luZVRvR2Z2TWFwW2VuZ2luZUJyYW5jaF0gPz8gW107XG4gICAgICAgICAgICBlbmdpbmVUb0dmdk1hcFtlbmdpbmVCcmFuY2hdPy5wdXNoKGdmdik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVuZ2luZVRvR2Z2TWFwW1wiVW5rbm93blwiXSA9IGVuZ2luZVRvR2Z2TWFwW1wiVW5rbm93blwiXSB8fCBbXTtcbiAgICAgICAgICAgIGVuZ2luZVRvR2Z2TWFwW1wiVW5rbm93blwiXS5wdXNoKGdmdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtlbmdpbmUsIGVuZ2luZUdmdnNdIG9mIGl0ZXJhdGVFbnRyaWVzKGVuZ2luZVRvR2Z2TWFwKSkge1xuICAgICAgICBjb250ZXh0LmxvZ2dlci5sb2coZW5naW5lKTtcbiAgICAgICAgY29udGV4dC5sb2dnZXIubG9nKGAgICR7ZW5naW5lR2Z2cy5sZW5ndGh9IGZvcm1zYCk7XG4gICAgfVxuICAgIGNvbnRleHQubG9nZ2VyLmxvZyhcIlwiKTtcbiAgICBmb3IgKGNvbnN0IGVuZ2luZSBvZiBPYmplY3Qua2V5cyhlbmdpbmVUb0dmdk1hcCkpIHtcbiAgICAgICAgY29udGV4dC5sb2dnZXIubG9nKGVuZ2luZSk7XG4gICAgICAgIGNvbnRleHQubG9nZ2VyLmxvZyhgICAke2dmdnMuam9pbihcIiwgXCIpfWApO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLGdCQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxlQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxjQUFBLEdBQUFILE9BQUE7QUFJTyxlQUFlSSxZQUFZQSxDQUM5QkMsT0FBa0MsRUFDbENDLE9BQXlCLEVBQ3pCQyxhQUFxQixFQUNSO0VBQ2IsTUFBTUMsU0FBUyxHQUFHLE1BQU1DLHlCQUFTLENBQUNDLGFBQWEsQ0FDM0MsTUFBTUQseUJBQVMsQ0FBQ0UsaUJBQWlCLENBQUNMLE9BQU8sQ0FBQ0UsU0FBUyxFQUFFRCxhQUFhLENBQUMsRUFDbkVBLGFBQ0osQ0FBQztFQUNELE1BQU1LLElBQUksR0FBRyxNQUFNSCx5QkFBUyxDQUFDSSxrQkFBa0IsQ0FBQ0wsU0FBUyxFQUFFRCxhQUFhLENBQUM7RUFFekUsTUFBTU8sY0FBd0MsR0FBRyxDQUFDLENBQUM7RUFDbkQsS0FBSyxNQUFNQyxHQUFHLElBQUlILElBQUksRUFBRTtJQUNwQixJQUFJO01BQUEsSUFBQUkscUJBQUEsRUFBQUMsc0JBQUE7TUFDQSxNQUFNQyxlQUFlLEdBQUcsTUFBTSxJQUFBQywrQkFBYyxFQUN4Q0MsYUFBSSxDQUFDQyxJQUFJLENBQUNkLGFBQWEsRUFBRSxPQUFPLEVBQUVRLEdBQUcsRUFBRSxXQUFXLENBQUMsRUFDbkRWLE9BQU8sQ0FBQ2lCLE1BQ1osQ0FBQztNQUNELElBQUlDLFlBQW9CO01BQ3hCLElBQUlMLGVBQWUsQ0FBQ00sSUFBSSxLQUFLLGdDQUFnQyxFQUFFO1FBQzNERCxZQUFZLEdBQUcsb0JBQW9CO01BQ3ZDLENBQUMsTUFBTSxJQUFJTCxlQUFlLENBQUNNLElBQUksS0FBSyxXQUFXLEVBQUU7UUFDN0NELFlBQVksR0FBRyxVQUFVO01BQzdCLENBQUMsTUFBTTtRQUFBLElBQUFFLHFCQUFBLEVBQUFDLHNCQUFBO1FBQ0hILFlBQVksSUFBQUUscUJBQUEsSUFBQUMsc0JBQUEsR0FBR1IsZUFBZSxDQUFDUyxZQUFZLGNBQUFELHNCQUFBLHVCQUE1QkEsc0JBQUEsQ0FBOEJFLE1BQU0sY0FBQUgscUJBQUEsY0FBQUEscUJBQUEsR0FBSSxTQUFTO01BQ3BFO01BQ0FYLGNBQWMsQ0FBQ1MsWUFBWSxDQUFDLElBQUFQLHFCQUFBLEdBQUdGLGNBQWMsQ0FBQ1MsWUFBWSxDQUFDLGNBQUFQLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksRUFBRTtNQUNqRSxDQUFBQyxzQkFBQSxHQUFBSCxjQUFjLENBQUNTLFlBQVksQ0FBQyxjQUFBTixzQkFBQSx1QkFBNUJBLHNCQUFBLENBQThCWSxJQUFJLENBQUNkLEdBQUcsQ0FBQztJQUMzQyxDQUFDLENBQUMsT0FBT2UsQ0FBQyxFQUFFO01BQ1JoQixjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUdBLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO01BQzNEQSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUNlLElBQUksQ0FBQ2QsR0FBRyxDQUFDO0lBQ3ZDO0VBQ0o7RUFFQSxLQUFLLE1BQU0sQ0FBQ2EsTUFBTSxFQUFFRyxVQUFVLENBQUMsSUFBSSxJQUFBQyw2QkFBYyxFQUFDbEIsY0FBYyxDQUFDLEVBQUU7SUFDL0RULE9BQU8sQ0FBQ2lCLE1BQU0sQ0FBQ1csR0FBRyxDQUFDTCxNQUFNLENBQUM7SUFDMUJ2QixPQUFPLENBQUNpQixNQUFNLENBQUNXLEdBQUcsQ0FBRSxLQUFJRixVQUFVLENBQUNHLE1BQU8sUUFBTyxDQUFDO0VBQ3REO0VBQ0E3QixPQUFPLENBQUNpQixNQUFNLENBQUNXLEdBQUcsQ0FBQyxFQUFFLENBQUM7RUFDdEIsS0FBSyxNQUFNTCxNQUFNLElBQUlPLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDdEIsY0FBYyxDQUFDLEVBQUU7SUFDOUNULE9BQU8sQ0FBQ2lCLE1BQU0sQ0FBQ1csR0FBRyxDQUFDTCxNQUFNLENBQUM7SUFDMUJ2QixPQUFPLENBQUNpQixNQUFNLENBQUNXLEdBQUcsQ0FBRSxLQUFJckIsSUFBSSxDQUFDUyxJQUFJLENBQUMsSUFBSSxDQUFFLEVBQUMsQ0FBQztFQUM5QztBQUNKIn0=
48
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX1Jlc29sdmVGb3JtSW5mbyIsIl9Gb3JtR2xvYnNVdGlscyIsIl9JdGVyYWJsZVV0aWxzIiwiX1dlbGxLbm93bkRpcmVjdG9yaWVzIiwicnVuRm9ybVN0YXRzIiwiY29udGV4dCIsIm9wdGlvbnMiLCJmYXJtRGlyZWN0b3J5IiwiZm9ybUdsb2JzIiwiRm9ybUdsb2JzIiwidmFsaWRhdGVHbG9icyIsInJlc29sdmVTcGVjaWZpZXJzIiwiZ2Z2cyIsInJlc29sdmVHbG9ic1RvR2Z2cyIsImVuZ2luZVRvR2Z2TWFwIiwiZ2Z2IiwiX2VuZ2luZVRvR2Z2TWFwJGVuZ2luIiwiX2VuZ2luZVRvR2Z2TWFwJGVuZ2luMiIsImZvcm1Kc29uQ29udGVudCIsInJlYWRGb3JtQ29uZmlnIiwicGF0aCIsImpvaW4iLCJXZWxsS25vd25EaXJlY3RvcmllcyIsIkZvcm1Kc29uRmlsZU5hbWUiLCJsb2dnZXIiLCJlbmdpbmVCcmFuY2giLCJtb2RlIiwiX2Zvcm1Kc29uQ29udGVudCRkZXBlIiwiX2Zvcm1Kc29uQ29udGVudCRkZXBlMiIsImRlcGVuZGVuY2llcyIsImVuZ2luZSIsInB1c2giLCJlIiwiZW5naW5lR2Z2cyIsIml0ZXJhdGVFbnRyaWVzIiwibG9nIiwibGVuZ3RoIiwiT2JqZWN0Iiwia2V5cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9Gb3JtU3RhdHMvUnVuRm9ybVN0YXRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IHJlYWRGb3JtQ29uZmlnIH0gZnJvbSBcIi4uLy4uL0J1aWxkVGFza3MvUmVzb2x2ZUZvcm1JbmZvXCI7XG5pbXBvcnQgeyBDb25zb2xlQXBwbGljYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvQ29uc29sZUFwcGxpY2F0aW9uL0NvbnNvbGVBcHBsaWNhdGlvbkNvbnRleHRcIjtcbmltcG9ydCB7IEZvcm1HbG9icyB9IGZyb20gXCIuLi8uLi9Db21tb25zL0Zvcm1HbG9ic1V0aWxzXCI7XG5pbXBvcnQgeyBpdGVyYXRlRW50cmllcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vSXRlcmFibGVVdGlsc1wiO1xuXG5pbXBvcnQgeyBGb3JtU3RhdHNPcHRpb25zIH0gZnJvbSBcIi4vRm9ybVN0YXRzT3B0aW9uc1wiO1xuaW1wb3J0IHsgV2VsbEtub3duRGlyZWN0b3JpZXMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1dlbGxLbm93bkRpcmVjdG9yaWVzXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Gb3JtU3RhdHMoXG4gICAgY29udGV4dDogQ29uc29sZUFwcGxpY2F0aW9uQ29udGV4dCxcbiAgICBvcHRpb25zOiBGb3JtU3RhdHNPcHRpb25zLFxuICAgIGZhcm1EaXJlY3Rvcnk6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZm9ybUdsb2JzID0gYXdhaXQgRm9ybUdsb2JzLnZhbGlkYXRlR2xvYnMoXG4gICAgICAgIGF3YWl0IEZvcm1HbG9icy5yZXNvbHZlU3BlY2lmaWVycyhvcHRpb25zLmZvcm1HbG9icywgZmFybURpcmVjdG9yeSksXG4gICAgICAgIGZhcm1EaXJlY3RvcnlcbiAgICApO1xuICAgIGNvbnN0IGdmdnMgPSBhd2FpdCBGb3JtR2xvYnMucmVzb2x2ZUdsb2JzVG9HZnZzKGZvcm1HbG9icywgZmFybURpcmVjdG9yeSk7XG5cbiAgICBjb25zdCBlbmdpbmVUb0dmdk1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG4gICAgZm9yIChjb25zdCBnZnYgb2YgZ2Z2cykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgY29uc3QgZm9ybUpzb25Db250ZW50ID0gYXdhaXQgcmVhZEZvcm1Db25maWcoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKGZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiwgZ2Z2LCBXZWxsS25vd25EaXJlY3Rvcmllcy5Gb3JtSnNvbkZpbGVOYW1lKSxcbiAgICAgICAgICAgICAgICBjb250ZXh0LmxvZ2dlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBlbmdpbmVCcmFuY2g6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChmb3JtSnNvbkNvbnRlbnQubW9kZSA9PT0gXCJjb3B5LWxlZ2FjeS1wcmVidWlsdC1yZXNvdXJjZXNcIikge1xuICAgICAgICAgICAgICAgIGVuZ2luZUJyYW5jaCA9IFwiTGVnYWN5Q29weVByZWJ1aWx0XCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1Kc29uQ29udGVudC5tb2RlID09PSBcIm5vLWVkaXRvclwiKSB7XG4gICAgICAgICAgICAgICAgZW5naW5lQnJhbmNoID0gXCJOb0VkaXRvclwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbmdpbmVCcmFuY2ggPSBmb3JtSnNvbkNvbnRlbnQuZGVwZW5kZW5jaWVzPy5lbmdpbmUgPz8gXCJVbmtub3duXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmdpbmVUb0dmdk1hcFtlbmdpbmVCcmFuY2hdID0gZW5naW5lVG9HZnZNYXBbZW5naW5lQnJhbmNoXSA/PyBbXTtcbiAgICAgICAgICAgIGVuZ2luZVRvR2Z2TWFwW2VuZ2luZUJyYW5jaF0/LnB1c2goZ2Z2KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZW5naW5lVG9HZnZNYXBbXCJVbmtub3duXCJdID0gZW5naW5lVG9HZnZNYXBbXCJVbmtub3duXCJdIHx8IFtdO1xuICAgICAgICAgICAgZW5naW5lVG9HZnZNYXBbXCJVbmtub3duXCJdLnB1c2goZ2Z2KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2VuZ2luZSwgZW5naW5lR2Z2c10gb2YgaXRlcmF0ZUVudHJpZXMoZW5naW5lVG9HZnZNYXApKSB7XG4gICAgICAgIGNvbnRleHQubG9nZ2VyLmxvZyhlbmdpbmUpO1xuICAgICAgICBjb250ZXh0LmxvZ2dlci5sb2coYCAgJHtlbmdpbmVHZnZzLmxlbmd0aH0gZm9ybXNgKTtcbiAgICB9XG4gICAgY29udGV4dC5sb2dnZXIubG9nKFwiXCIpO1xuICAgIGZvciAoY29uc3QgZW5naW5lIG9mIE9iamVjdC5rZXlzKGVuZ2luZVRvR2Z2TWFwKSkge1xuICAgICAgICBjb250ZXh0LmxvZ2dlci5sb2coZW5naW5lKTtcbiAgICAgICAgY29udGV4dC5sb2dnZXIubG9nKGAgICR7Z2Z2cy5qb2luKFwiLCBcIil9YCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsZ0JBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLGVBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGNBQUEsR0FBQUgsT0FBQTtBQUdBLElBQUFJLHFCQUFBLEdBQUFKLE9BQUE7QUFFTyxlQUFlSyxZQUFZQSxDQUM5QkMsT0FBa0MsRUFDbENDLE9BQXlCLEVBQ3pCQyxhQUFxQixFQUNSO0VBQ2IsTUFBTUMsU0FBUyxHQUFHLE1BQU1DLHlCQUFTLENBQUNDLGFBQWEsQ0FDM0MsTUFBTUQseUJBQVMsQ0FBQ0UsaUJBQWlCLENBQUNMLE9BQU8sQ0FBQ0UsU0FBUyxFQUFFRCxhQUFhLENBQUMsRUFDbkVBLGFBQ0osQ0FBQztFQUNELE1BQU1LLElBQUksR0FBRyxNQUFNSCx5QkFBUyxDQUFDSSxrQkFBa0IsQ0FBQ0wsU0FBUyxFQUFFRCxhQUFhLENBQUM7RUFFekUsTUFBTU8sY0FBd0MsR0FBRyxDQUFDLENBQUM7RUFDbkQsS0FBSyxNQUFNQyxHQUFHLElBQUlILElBQUksRUFBRTtJQUNwQixJQUFJO01BQUEsSUFBQUkscUJBQUEsRUFBQUMsc0JBQUE7TUFDQTtNQUNBLE1BQU1DLGVBQWUsR0FBRyxNQUFNLElBQUFDLCtCQUFjLEVBQ3hDQyxhQUFJLENBQUNDLElBQUksQ0FBQ2QsYUFBYSxFQUFFLE9BQU8sRUFBRVEsR0FBRyxFQUFFTywwQ0FBb0IsQ0FBQ0MsZ0JBQWdCLENBQUMsRUFDN0VsQixPQUFPLENBQUNtQixNQUNaLENBQUM7TUFDRCxJQUFJQyxZQUFvQjtNQUN4QixJQUFJUCxlQUFlLENBQUNRLElBQUksS0FBSyxnQ0FBZ0MsRUFBRTtRQUMzREQsWUFBWSxHQUFHLG9CQUFvQjtNQUN2QyxDQUFDLE1BQU0sSUFBSVAsZUFBZSxDQUFDUSxJQUFJLEtBQUssV0FBVyxFQUFFO1FBQzdDRCxZQUFZLEdBQUcsVUFBVTtNQUM3QixDQUFDLE1BQU07UUFBQSxJQUFBRSxxQkFBQSxFQUFBQyxzQkFBQTtRQUNISCxZQUFZLElBQUFFLHFCQUFBLElBQUFDLHNCQUFBLEdBQUdWLGVBQWUsQ0FBQ1csWUFBWSxjQUFBRCxzQkFBQSx1QkFBNUJBLHNCQUFBLENBQThCRSxNQUFNLGNBQUFILHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksU0FBUztNQUNwRTtNQUNBYixjQUFjLENBQUNXLFlBQVksQ0FBQyxJQUFBVCxxQkFBQSxHQUFHRixjQUFjLENBQUNXLFlBQVksQ0FBQyxjQUFBVCxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLEVBQUU7TUFDakUsQ0FBQUMsc0JBQUEsR0FBQUgsY0FBYyxDQUFDVyxZQUFZLENBQUMsY0FBQVIsc0JBQUEsdUJBQTVCQSxzQkFBQSxDQUE4QmMsSUFBSSxDQUFDaEIsR0FBRyxDQUFDO0lBQzNDLENBQUMsQ0FBQyxPQUFPaUIsQ0FBQyxFQUFFO01BQ1JsQixjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUdBLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO01BQzNEQSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUNpQixJQUFJLENBQUNoQixHQUFHLENBQUM7SUFDdkM7RUFDSjtFQUVBLEtBQUssTUFBTSxDQUFDZSxNQUFNLEVBQUVHLFVBQVUsQ0FBQyxJQUFJLElBQUFDLDZCQUFjLEVBQUNwQixjQUFjLENBQUMsRUFBRTtJQUMvRFQsT0FBTyxDQUFDbUIsTUFBTSxDQUFDVyxHQUFHLENBQUNMLE1BQU0sQ0FBQztJQUMxQnpCLE9BQU8sQ0FBQ21CLE1BQU0sQ0FBQ1csR0FBRyxDQUFFLEtBQUlGLFVBQVUsQ0FBQ0csTUFBTyxRQUFPLENBQUM7RUFDdEQ7RUFDQS9CLE9BQU8sQ0FBQ21CLE1BQU0sQ0FBQ1csR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUN0QixLQUFLLE1BQU1MLE1BQU0sSUFBSU8sTUFBTSxDQUFDQyxJQUFJLENBQUN4QixjQUFjLENBQUMsRUFBRTtJQUM5Q1QsT0FBTyxDQUFDbUIsTUFBTSxDQUFDVyxHQUFHLENBQUNMLE1BQU0sQ0FBQztJQUMxQnpCLE9BQU8sQ0FBQ21CLE1BQU0sQ0FBQ1csR0FBRyxDQUFFLEtBQUl2QixJQUFJLENBQUNTLElBQUksQ0FBQyxJQUFJLENBQUUsRUFBQyxDQUFDO0VBQzlDO0FBQ0oifQ==