@sd-angular/core 1.3.29 → 1.3.31

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 (62) hide show
  1. package/bundles/sd-angular-core-common.umd.js.map +1 -1
  2. package/bundles/sd-angular-core-common.umd.min.js.map +1 -1
  3. package/bundles/sd-angular-core-export.umd.js +38 -44
  4. package/bundles/sd-angular-core-export.umd.js.map +1 -1
  5. package/bundles/sd-angular-core-export.umd.min.js +1 -1
  6. package/bundles/sd-angular-core-export.umd.min.js.map +1 -1
  7. package/bundles/sd-angular-core-grid.umd.js +50 -187
  8. package/bundles/sd-angular-core-grid.umd.js.map +1 -1
  9. package/bundles/sd-angular-core-grid.umd.min.js +1 -1
  10. package/bundles/sd-angular-core-grid.umd.min.js.map +1 -1
  11. package/bundles/sd-angular-core-upload-excel.umd.js.map +1 -1
  12. package/bundles/sd-angular-core-upload-excel.umd.min.js.map +1 -1
  13. package/bundles/sd-angular-core.umd.js +4 -4
  14. package/bundles/sd-angular-core.umd.min.js +1 -1
  15. package/bundles/sd-angular-core.umd.min.js.map +1 -1
  16. package/common/sd-angular-core-common.metadata.json +1 -1
  17. package/common/src/lib/configurations/firebase.configuration.d.ts +1 -0
  18. package/esm2015/common/src/lib/configurations/firebase.configuration.js +1 -1
  19. package/esm2015/export/src/lib/export.model.js +1 -3
  20. package/esm2015/export/src/lib/export.service.js +25 -34
  21. package/esm2015/grid/src/lib/components/grid-popup-export-excel/grid-popup-export-excel.component.js +35 -27
  22. package/esm2015/grid/src/lib/components/grid-popup-export-excel/grid-popup-export-excel.model.js +1 -1
  23. package/esm2015/grid/src/lib/grid.component.js +11 -118
  24. package/esm2015/public-api.js +1 -3
  25. package/esm2015/upload-excel/src/lib/upload-excel.component.js +1 -1
  26. package/export/sd-angular-core-export.metadata.json +1 -1
  27. package/export/src/lib/export.model.d.ts +0 -15
  28. package/export/src/lib/export.service.d.ts +6 -4
  29. package/fesm2015/sd-angular-core-common.js.map +1 -1
  30. package/fesm2015/sd-angular-core-export.js +25 -35
  31. package/fesm2015/sd-angular-core-export.js.map +1 -1
  32. package/fesm2015/sd-angular-core-grid.js +43 -142
  33. package/fesm2015/sd-angular-core-grid.js.map +1 -1
  34. package/fesm2015/sd-angular-core-upload-excel.js.map +1 -1
  35. package/fesm2015/sd-angular-core.js +0 -1
  36. package/fesm2015/sd-angular-core.js.map +1 -1
  37. package/grid/sd-angular-core-grid.metadata.json +1 -1
  38. package/grid/src/lib/components/grid-popup-export-excel/grid-popup-export-excel.component.d.ts +12 -12
  39. package/grid/src/lib/components/grid-popup-export-excel/grid-popup-export-excel.model.d.ts +1 -2
  40. package/grid/src/lib/grid.component.d.ts +5 -6
  41. package/package.json +1 -1
  42. package/public-api.d.ts +0 -1
  43. package/{sd-angular-core-1.3.29.tgz → sd-angular-core-1.3.31.tgz} +0 -0
  44. package/upload-excel/sd-angular-core-upload-excel.metadata.json +1 -1
  45. package/bundles/sd-angular-core-excel.umd.js +0 -500
  46. package/bundles/sd-angular-core-excel.umd.js.map +0 -1
  47. package/bundles/sd-angular-core-excel.umd.min.js +0 -16
  48. package/bundles/sd-angular-core-excel.umd.min.js.map +0 -1
  49. package/esm2015/excel/index.js +0 -2
  50. package/esm2015/excel/sd-angular-core-excel.js +0 -5
  51. package/esm2015/excel/src/lib/excel.model.js +0 -3
  52. package/esm2015/excel/src/lib/excel.service.js +0 -91
  53. package/esm2015/excel/src/public-api.js +0 -6
  54. package/excel/index.d.ts +0 -1
  55. package/excel/package.json +0 -12
  56. package/excel/sd-angular-core-excel.d.ts +0 -4
  57. package/excel/sd-angular-core-excel.metadata.json +0 -1
  58. package/excel/src/lib/excel.model.d.ts +0 -65
  59. package/excel/src/lib/excel.service.d.ts +0 -26
  60. package/excel/src/public-api.d.ts +0 -2
  61. package/fesm2015/sd-angular-core-excel.js +0 -100
  62. package/fesm2015/sd-angular-core-excel.js.map +0 -1
@@ -7,20 +7,21 @@ import * as uuid from 'uuid';
7
7
  import hash from 'object-hash';
8
8
  import { ExportToCsv } from 'export-to-csv';
9
9
  import * as XLSX from 'xlsx';
10
- import { EXPORT_CONFIG, API } from './export.model';
10
+ import { API } from './export.model';
11
11
  import { SdNotifyService } from '@sd-angular/core/notify';
12
12
  import { SdUtilityService } from '@sd-angular/core/utility';
13
+ import { FIREBASE_CONFIG } from '@sd-angular/core/common';
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "@sd-angular/core/api";
15
16
  import * as i2 from "@sd-angular/core/utility";
16
17
  import * as i3 from "@sd-angular/core/notify";
17
- import * as i4 from "./export.model";
18
+ import * as i4 from "@sd-angular/core/common";
18
19
  export class SdExportService {
19
- constructor(apiService, utilityService, notifyService, configuration) {
20
+ constructor(apiService, utilityService, notifyService, firebaseConfiguration) {
20
21
  this.apiService = apiService;
21
22
  this.utilityService = utilityService;
22
23
  this.notifyService = notifyService;
23
- this.configuration = configuration;
24
+ this.firebaseConfiguration = firebaseConfiguration;
24
25
  _directory.set(this, (key, group) => {
25
26
  let hashedFolder = hash({
26
27
  folder: this.folder,
@@ -36,11 +37,8 @@ export class SdExportService {
36
37
  return `dir1=${this.folder}&dir2=G-${hashedFolder}&dir3=${key || ''}`;
37
38
  });
38
39
  this.generateTemplate = (template) => __awaiter(this, void 0, void 0, function* () {
39
- const { firebaseUrl } = this.configuration;
40
40
  const { sdGenerateTemplate } = API;
41
- const url = `${firebaseUrl}${sdGenerateTemplate}`;
42
- // const { filePath, fileName } = await this.apiService.post(url, template);
43
- // return { filePath, fileName };
41
+ const url = `${this.functionUrl}${sdGenerateTemplate}`;
44
42
  const buffer = yield this.apiService.post(url, template, null, {
45
43
  responseType: 'arraybuffer'
46
44
  });
@@ -49,9 +47,8 @@ export class SdExportService {
49
47
  });
50
48
  this.uploadTemplate = (args) => __awaiter(this, void 0, void 0, function* () {
51
49
  const { key, group, validator } = args;
52
- const { firebaseUrl } = this.configuration;
53
50
  const { uploadTemplate } = API;
54
- const url = `${firebaseUrl}${uploadTemplate}?${__classPrivateFieldGet(this, _directory).call(this, key, group)}`;
51
+ const url = `${this.functionUrl}${uploadTemplate}?${__classPrivateFieldGet(this, _directory).call(this, key, group)}`;
55
52
  const file = yield this.utilityService.upload({
56
53
  extensions: ['xlsx'],
57
54
  maxSizeInMb: 0.1,
@@ -71,25 +68,22 @@ export class SdExportService {
71
68
  });
72
69
  this.generateUploadTemplate = (args) => __awaiter(this, void 0, void 0, function* () {
73
70
  const { key, template, group } = args;
74
- const { firebaseUrl } = this.configuration;
75
71
  const { generateUploadTemplate } = API;
76
- const url = `${firebaseUrl}${generateUploadTemplate}?${__classPrivateFieldGet(this, _directory).call(this, key, group)}`;
72
+ const url = `${this.functionUrl}${generateUploadTemplate}?${__classPrivateFieldGet(this, _directory).call(this, key, group)}`;
77
73
  const { filePath, fileName } = yield this.apiService.post(url, template);
78
74
  return { filePath, fileName };
79
75
  });
80
76
  this.removeFile = (args) => __awaiter(this, void 0, void 0, function* () {
81
77
  const { key, group, fileName } = args;
82
- const { firebaseUrl } = this.configuration;
83
78
  const { removeFile } = API;
84
- const url = `${firebaseUrl}${removeFile}?${__classPrivateFieldGet(this, _directory).call(this, key, group)}&name=${fileName}`;
79
+ const url = `${this.functionUrl}${removeFile}?${__classPrivateFieldGet(this, _directory).call(this, key, group)}&name=${fileName}`;
85
80
  yield this.apiService.post(url);
86
81
  });
87
82
  this.filesInFolder = (args) => __awaiter(this, void 0, void 0, function* () {
88
83
  var _a;
89
84
  const { key, group } = args;
90
- const { firebaseUrl } = this.configuration;
91
85
  const { filesInFolder } = API;
92
- const url = `${firebaseUrl}${filesInFolder}?${__classPrivateFieldGet(this, _directory).call(this, key, group)}`;
86
+ const url = `${this.functionUrl}${filesInFolder}?${__classPrivateFieldGet(this, _directory).call(this, key, group)}`;
93
87
  const res = yield this.apiService.get(url);
94
88
  return ((_a = res.files) === null || _a === void 0 ? void 0 : _a.map(e => ({
95
89
  filePath: e.publicUrl,
@@ -106,9 +100,8 @@ export class SdExportService {
106
100
  };
107
101
  this.exportByTemplate = (args) => __awaiter(this, void 0, void 0, function* () {
108
102
  const { filePath, columns, items, fileName } = args;
109
- const { firebaseUrl } = this.configuration;
110
103
  const { sdExportByTemplate } = API;
111
- const url = `${firebaseUrl}${sdExportByTemplate}`;
104
+ const url = `${this.functionUrl}${sdExportByTemplate}`;
112
105
  const buffer = yield this.apiService.post(url, {
113
106
  filePath,
114
107
  columns,
@@ -121,9 +114,8 @@ export class SdExportService {
121
114
  __classPrivateFieldGet(this, _blobToSaveAs).call(this, blob, fileName);
122
115
  });
123
116
  this.export = (option) => __awaiter(this, void 0, void 0, function* () {
124
- const { firebaseUrl } = this.configuration;
125
117
  const { sdExport } = API;
126
- const url = `${firebaseUrl}${sdExport}`;
118
+ const url = `${this.functionUrl}${sdExport}`;
127
119
  const buffer = yield this.apiService.post(url, option, null, {
128
120
  responseType: 'arraybuffer'
129
121
  });
@@ -181,9 +173,8 @@ export class SdExportService {
181
173
  __classPrivateFieldGet(this, _blobToSaveAs).call(this, blob, fileName);
182
174
  });
183
175
  this.mergePDF = (urls) => __awaiter(this, void 0, void 0, function* () {
184
- const { firebaseUrl } = this.configuration;
185
176
  const { sdMergePDF } = API;
186
- const url = `${firebaseUrl}${sdMergePDF}`;
177
+ const url = `${this.functionUrl}${sdMergePDF}`;
187
178
  const buffer = yield this.apiService.post(url, {
188
179
  urls
189
180
  }, null, {
@@ -216,21 +207,21 @@ export class SdExportService {
216
207
  }
217
208
  get hasConfiguration() {
218
209
  var _a;
219
- return !!((_a = this.configuration) === null || _a === void 0 ? void 0 : _a.firebaseUrl);
210
+ return !!((_a = this.firebaseConfiguration) === null || _a === void 0 ? void 0 : _a.functionUrl);
211
+ }
212
+ get functionUrl() {
213
+ var _a;
214
+ return (_a = this.firebaseConfiguration) === null || _a === void 0 ? void 0 : _a.functionUrl;
220
215
  }
221
216
  get folder() {
222
- const { folder } = this.configuration;
223
- if (typeof (folder) === 'string') {
224
- return folder;
225
- }
226
- return folder();
217
+ const { project, env } = this.firebaseConfiguration;
218
+ return `${project}-${env}`;
227
219
  }
228
220
  get userFolder() {
229
- const { user } = this.configuration;
230
- if (!(user === null || user === void 0 ? void 0 : user.folder)) {
221
+ const { folder } = this.firebaseConfiguration;
222
+ if (!folder) {
231
223
  return;
232
224
  }
233
- const { folder } = user;
234
225
  if (typeof (folder) === 'string') {
235
226
  return folder;
236
227
  }
@@ -238,7 +229,7 @@ export class SdExportService {
238
229
  }
239
230
  }
240
231
  _directory = new WeakMap(), _blobToSaveAs = new WeakMap();
241
- SdExportService.ɵprov = i0.ɵɵdefineInjectable({ factory: function SdExportService_Factory() { return new SdExportService(i0.ɵɵinject(i1.SdApiService), i0.ɵɵinject(i2.SdUtilityService), i0.ɵɵinject(i3.SdNotifyService), i0.ɵɵinject(i4.EXPORT_CONFIG, 8)); }, token: SdExportService, providedIn: "root" });
232
+ SdExportService.ɵprov = i0.ɵɵdefineInjectable({ factory: function SdExportService_Factory() { return new SdExportService(i0.ɵɵinject(i1.SdApiService), i0.ɵɵinject(i2.SdUtilityService), i0.ɵɵinject(i3.SdNotifyService), i0.ɵɵinject(i4.FIREBASE_CONFIG, 8)); }, token: SdExportService, providedIn: "root" });
242
233
  SdExportService.decorators = [
243
234
  { type: Injectable, args: [{
244
235
  providedIn: 'root'
@@ -248,6 +239,6 @@ SdExportService.ctorParameters = () => [
248
239
  { type: SdApiService },
249
240
  { type: SdUtilityService },
250
241
  { type: SdNotifyService },
251
- { type: undefined, decorators: [{ type: Inject, args: [EXPORT_CONFIG,] }, { type: Optional }] }
242
+ { type: undefined, decorators: [{ type: Inject, args: [FIREBASE_CONFIG,] }, { type: Optional }] }
252
243
  ];
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2V4cG9ydC8iLCJzb3VyY2VzIjpbInNyYy9saWIvZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQXdDLGFBQWEsRUFBaUIsR0FBRyxFQUFnQixNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBSzVELE1BQU0sT0FBTyxlQUFlO0lBSTFCLFlBQ1UsVUFBd0IsRUFDeEIsY0FBZ0MsRUFDaEMsYUFBOEIsRUFDSyxhQUFtQztRQUh0RSxlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUNoQyxrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUFDSyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUF1QmhGLHFCQUFhLENBQUMsR0FBVyxFQUFFLEtBQWEsRUFBRSxFQUFFO1lBQzFDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDdEIsTUFBTSxFQUFFLElBQUks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O1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2RBcGlTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9hcGknO1xyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgaGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XHJcbmltcG9ydCB7IEV4cG9ydFRvQ3N2IH0gZnJvbSAnZXhwb3J0LXRvLWNzdic7XHJcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XHJcbmltcG9ydCB7IEV4cG9ydFRlbXBsYXRlLCBJRXhwb3J0Q29uZmlndXJhdGlvbiwgRVhQT1JUX0NPTkZJRywgSUV4cG9ydE9wdGlvbiwgQVBJLCBTZEV4cG9ydEZpbGUgfSBmcm9tICcuL2V4cG9ydC5tb2RlbCc7XHJcbmltcG9ydCB7IFNkTm90aWZ5U2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbm90aWZ5JztcclxuaW1wb3J0IHsgU2RVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdXRpbGl0eSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZEV4cG9ydFNlcnZpY2Uge1xyXG4gIGdldCBoYXNDb25maWd1cmF0aW9uKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5jb25maWd1cmF0aW9uPy5maXJlYmFzZVVybDtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IFNkQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgdXRpbGl0eVNlcnZpY2U6IFNkVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmeVNlcnZpY2U6IFNkTm90aWZ5U2VydmljZSxcclxuICAgIEBJbmplY3QoRVhQT1JUX0NPTkZJRykgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBJRXhwb3J0Q29uZmlndXJhdGlvbikge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgZm9sZGVyKCkge1xyXG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcclxuICAgIGlmICh0eXBlb2YgKGZvbGRlcikgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBmb2xkZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9sZGVyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCB1c2VyRm9sZGVyKCkge1xyXG4gICAgY29uc3QgeyB1c2VyIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICBpZiAoIXVzZXI/LmZvbGRlcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gdXNlcjtcclxuICAgIGlmICh0eXBlb2YgKGZvbGRlcikgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBmb2xkZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9sZGVyKCk7XHJcbiAgfVxyXG5cclxuICAjZGlyZWN0b3J5ID0gKGtleTogc3RyaW5nLCBncm91cDogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgaGFzaGVkRm9sZGVyID0gaGFzaCh7XHJcbiAgICAgIGZvbGRlcjogdGhpcy5mb2xkZXIsXHJcbiAgICAgIHVzZXJGb2xkZXI6IHRoaXMudXNlckZvbGRlclxyXG4gICAgfSk7XHJcbiAgICBpZiAoIWdyb3VwKSB7XHJcbiAgICAgIHJldHVybiBgZGlyMT0ke3RoaXMuZm9sZGVyfSZkaXIyPVUtJHtoYXNoZWRGb2xkZXJ9JmRpcjM9JHtrZXkgfHwgJyd9YDtcclxuICAgIH1cclxuICAgIGhhc2hlZEZvbGRlciA9IGhhc2goe1xyXG4gICAgICBmb2xkZXI6IHRoaXMuZm9sZGVyLFxyXG4gICAgICBncm91cFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYGRpcjE9JHt0aGlzLmZvbGRlcn0mZGlyMj1HLSR7aGFzaGVkRm9sZGVyfSZkaXIzPSR7a2V5IHx8ICcnfWA7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVRlbXBsYXRlID0gYXN5bmMgKHRlbXBsYXRlOiBFeHBvcnRUZW1wbGF0ZSkgPT4ge1xyXG4gICAgY29uc3QgeyBmaXJlYmFzZVVybCB9ID0gdGhpcy5jb25maWd1cmF0aW9uO1xyXG4gICAgY29uc3QgeyBzZEdlbmVyYXRlVGVtcGxhdGUgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke2ZpcmViYXNlVXJsfSR7c2RHZW5lcmF0ZVRlbXBsYXRlfWA7XHJcbiAgICAvLyBjb25zdCB7IGZpbGVQYXRoLCBmaWxlTmFtZSB9ID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLnBvc3QodXJsLCB0ZW1wbGF0ZSk7XHJcbiAgICAvLyByZXR1cm4geyBmaWxlUGF0aCwgZmlsZU5hbWUgfTtcclxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCwgdGVtcGxhdGUsIG51bGwsIHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7YmFzZTY0LCcgfSk7XHJcbiAgICB0aGlzLiNibG9iVG9TYXZlQXMoYmxvYiwgdGVtcGxhdGUuZmlsZU5hbWUgfHwgJ1RlbXBsYXRlJyk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRUZW1wbGF0ZSA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgdmFsaWRhdG9yPzogKGZpbGVOYW1lOiBzdHJpbmcpID0+IHN0cmluZ1xyXG4gIH0pOiBQcm9taXNlPFNkRXhwb3J0RmlsZT4gPT4ge1xyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwLCB2YWxpZGF0b3IgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IGZpcmViYXNlVXJsIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICBjb25zdCB7IHVwbG9hZFRlbXBsYXRlIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHtmaXJlYmFzZVVybH0ke3VwbG9hZFRlbXBsYXRlfT8ke3RoaXMuI2RpcmVjdG9yeShrZXksIGdyb3VwKX1gO1xyXG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IHRoaXMudXRpbGl0eVNlcnZpY2UudXBsb2FkKHtcclxuICAgICAgZXh0ZW5zaW9uczogWyd4bHN4J10sXHJcbiAgICAgIG1heFNpemVJbk1iOiAwLjEsXHJcbiAgICAgIHZhbGlkYXRvclxyXG4gICAgfSk7XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCB7IGZpbGVQYXRoLCBmaWxlTmFtZSB9ID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLnVwbG9hZCh1cmwsIGZpbGUpLmNhdGNoKChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGVycj8ubWVzc2FnZSk7XHJcbiAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBmaWxlUGF0aCxcclxuICAgICAgICBmaWxlTmFtZSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVVcGxvYWRUZW1wbGF0ZSA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIHRlbXBsYXRlOiBFeHBvcnRUZW1wbGF0ZTtcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gIH0pID0+IHtcclxuICAgIGNvbnN0IHsga2V5LCB0ZW1wbGF0ZSwgZ3JvdXAgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IGZpcmViYXNlVXJsIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICBjb25zdCB7IGdlbmVyYXRlVXBsb2FkVGVtcGxhdGUgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke2ZpcmViYXNlVXJsfSR7Z2VuZXJhdGVVcGxvYWRUZW1wbGF0ZX0/JHt0aGlzLiNkaXJlY3Rvcnkoa2V5LCBncm91cCl9YDtcclxuICAgIGNvbnN0IHsgZmlsZVBhdGgsIGZpbGVOYW1lIH0gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIHRlbXBsYXRlKTtcclxuICAgIHJldHVybiB7IGZpbGVQYXRoLCBmaWxlTmFtZSB9O1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRmlsZSA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgZmlsZU5hbWU/OiBzdHJpbmc7XHJcbiAgfSkgPT4ge1xyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwLCBmaWxlTmFtZSB9ID0gYXJncztcclxuICAgIGNvbnN0IHsgZmlyZWJhc2VVcmwgfSA9IHRoaXMuY29uZmlndXJhdGlvbjtcclxuICAgIGNvbnN0IHsgcmVtb3ZlRmlsZSB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7ZmlyZWJhc2VVcmx9JHtyZW1vdmVGaWxlfT8ke3RoaXMuI2RpcmVjdG9yeShrZXksIGdyb3VwKX0mbmFtZT0ke2ZpbGVOYW1lfWA7XHJcbiAgICBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgZmlsZXNJbkZvbGRlciA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gIH0pOiBQcm9taXNlPFNkRXhwb3J0RmlsZVtdPiA9PiB7XHJcbiAgICBpbnRlcmZhY2UgRmlsZXNJbkZvbGRlclJlcyB7XHJcbiAgICAgIGRpcmVjdG9yeTogc3RyaW5nO1xyXG4gICAgICBmaWxlczoge1xyXG4gICAgICAgIHB1YmxpY1VybDogc3RyaW5nLCBmdWxsUGF0aDogc3RyaW5nLCBuYW1lOiBzdHJpbmdcclxuICAgICAgfVtdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwIH0gPSBhcmdzO1xyXG4gICAgY29uc3QgeyBmaXJlYmFzZVVybCB9ID0gdGhpcy5jb25maWd1cmF0aW9uO1xyXG4gICAgY29uc3QgeyBmaWxlc0luRm9sZGVyIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHtmaXJlYmFzZVVybH0ke2ZpbGVzSW5Gb2xkZXJ9PyR7dGhpcy4jZGlyZWN0b3J5KGtleSwgZ3JvdXApfWA7XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UuZ2V0PEZpbGVzSW5Gb2xkZXJSZXM+KHVybCk7XHJcbiAgICByZXR1cm4gcmVzLmZpbGVzPy5tYXAoZSA9PiAoe1xyXG4gICAgICBmaWxlUGF0aDogZS5wdWJsaWNVcmwsXHJcbiAgICAgIGZpbGVOYW1lOiBlLm5hbWVcclxuICAgIH0pKSB8fCBbXTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkID0gKGZpbGVQYXRoOiBzdHJpbmcsIGZpbGVOYW1lPzogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBsaW5rOiBhbnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gYCR7ZmlsZU5hbWUgfHwgdXVpZC52NCgpfS54bHN4YDtcclxuICAgIGxpbmsuaHJlZiA9IGZpbGVQYXRoO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRCeVRlbXBsYXRlID0gYXN5bmMgKGFyZ3M6IHtcclxuICAgIGZpbGVQYXRoOiBzdHJpbmcsXHJcbiAgICBjb2x1bW5zOiBhbnlbXSxcclxuICAgIGl0ZW1zOiBhbnlbXSxcclxuICAgIGZpbGVOYW1lPzogc3RyaW5nXHJcbiAgfSkgPT4ge1xyXG4gICAgY29uc3QgeyBmaWxlUGF0aCwgY29sdW1ucywgaXRlbXMsIGZpbGVOYW1lIH0gPSBhcmdzO1xyXG4gICAgY29uc3QgeyBmaXJlYmFzZVVybCB9ID0gdGhpcy5jb25maWd1cmF0aW9uO1xyXG4gICAgY29uc3QgeyBzZEV4cG9ydEJ5VGVtcGxhdGUgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke2ZpcmViYXNlVXJsfSR7c2RFeHBvcnRCeVRlbXBsYXRlfWA7XHJcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIHtcclxuICAgICAgZmlsZVBhdGgsXHJcbiAgICAgIGNvbHVtbnMsXHJcbiAgICAgIGl0ZW1zLFxyXG4gICAgICBmaWxlTmFtZVxyXG4gICAgfSwgbnVsbCwge1xyXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtiYXNlNjQsJyB9KTtcclxuICAgIHRoaXMuI2Jsb2JUb1NhdmVBcyhibG9iLCBmaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQgPSBhc3luYyAob3B0aW9uOiBJRXhwb3J0T3B0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB7IGZpcmViYXNlVXJsIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICBjb25zdCB7IHNkRXhwb3J0IH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHtmaXJlYmFzZVVybH0ke3NkRXhwb3J0fWA7XHJcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIG9wdGlvbiwgbnVsbCwge1xyXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtiYXNlNjQsJyB9KTtcclxuICAgIHRoaXMuI2Jsb2JUb1NhdmVBcyhibG9iLCBvcHRpb24/LmZpbGVOYW1lKTtcclxuICB9XHJcblxyXG4gIC8vIGV4cG9ydENTViA9IGFzeW5jIChvcHRpb246IElFeHBvcnRPcHRpb24pID0+IHtcclxuICAvLyAgIGNvbnN0IHsgY29sdW1ucywgaXRlbXMsIGZpbGVOYW1lIH0gPSBvcHRpb247XHJcbiAgLy8gICBjb25zdCBvcHRpb25zID0ge1xyXG4gIC8vICAgICBmaWVsZFNlcGFyYXRvcjogJywnLFxyXG4gIC8vICAgICBxdW90ZVN0cmluZ3M6ICdcIicsXHJcbiAgLy8gICAgIGRlY2ltYWxzZXBhcmF0b3I6ICcuJyxcclxuICAvLyAgICAgc2hvd0xhYmVsczogdHJ1ZSxcclxuICAvLyAgICAgc2hvd1RpdGxlOiBmYWxzZSxcclxuICAvLyAgICAgdGl0bGU6IGZpbGVOYW1lIHx8ICdDU1YnLFxyXG4gIC8vICAgICB1c2VCb206IHRydWUsXHJcbiAgLy8gICAgIG5vRG93bmxvYWQ6IGZhbHNlLFxyXG4gIC8vICAgICB1c2VIZWFkZXI6IGZhbHNlLFxyXG4gIC8vICAgICBudWxsVG9FbXB0eVN0cmluZzogdHJ1ZSxcclxuICAvLyAgIH07XHJcbiAgLy8gICBjb25zdCBoZWFkZXJDU1YgPSB7fTtcclxuICAvLyAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuICAvLyAgICAgaGVhZGVyQ1NWW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4udGl0bGU7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gbmV3IEFuZ3VsYXJDc3YoWy4uLltoZWFkZXJDU1ZdLCAuLi5pdGVtc10sIGAke2ZpbGVOYW1lIHx8ICdDU1YnfV8ke0RhdGUudG9Gb3JtYXQobmV3IERhdGUoKSwgJ3l5eXktTU0tZGQtSEgtbW0tc3MnKX1gLCBvcHRpb25zKTtcclxuICAvLyB9XHJcblxyXG4gIGV4cG9ydENTViA9IGFzeW5jIChvcHRpb246IElFeHBvcnRPcHRpb24pID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1ucywgaXRlbXMsIGZpbGVOYW1lIH0gPSBvcHRpb247XHJcbiAgICBjb25zdCBoZWFkZXJDU1YgPSB7fTtcclxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuICAgICAgaGVhZGVyQ1NWW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4udGl0bGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjc3ZFeHBvcnRlciA9IG5ldyBFeHBvcnRUb0Nzdih7XHJcbiAgICAgIGZpbGVuYW1lOiBgJHtmaWxlTmFtZSB8fCAnQ1NWJ31fJHtEYXRlLnRvRm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkLUhILW1tLXNzJyl9YCxcclxuICAgICAgZmllbGRTZXBhcmF0b3I6ICcsJyxcclxuICAgICAgcXVvdGVTdHJpbmdzOiAnXCInLFxyXG4gICAgICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXHJcbiAgICAgIHNob3dMYWJlbHM6IHRydWUsXHJcbiAgICAgIHNob3dUaXRsZTogZmFsc2UsXHJcbiAgICAgIHRpdGxlOiBmaWxlTmFtZSB8fCAnQ1NWJyxcclxuICAgICAgdXNlQm9tOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICBjc3ZFeHBvcnRlci5nZW5lcmF0ZUNzdihbaGVhZGVyQ1NWLCAuLi5pdGVtc10pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0RXhjZWxSYXcgPSBhc3luYyAob3B0aW9uOiBJRXhwb3J0T3B0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB7IGNvbHVtbnMsIGl0ZW1zLCBmaWxlTmFtZSB9ID0gb3B0aW9uO1xyXG4gICAgY29uc3QgaGVhZGVyID0ge307XHJcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcbiAgICAgIGhlYWRlcltjb2x1bW4uZmllbGRdID0gY29sdW1uLnRpdGxlO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gWExTWC51dGlscy5qc29uX3RvX3NoZWV0KFtoZWFkZXIsIC4uLml0ZW1zXSk7XHJcbiAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IHsgU2hlZXRzOiB7IGRhdGE6IHdzIH0sIFNoZWV0TmFtZXM6IFsnZGF0YSddIH07XHJcbiAgICBjb25zdCBleGNlbEJ1ZmZlcjogYW55ID0gWExTWC53cml0ZSh3YiwgeyBib29rVHlwZTogJ3hsc3gnLCB0eXBlOiAnYXJyYXknIH0pO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtleGNlbEJ1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnIH0pO1xyXG4gICAgdGhpcy4jYmxvYlRvU2F2ZUFzKGJsb2IsIGZpbGVOYW1lKTtcclxuICB9XHJcblxyXG4gIG1lcmdlUERGID0gYXN5bmMgKHVybHM6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICBjb25zdCB7IGZpcmViYXNlVXJsIH0gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICBjb25zdCB7IHNkTWVyZ2VQREYgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke2ZpcmViYXNlVXJsfSR7c2RNZXJnZVBERn1gO1xyXG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLnBvc3QodXJsLCB7XHJcbiAgICAgIHVybHNcclxuICAgIH0sIG51bGwsIHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vcGRmJyB9KTtcclxuICAgIHRoaXMuI2Jsb2JUb1NhdmVBcyhibG9iLCBgJHt1dWlkLnY0KCl9YCk7XHJcbiAgfVxyXG5cclxuICBsb2FkRXhwb3J0ZWRJdGVtcyA9IGFzeW5jIChpdGVtczogKHBhZ2VTaXplOiBudW1iZXIsIHBhZ2VOdW1iZXI6IG51bWJlcikgPT4geyB0b3RhbDogbnVtYmVyLCAgfSkgPT4ge1xyXG5cclxuICB9XHJcblxyXG4gICNibG9iVG9TYXZlQXMgPSAoYmxvYjogQmxvYiwgZmlsZU5hbWU6IHN0cmluZyA9ICdFeHBvcnQnKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC8ueGxzeC9pLCAnJyk7XHJcbiAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvLnBkZi9pLCAnJyk7XHJcbiAgICAgIGlmIChsaW5rLmRvd25sb2FkICE9PSB1bmRlZmluZWQpIHsgLy8gZmVhdHVyZSBkZXRlY3Rpb25cclxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgYCR7ZmlsZU5hbWV9XyR7bmV3IERhdGUoKS50b0Zvcm1hdCgneXl5eV9NTV9kZF9ISF9tbScpfWApO1xyXG4gICAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICAgICAgbGluay5jbGljaygpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignQmxvYlRvU2F2ZUFzIGVycm9yJywgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElFeHBvcnRJbmZvIHtcclxuICBkYXRhOiBhbnlbXTtcclxuICBzaGVldE5hbWU/OiBzdHJpbmc7XHJcbiAgZmlsZU5hbWU/OiBzdHJpbmc7XHJcbn1cclxuIl19
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2V4cG9ydC8iLCJzb3VyY2VzIjpbInNyYy9saWIvZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQWlDLEdBQUcsRUFBZ0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBMEIsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7O0FBS2xGLE1BQU0sT0FBTyxlQUFlO0lBd0IxQixZQUNVLFVBQXdCLEVBQ3hCLGNBQWdDLEVBQ2hDLGFBQThCLEVBQ08scUJBQTZDO1FBSGxGLGVBQVUsR0FBVixVQUFVLENBQWM7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFpQjtRQUNPLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBd0I7UUFHNUYscUJBQWEsQ0FBQyxHQUFXLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDMUMsSUFBSSxZQUFZ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VyxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFZLE1BQU07UUFDaEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDcEQsT0FBTyxHQUFHLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBWSxVQUFVO1FBQ3BCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDOUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU87U0FDUjtRQUNELElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUNoQyxPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsT0FBTyxNQUFNLEVBQUUsQ0FBQztJQUNsQixDQUFDOzs7OztZQXpCRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQVpRLFlBQVk7WUFPWixnQkFBZ0I7WUFEaEIsZUFBZTs0Q0FtQ25CLE1BQU0sU0FBQyxlQUFlLGNBQUcsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZEFwaVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2FwaSc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCBoYXNoIGZyb20gJ29iamVjdC1oYXNoJztcclxuaW1wb3J0IHsgRXhwb3J0VG9Dc3YgfSBmcm9tICdleHBvcnQtdG8tY3N2JztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgRXhwb3J0VGVtcGxhdGUsIElFeHBvcnRPcHRpb24sIEFQSSwgU2RFeHBvcnRGaWxlIH0gZnJvbSAnLi9leHBvcnQubW9kZWwnO1xyXG5pbXBvcnQgeyBTZE5vdGlmeVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcbmltcG9ydCB7IFNkVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3V0aWxpdHknO1xyXG5pbXBvcnQgeyBGSVJFQkFTRV9DT05GSUcsIElGaXJlYmFzZUNvbmZpZ3VyYXRpb24gfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2NvbW1vbic7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZEV4cG9ydFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgZ2V0IGhhc0NvbmZpZ3VyYXRpb24oKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmZpcmViYXNlQ29uZmlndXJhdGlvbj8uZnVuY3Rpb25Vcmw7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IGZ1bmN0aW9uVXJsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlyZWJhc2VDb25maWd1cmF0aW9uPy5mdW5jdGlvblVybDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IGZvbGRlcigpIHtcclxuICAgIGNvbnN0IHsgcHJvamVjdCwgZW52IH0gPSB0aGlzLmZpcmViYXNlQ29uZmlndXJhdGlvbjtcclxuICAgIHJldHVybiBgJHtwcm9qZWN0fS0ke2Vudn1gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgdXNlckZvbGRlcigpIHtcclxuICAgIGNvbnN0IHsgZm9sZGVyIH0gPSB0aGlzLmZpcmViYXNlQ29uZmlndXJhdGlvbjtcclxuICAgIGlmICghZm9sZGVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgKGZvbGRlcikgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBmb2xkZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9sZGVyKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogU2RBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5U2VydmljZTogU2RVdGlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZTogU2ROb3RpZnlTZXJ2aWNlLFxyXG4gICAgQEluamVjdChGSVJFQkFTRV9DT05GSUcpIEBPcHRpb25hbCgpIHByaXZhdGUgZmlyZWJhc2VDb25maWd1cmF0aW9uOiBJRmlyZWJhc2VDb25maWd1cmF0aW9uKSB7XHJcbiAgfVxyXG5cclxuICAjZGlyZWN0b3J5ID0gKGtleTogc3RyaW5nLCBncm91cDogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgaGFzaGVkRm9sZGVyID0gaGFzaCh7XHJcbiAgICAgIGZvbGRlcjogdGhpcy5mb2xkZXIsXHJcbiAgICAgIHVzZXJGb2xkZXI6IHRoaXMudXNlckZvbGRlclxyXG4gICAgfSk7XHJcbiAgICBpZiAoIWdyb3VwKSB7XHJcbiAgICAgIHJldHVybiBgZGlyMT0ke3RoaXMuZm9sZGVyfSZkaXIyPVUtJHtoYXNoZWRGb2xkZXJ9JmRpcjM9JHtrZXkgfHwgJyd9YDtcclxuICAgIH1cclxuICAgIGhhc2hlZEZvbGRlciA9IGhhc2goe1xyXG4gICAgICBmb2xkZXI6IHRoaXMuZm9sZGVyLFxyXG4gICAgICBncm91cFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYGRpcjE9JHt0aGlzLmZvbGRlcn0mZGlyMj1HLSR7aGFzaGVkRm9sZGVyfSZkaXIzPSR7a2V5IHx8ICcnfWA7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVRlbXBsYXRlID0gYXN5bmMgKHRlbXBsYXRlOiBFeHBvcnRUZW1wbGF0ZSkgPT4ge1xyXG4gICAgY29uc3QgeyBzZEdlbmVyYXRlVGVtcGxhdGUgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZnVuY3Rpb25Vcmx9JHtzZEdlbmVyYXRlVGVtcGxhdGV9YDtcclxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5wb3N0KHVybCwgdGVtcGxhdGUsIG51bGwsIHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7YmFzZTY0LCcgfSk7XHJcbiAgICB0aGlzLiNibG9iVG9TYXZlQXMoYmxvYiwgdGVtcGxhdGUuZmlsZU5hbWUgfHwgJ1RlbXBsYXRlJyk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRUZW1wbGF0ZSA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgdmFsaWRhdG9yPzogKGZpbGVOYW1lOiBzdHJpbmcpID0+IHN0cmluZ1xyXG4gIH0pOiBQcm9taXNlPFNkRXhwb3J0RmlsZT4gPT4ge1xyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwLCB2YWxpZGF0b3IgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IHVwbG9hZFRlbXBsYXRlIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmZ1bmN0aW9uVXJsfSR7dXBsb2FkVGVtcGxhdGV9PyR7dGhpcy4jZGlyZWN0b3J5KGtleSwgZ3JvdXApfWA7XHJcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgdGhpcy51dGlsaXR5U2VydmljZS51cGxvYWQoe1xyXG4gICAgICBleHRlbnNpb25zOiBbJ3hsc3gnXSxcclxuICAgICAgbWF4U2l6ZUluTWI6IDAuMSxcclxuICAgICAgdmFsaWRhdG9yXHJcbiAgICB9KTtcclxuICAgIGlmIChmaWxlKSB7XHJcbiAgICAgIGNvbnN0IHsgZmlsZVBhdGgsIGZpbGVOYW1lIH0gPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UudXBsb2FkKHVybCwgZmlsZSkuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoZXJyPy5tZXNzYWdlKTtcclxuICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpbGVQYXRoLFxyXG4gICAgICAgIGZpbGVOYW1lLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVVwbG9hZFRlbXBsYXRlID0gYXN5bmMgKGFyZ3M6IHtcclxuICAgIGtleTogc3RyaW5nO1xyXG4gICAgdGVtcGxhdGU6IEV4cG9ydFRlbXBsYXRlO1xyXG4gICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgfSkgPT4ge1xyXG4gICAgY29uc3QgeyBrZXksIHRlbXBsYXRlLCBncm91cCB9ID0gYXJncztcclxuICAgIGNvbnN0IHsgZ2VuZXJhdGVVcGxvYWRUZW1wbGF0ZSB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5mdW5jdGlvblVybH0ke2dlbmVyYXRlVXBsb2FkVGVtcGxhdGV9PyR7dGhpcy4jZGlyZWN0b3J5KGtleSwgZ3JvdXApfWA7XHJcbiAgICBjb25zdCB7IGZpbGVQYXRoLCBmaWxlTmFtZSB9ID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLnBvc3QodXJsLCB0ZW1wbGF0ZSk7XHJcbiAgICByZXR1cm4geyBmaWxlUGF0aCwgZmlsZU5hbWUgfTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUZpbGUgPSBhc3luYyAoYXJnczoge1xyXG4gICAga2V5OiBzdHJpbmc7XHJcbiAgICBncm91cD86IHN0cmluZztcclxuICAgIGZpbGVOYW1lPzogc3RyaW5nO1xyXG4gIH0pID0+IHtcclxuICAgIGNvbnN0IHsga2V5LCBncm91cCwgZmlsZU5hbWUgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IHJlbW92ZUZpbGUgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZnVuY3Rpb25Vcmx9JHtyZW1vdmVGaWxlfT8ke3RoaXMuI2RpcmVjdG9yeShrZXksIGdyb3VwKX0mbmFtZT0ke2ZpbGVOYW1lfWA7XHJcbiAgICBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgZmlsZXNJbkZvbGRlciA9IGFzeW5jIChhcmdzOiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gIH0pOiBQcm9taXNlPFNkRXhwb3J0RmlsZVtdPiA9PiB7XHJcbiAgICBpbnRlcmZhY2UgRmlsZXNJbkZvbGRlclJlcyB7XHJcbiAgICAgIGRpcmVjdG9yeTogc3RyaW5nO1xyXG4gICAgICBmaWxlczoge1xyXG4gICAgICAgIHB1YmxpY1VybDogc3RyaW5nLCBmdWxsUGF0aDogc3RyaW5nLCBuYW1lOiBzdHJpbmdcclxuICAgICAgfVtdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgeyBrZXksIGdyb3VwIH0gPSBhcmdzO1xyXG4gICAgY29uc3QgeyBmaWxlc0luRm9sZGVyIH0gPSBBUEk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmZ1bmN0aW9uVXJsfSR7ZmlsZXNJbkZvbGRlcn0/JHt0aGlzLiNkaXJlY3Rvcnkoa2V5LCBncm91cCl9YDtcclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5nZXQ8RmlsZXNJbkZvbGRlclJlcz4odXJsKTtcclxuICAgIHJldHVybiByZXMuZmlsZXM/Lm1hcChlID0+ICh7XHJcbiAgICAgIGZpbGVQYXRoOiBlLnB1YmxpY1VybCxcclxuICAgICAgZmlsZU5hbWU6IGUubmFtZVxyXG4gICAgfSkpIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWQgPSAoZmlsZVBhdGg6IHN0cmluZywgZmlsZU5hbWU/OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGxpbms6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGxpbmsuZG93bmxvYWQgPSBgJHtmaWxlTmFtZSB8fCB1dWlkLnY0KCl9Lnhsc3hgO1xyXG4gICAgbGluay5ocmVmID0gZmlsZVBhdGg7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydEJ5VGVtcGxhdGUgPSBhc3luYyAoYXJnczoge1xyXG4gICAgZmlsZVBhdGg6IHN0cmluZyxcclxuICAgIGNvbHVtbnM6IGFueVtdLFxyXG4gICAgaXRlbXM6IGFueVtdLFxyXG4gICAgZmlsZU5hbWU/OiBzdHJpbmdcclxuICB9KSA9PiB7XHJcbiAgICBjb25zdCB7IGZpbGVQYXRoLCBjb2x1bW5zLCBpdGVtcywgZmlsZU5hbWUgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCB7IHNkRXhwb3J0QnlUZW1wbGF0ZSB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5mdW5jdGlvblVybH0ke3NkRXhwb3J0QnlUZW1wbGF0ZX1gO1xyXG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdGhpcy5hcGlTZXJ2aWNlLnBvc3QodXJsLCB7XHJcbiAgICAgIGZpbGVQYXRoLFxyXG4gICAgICBjb2x1bW5zLFxyXG4gICAgICBpdGVtcyxcclxuICAgICAgZmlsZU5hbWVcclxuICAgIH0sIG51bGwsIHtcclxuICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7YmFzZTY0LCcgfSk7XHJcbiAgICB0aGlzLiNibG9iVG9TYXZlQXMoYmxvYiwgZmlsZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0ID0gYXN5bmMgKG9wdGlvbjogSUV4cG9ydE9wdGlvbikgPT4ge1xyXG4gICAgY29uc3QgeyBzZEV4cG9ydCB9ID0gQVBJO1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5mdW5jdGlvblVybH0ke3NkRXhwb3J0fWA7XHJcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIG9wdGlvbiwgbnVsbCwge1xyXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtiYXNlNjQsJyB9KTtcclxuICAgIHRoaXMuI2Jsb2JUb1NhdmVBcyhibG9iLCBvcHRpb24/LmZpbGVOYW1lKTtcclxuICB9XHJcblxyXG4gIC8vIGV4cG9ydENTViA9IGFzeW5jIChvcHRpb246IElFeHBvcnRPcHRpb24pID0+IHtcclxuICAvLyAgIGNvbnN0IHsgY29sdW1ucywgaXRlbXMsIGZpbGVOYW1lIH0gPSBvcHRpb247XHJcbiAgLy8gICBjb25zdCBvcHRpb25zID0ge1xyXG4gIC8vICAgICBmaWVsZFNlcGFyYXRvcjogJywnLFxyXG4gIC8vICAgICBxdW90ZVN0cmluZ3M6ICdcIicsXHJcbiAgLy8gICAgIGRlY2ltYWxzZXBhcmF0b3I6ICcuJyxcclxuICAvLyAgICAgc2hvd0xhYmVsczogdHJ1ZSxcclxuICAvLyAgICAgc2hvd1RpdGxlOiBmYWxzZSxcclxuICAvLyAgICAgdGl0bGU6IGZpbGVOYW1lIHx8ICdDU1YnLFxyXG4gIC8vICAgICB1c2VCb206IHRydWUsXHJcbiAgLy8gICAgIG5vRG93bmxvYWQ6IGZhbHNlLFxyXG4gIC8vICAgICB1c2VIZWFkZXI6IGZhbHNlLFxyXG4gIC8vICAgICBudWxsVG9FbXB0eVN0cmluZzogdHJ1ZSxcclxuICAvLyAgIH07XHJcbiAgLy8gICBjb25zdCBoZWFkZXJDU1YgPSB7fTtcclxuICAvLyAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuICAvLyAgICAgaGVhZGVyQ1NWW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4udGl0bGU7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gbmV3IEFuZ3VsYXJDc3YoWy4uLltoZWFkZXJDU1ZdLCAuLi5pdGVtc10sIGAke2ZpbGVOYW1lIHx8ICdDU1YnfV8ke0RhdGUudG9Gb3JtYXQobmV3IERhdGUoKSwgJ3l5eXktTU0tZGQtSEgtbW0tc3MnKX1gLCBvcHRpb25zKTtcclxuICAvLyB9XHJcblxyXG4gIGV4cG9ydENTViA9IGFzeW5jIChvcHRpb246IElFeHBvcnRPcHRpb24pID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1ucywgaXRlbXMsIGZpbGVOYW1lIH0gPSBvcHRpb247XHJcbiAgICBjb25zdCBoZWFkZXJDU1YgPSB7fTtcclxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuICAgICAgaGVhZGVyQ1NWW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4udGl0bGU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjc3ZFeHBvcnRlciA9IG5ldyBFeHBvcnRUb0Nzdih7XHJcbiAgICAgIGZpbGVuYW1lOiBgJHtmaWxlTmFtZSB8fCAnQ1NWJ31fJHtEYXRlLnRvRm9ybWF0KG5ldyBEYXRlKCksICd5eXl5LU1NLWRkLUhILW1tLXNzJyl9YCxcclxuICAgICAgZmllbGRTZXBhcmF0b3I6ICcsJyxcclxuICAgICAgcXVvdGVTdHJpbmdzOiAnXCInLFxyXG4gICAgICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXHJcbiAgICAgIHNob3dMYWJlbHM6IHRydWUsXHJcbiAgICAgIHNob3dUaXRsZTogZmFsc2UsXHJcbiAgICAgIHRpdGxlOiBmaWxlTmFtZSB8fCAnQ1NWJyxcclxuICAgICAgdXNlQm9tOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICBjc3ZFeHBvcnRlci5nZW5lcmF0ZUNzdihbaGVhZGVyQ1NWLCAuLi5pdGVtc10pO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0RXhjZWxSYXcgPSBhc3luYyAob3B0aW9uOiBJRXhwb3J0T3B0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB7IGNvbHVtbnMsIGl0ZW1zLCBmaWxlTmFtZSB9ID0gb3B0aW9uO1xyXG4gICAgY29uc3QgaGVhZGVyID0ge307XHJcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcbiAgICAgIGhlYWRlcltjb2x1bW4uZmllbGRdID0gY29sdW1uLnRpdGxlO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gWExTWC51dGlscy5qc29uX3RvX3NoZWV0KFtoZWFkZXIsIC4uLml0ZW1zXSk7XHJcbiAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IHsgU2hlZXRzOiB7IGRhdGE6IHdzIH0sIFNoZWV0TmFtZXM6IFsnZGF0YSddIH07XHJcbiAgICBjb25zdCBleGNlbEJ1ZmZlcjogYW55ID0gWExTWC53cml0ZSh3YiwgeyBib29rVHlwZTogJ3hsc3gnLCB0eXBlOiAnYXJyYXknIH0pO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtleGNlbEJ1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnIH0pO1xyXG4gICAgdGhpcy4jYmxvYlRvU2F2ZUFzKGJsb2IsIGZpbGVOYW1lKTtcclxuICB9XHJcblxyXG4gIG1lcmdlUERGID0gYXN5bmMgKHVybHM6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICBjb25zdCB7IHNkTWVyZ2VQREYgfSA9IEFQSTtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZnVuY3Rpb25Vcmx9JHtzZE1lcmdlUERGfWA7XHJcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh1cmwsIHtcclxuICAgICAgdXJsc1xyXG4gICAgfSwgbnVsbCwge1xyXG4gICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9wZGYnIH0pO1xyXG4gICAgdGhpcy4jYmxvYlRvU2F2ZUFzKGJsb2IsIGAke3V1aWQudjQoKX1gKTtcclxuICB9XHJcblxyXG4gIGxvYWRFeHBvcnRlZEl0ZW1zID0gYXN5bmMgKGl0ZW1zOiAocGFnZVNpemU6IG51bWJlciwgcGFnZU51bWJlcjogbnVtYmVyKSA9PiB7IHRvdGFsOiBudW1iZXIsIH0pID0+IHtcclxuXHJcbiAgfVxyXG5cclxuICAjYmxvYlRvU2F2ZUFzID0gKGJsb2I6IEJsb2IsIGZpbGVOYW1lOiBzdHJpbmcgPSAnRXhwb3J0JykgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvLnhsc3gvaSwgJycpO1xyXG4gICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnJlcGxhY2UoLy5wZGYvaSwgJycpO1xyXG4gICAgICBpZiAobGluay5kb3dubG9hZCAhPT0gdW5kZWZpbmVkKSB7IC8vIGZlYXR1cmUgZGV0ZWN0aW9uXHJcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xyXG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGAke2ZpbGVOYW1lfV8ke25ldyBEYXRlKCkudG9Gb3JtYXQoJ3l5eXlfTU1fZGRfSEhfbW0nKX1gKTtcclxuICAgICAgICBsaW5rLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Jsb2JUb1NhdmVBcyBlcnJvcicsIGUpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRXhwb3J0SW5mbyB7XHJcbiAgZGF0YTogYW55W107XHJcbiAgc2hlZXROYW1lPzogc3RyaW5nO1xyXG4gIGZpbGVOYW1lPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
@@ -1,15 +1,15 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { Component, ViewChild, Output, EventEmitter, Input, ChangeDetectorRef } from '@angular/core';
3
- import { SdExcelService } from '@sd-angular/core/excel';
4
3
  import { SdNotifyService } from '@sd-angular/core/notify';
5
4
  import { SdLoadingService } from '@sd-angular/core/loading';
6
5
  import { SdTranslateService } from '@sd-angular/core/translate';
7
6
  import hash from 'object-hash';
7
+ import { SdExportService } from '@sd-angular/core/export';
8
8
  export class SdGridPopupExportExcel {
9
- constructor(ref, loadingService, excelService, notifyService, translateService) {
9
+ constructor(ref, loadingService, exportService, notifyService, translateService) {
10
10
  this.ref = ref;
11
11
  this.loadingService = loadingService;
12
- this.excelService = excelService;
12
+ this.exportService = exportService;
13
13
  this.notifyService = notifyService;
14
14
  this.translateService = translateService;
15
15
  this.prefix = 'Popup Export Excel';
@@ -73,7 +73,7 @@ export class SdGridPopupExportExcel {
73
73
  }
74
74
  }
75
75
  }
76
- return yield this.excelService.generateExcelTemplate({
76
+ return yield this.exportService.generateTemplate({
77
77
  fileName: fileName || this.fileName,
78
78
  columns: this.generateExcelColumns(columns),
79
79
  sheets
@@ -86,10 +86,7 @@ export class SdGridPopupExportExcel {
86
86
  });
87
87
  this.generateTemplate = () => __awaiter(this, void 0, void 0, function* () {
88
88
  this.loadingService.start();
89
- const result = yield this.initDefaultTemplate().finally(this.loadingService.stop);
90
- if (result === null || result === void 0 ? void 0 : result.filePath) {
91
- this.excelService.downloadTemplate(result.filePath, `${this.fileName}.xlsx`);
92
- }
89
+ yield this.initDefaultTemplate().finally(this.loadingService.stop);
93
90
  });
94
91
  this.generateAndUploadTemplate = (columns, fileName) => __awaiter(this, void 0, void 0, function* () {
95
92
  var _b;
@@ -114,10 +111,13 @@ export class SdGridPopupExportExcel {
114
111
  }
115
112
  }
116
113
  }
117
- return yield this.excelService.generateAndUploadExcelTemplate(this.fullKey, {
118
- fileName: fileName || this.fileName,
119
- columns: this.generateExcelColumns(columns),
120
- sheets
114
+ return yield this.exportService.generateUploadTemplate({
115
+ key: this.fullKey,
116
+ template: {
117
+ fileName: fileName || this.fileName,
118
+ columns: this.generateExcelColumns(columns),
119
+ sheets
120
+ }
121
121
  });
122
122
  });
123
123
  this.onExportByTemplate = (excelConfig) => {
@@ -130,21 +130,24 @@ export class SdGridPopupExportExcel {
130
130
  this.ref.detectChanges();
131
131
  };
132
132
  this.uploadTemplate = () => __awaiter(this, void 0, void 0, function* () {
133
- const excelConfig = yield this.excelService.uploadTemplate(this.fullKey, this.validator);
133
+ const excelConfig = yield this.exportService.uploadTemplate({
134
+ key: this.fullKey,
135
+ validator: this.validator
136
+ });
134
137
  this.excelConfigs.push({
135
- name: excelConfig.name,
136
- fullPath: excelConfig.fullPath,
138
+ name: excelConfig.fileName,
139
+ fullPath: excelConfig.filePath,
137
140
  removable: true
138
141
  });
139
142
  this.ref.detectChanges();
140
143
  });
141
144
  this.downloadTemplate = (excelConfig) => {
142
- this.excelService.downloadTemplate(excelConfig.fullPath, excelConfig.name);
145
+ this.exportService.download(excelConfig.fullPath, excelConfig.name);
143
146
  };
144
147
  this.removeTemplate = (excelConfig) => {
145
148
  this.notifyService.confirm(this.translateService.translate('Remove template')).then(() => __awaiter(this, void 0, void 0, function* () {
146
149
  this.loadingService.start();
147
- yield this.excelService.remove(this.fullKey, excelConfig.name).finally(this.loadingService.stop);
150
+ yield this.exportService.removeFile({ key: this.fullKey, fileName: excelConfig.name }).finally(this.loadingService.stop);
148
151
  const idx = this.excelConfigs.indexOf(excelConfig);
149
152
  this.excelConfigs.splice(idx, 1);
150
153
  this.ref.detectChanges();
@@ -176,13 +179,13 @@ export class SdGridPopupExportExcel {
176
179
  });
177
180
  }
178
181
  }
179
- this.exportByTemplate.emit({
180
- excelConfig: {
181
- fullPath: result.filePath,
182
- name: `[${this.fullKey}] Default.xlsx`
183
- },
184
- excelColumns
185
- });
182
+ // this.exportByTemplate.emit({
183
+ // excelConfig: {
184
+ // fullPath: result.filePath,
185
+ // name: `[${this.fullKey}] Default.xlsx`
186
+ // },
187
+ // excelColumns
188
+ // });
186
189
  this.ref.detectChanges();
187
190
  });
188
191
  this.newTemplate = () => {
@@ -271,7 +274,12 @@ export class SdGridPopupExportExcel {
271
274
  loadConfiguration() {
272
275
  return __awaiter(this, void 0, void 0, function* () {
273
276
  this.excelConfigs = [];
274
- this.excelConfigs = yield this.excelService.getFiles(this.fullKey);
277
+ const files = yield this.exportService.filesInFolder({ key: this.fullKey });
278
+ this.excelConfigs = files.map(e => ({
279
+ fullPath: e.filePath,
280
+ name: e.fileName,
281
+ removable: true
282
+ }));
275
283
  });
276
284
  }
277
285
  }
@@ -285,7 +293,7 @@ SdGridPopupExportExcel.decorators = [
285
293
  SdGridPopupExportExcel.ctorParameters = () => [
286
294
  { type: ChangeDetectorRef },
287
295
  { type: SdLoadingService },
288
- { type: SdExcelService },
296
+ { type: SdExportService },
289
297
  { type: SdNotifyService },
290
298
  { type: SdTranslateService }
291
299
  ];
@@ -299,4 +307,4 @@ SdGridPopupExportExcel.propDecorators = {
299
307
  exportOption: [{ type: Input }],
300
308
  exportByTemplate: [{ type: Output }]
301
309
  };
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wb3B1cC1leHBvcnQtZXhjZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ncmlkLyIsInNvdXJjZXMiOlsic3JjL2xpYi9jb21wb25lbnRzL2dyaWQtcG9wdXAtZXhwb3J0LWV4Y2VsL2dyaWQtcG9wdXAtZXhwb3J0LWV4Y2VsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBeUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzVILE9BQU8sRUFDTCxjQUFjLEVBR2YsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxPQUFPLEVBQ0wsZUFBZSxFQUNoQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDakIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ25CLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBUy9CLE1BQU0sT0FBTyxzQkFBc0I7SUEyQmpDLFlBQ1UsR0FBc0IsRUFDdEIsY0FBZ0MsRUFDaEMsWUFBNEIsRUFDNUIsYUFBOEIsRUFDOUIsZ0JBQW9DO1FBSnBDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUNoQyxpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUEvQnRDLFdBQU0sR0FBRyxvQkFBb0IsQ0FBQztRQUN0QyxtQkFBYyxHQUFHLHNDQUFzQyxDQUFDO1FBRS9DLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFVVCxZQUFPLEdBQW1C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Q0FBQztZQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDOztLQUMxQjtJQTZJSyxpQkFBaUI7O1lBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckUsQ0FBQztLQUFBOzs7WUFsTkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSw0QkFBNEI7Z0JBQ3RDLDg1R0FBdUQ7O2FBRXhEOzs7WUE1QmtGLGlCQUFpQjtZQWNsRyxnQkFBZ0I7WUFWaEIsY0FBYztZQU1kLGVBQWU7WUFRZixrQkFBa0I7OztvQkFjakIsU0FBUyxTQUFDLE9BQU87a0JBQ2pCLEtBQUs7c0JBVUwsS0FBSzs0QkFDTCxLQUFLO3VCQUNMLEtBQUs7d0JBQ0wsS0FBSzsyQkFDTCxLQUFLOytCQUVMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNkR3JpZENvbHVtbiwgR3JpZEJhc2VPcHRpb25FeHBvcnQgfSBmcm9tICcuLi8uLi9ncmlkLm1vZGVsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2RFeGNlbFNlcnZpY2UsXHJcbiAgRXhjZWxDb25maWcsXHJcbiAgRXhjZWxUZW1wYXRlQ29sdW1uXHJcbn0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9leGNlbCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkTm90aWZ5U2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbm90aWZ5JztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2RMb2FkaW5nU2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbG9hZGluZyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkVHJhbnNsYXRlU2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdHJhbnNsYXRlJztcclxuaW1wb3J0IGhhc2ggZnJvbSAnb2JqZWN0LWhhc2gnO1xyXG5pbXBvcnQgeyBNYXRSYWRpb0NoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3JhZGlvJztcclxuaW1wb3J0IHsgU2RNb2RhbCB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbW9kYWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC1ncmlkLXBvcHVwLWV4cG9ydC1leGNlbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtcG9wdXAtZXhwb3J0LWV4Y2VsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ncmlkLXBvcHVwLWV4cG9ydC1leGNlbC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZEdyaWRQb3B1cEV4cG9ydEV4Y2VsIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBwcml2YXRlIHByZWZpeCA9ICdQb3B1cCBFeHBvcnQgRXhjZWwnO1xyXG4gIG5ld0V4Y2VsQ29uZmlnID0gJ2ZkOGZiNWRiLWE3YWQtNDM5OC05M2FjLWNiMzM1MDI2MTE4MCc7XHJcbiAgQFZpZXdDaGlsZCgnbW9kYWwnKSBtb2RhbDogU2RNb2RhbDtcclxuICBASW5wdXQoKSBrZXkgPSAnJztcclxuICBnZXQgZnVsbEtleSgpIHtcclxuICAgIGlmICghdGhpcy5rZXkpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhhc2goe1xyXG4gICAgICBwcmVmaXg6IHRoaXMucHJlZml4LFxyXG4gICAgICBrZXk6IHRoaXMua2V5XHJcbiAgICB9KTtcclxuICB9XHJcbiAgQElucHV0KCkgY29sdW1uczogU2RHcmlkQ29sdW1uW10gPSBbXTtcclxuICBASW5wdXQoKSBleHRlbmRDb2x1bW5zOiBTZEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdmFsaWRhdG9yOiAoZmlsZU5hbWU6IHN0cmluZykgPT4gc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGV4cG9ydE9wdGlvbjogR3JpZEJhc2VPcHRpb25FeHBvcnQ7XHJcbiAgZXhjZWxDb25maWdzOiBFeGNlbENvbmZpZ1tdID0gW107XHJcbiAgQE91dHB1dCgpIGV4cG9ydEJ5VGVtcGxhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXhjZWxDb25maWc6IEV4Y2VsQ29uZmlnLCBleGNlbENvbHVtbnM6IEV4Y2VsVGVtcGF0ZUNvbHVtbltdIH0+KCk7XHJcbiAgdGFiSW5kZXggPSAwO1xyXG4gIHNlbGVjdGVkRXhjZWxDb25maWc6IEV4Y2VsQ29uZmlnID0ge307XHJcbiAgZXhwb3J0YWJsZUNvbHVtbnM6IFNkR3JpZENvbHVtbltdID0gW107XHJcbiAgc2VsZWN0ZWQ6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IGJvb2xlYW5cclxuICB9ID0ge307XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGxvYWRpbmdTZXJ2aWNlOiBTZExvYWRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleGNlbFNlcnZpY2U6IFNkRXhjZWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlOiBTZE5vdGlmeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFNkVHJhbnNsYXRlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG5cclxuICB9XHJcblxyXG4gIGFzeW5jIG9wZW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuZnVsbEtleSkge1xyXG4gICAgICBhd2FpdCB0aGlzLmV4cG9ydERlZmF1bHQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5sb2FkQ29uZmlndXJhdGlvbigpO1xyXG4gICAgdGhpcy5leHBvcnRhYmxlQ29sdW1ucyA9IFsuLi50aGlzLmNvbHVtbnMsIC4uLih0aGlzLmV4dGVuZENvbHVtbnMgfHwgW10pXS5maWx0ZXIoZSA9PiBlLnR5cGUgIT09ICdpbWFnZScpO1xyXG4gICAgdGhpcy5zZWxlY3RlZCA9IHt9O1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRXhjZWxDb25maWc/Lm5hbWUpIHtcclxuICAgICAgaWYgKHRoaXMuZXhjZWxDb25maWdzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEV4Y2VsQ29uZmlnID0gdGhpcy5leGNlbENvbmZpZ3NbMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEV4Y2VsQ29uZmlnID0ge1xyXG4gICAgICAgICAgbmFtZTogdGhpcy5uZXdFeGNlbENvbmZpZ1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMubW9kYWwub3BlbigpO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUV4Y2VsQ29sdW1ucyA9IChjb2x1bW5zOiBTZEdyaWRDb2x1bW5bXSkgPT4ge1xyXG4gICAgY29uc3QgZXhjZWxDb2x1bW5zOiBFeGNlbFRlbXBhdGVDb2x1bW5bXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbicpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xyXG4gICAgICAgICAgaWYgKGNoaWxkQ29sdW1uLnR5cGUgIT09ICdpbWFnZScpIHtcclxuICAgICAgICAgICAgZXhjZWxDb2x1bW5zLnB1c2goe1xyXG4gICAgICAgICAgICAgIGZpZWxkOiBjaGlsZENvbHVtbi5maWVsZCxcclxuICAgICAgICAgICAgICB0aXRsZTogY2hpbGRDb2x1bW4udGl0bGUsXHJcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGNoaWxkQ29sdW1uLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBjaGlsZENvbHVtbi53aWR0aFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgIT09ICdpbWFnZScpIHtcclxuICAgICAgICBleGNlbENvbHVtbnMucHVzaCh7XHJcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxyXG4gICAgICAgICAgdGl0bGU6IGNvbHVtbi50aXRsZSxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBjb2x1bW4uZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICB3aWR0aDogY29sdW1uLndpZHRoXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBleGNlbENvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRUZW1wbGF0ZSA9IGFzeW5jIChjb2x1bW5zOiBTZEdyaWRDb2x1bW5bXSwgZmlsZU5hbWU/OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbHVtbnMgPSBjb2x1bW5zIHx8IFtdO1xyXG4gICAgY29uc3Qgc2hlZXRzOiB7XHJcbiAgICAgIG5hbWU6IHN0cmluZyxcclxuICAgICAgaXRlbXM6IGFueVtdLFxyXG4gICAgICBmaWVsZHM6IHN0cmluZ1tdXHJcbiAgICB9W10gPSBbXTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZXhwb3J0T3B0aW9uPy5zaGVldHMpKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgc2hlZXQgb2YgdGhpcy5leHBvcnRPcHRpb24uc2hlZXRzKSB7XHJcbiAgICAgICAgaWYgKHNoZWV0Lm5hbWUgJiYgc2hlZXQuaXRlbXMgJiYgc2hlZXQuZmllbGRzKSB7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzaGVldC5pdGVtcykpIHtcclxuICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgaXRlbXM6IHNoZWV0Lml0ZW1zLFxyXG4gICAgICAgICAgICAgIGZpZWxkczogc2hlZXQuZmllbGRzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgaXRlbXM6IGF3YWl0IHNoZWV0Lml0ZW1zKCksXHJcbiAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGNlbFNlcnZpY2UuZ2VuZXJhdGVFeGNlbFRlbXBsYXRlKHtcclxuICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lIHx8IHRoaXMuZmlsZU5hbWUsXHJcbiAgICAgIGNvbHVtbnM6IHRoaXMuZ2VuZXJhdGVFeGNlbENvbHVtbnMoY29sdW1ucyksXHJcbiAgICAgIHNoZWV0c1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXREZWZhdWx0VGVtcGxhdGUgPSBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCBleHRlbmRDb2x1bW5zID0gdGhpcy5leHRlbmRDb2x1bW5zIHx8IFtdO1xyXG4gICAgY29uc3QgY29sdW1ucyA9IFsuLi50aGlzLmNvbHVtbnMsIC4uLmV4dGVuZENvbHVtbnNdO1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaW5pdFRlbXBsYXRlKGNvbHVtbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVUZW1wbGF0ZSA9IGFzeW5jICgpID0+IHtcclxuICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQoKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaW5pdERlZmF1bHRUZW1wbGF0ZSgpLmZpbmFsbHkodGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKTtcclxuICAgIGlmIChyZXN1bHQ/LmZpbGVQYXRoKSB7XHJcbiAgICAgIHRoaXMuZXhjZWxTZXJ2aWNlLmRvd25sb2FkVGVtcGxhdGUocmVzdWx0LmZpbGVQYXRoLCBgJHt0aGlzLmZpbGVOYW1lfS54bHN4YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUFuZFVwbG9hZFRlbXBsYXRlID0gYXN5bmMgKGNvbHVtbnM6IFNkR3JpZENvbHVtbltdLCBmaWxlTmFtZT86IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3Qgc2hlZXRzOiB7XHJcbiAgICAgIG5hbWU6IHN0cmluZyxcclxuICAgICAgaXRlbXM6IGFueVtdLFxyXG4gICAgICBmaWVsZHM6IHN0cmluZ1tdXHJcbiAgICB9W10gPSBbXTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZXhwb3J0T3B0aW9uPy5zaGVldHMpKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgc2hlZXQgb2YgdGhpcy5leHBvcnRPcHRpb24uc2hlZXRzKSB7XHJcbiAgICAgICAgaWYgKHNoZWV0Lm5hbWUgJiYgc2hlZXQuaXRlbXMgJiYgc2hlZXQuZmllbGRzKSB7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzaGVldC5pdGVtcykpIHtcclxuICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgaXRlbXM6IHNoZWV0Lml0ZW1zLFxyXG4gICAgICAgICAgICAgIGZpZWxkczogc2hlZXQuZmllbGRzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgaXRlbXM6IGF3YWl0IHNoZWV0Lml0ZW1zKCksXHJcbiAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGNlbFNlcnZpY2UuZ2VuZXJhdGVBbmRVcGxvYWRFeGNlbFRlbXBsYXRlKHRoaXMuZnVsbEtleSwge1xyXG4gICAgICBmaWxlTmFtZTogZmlsZU5hbWUgfHwgdGhpcy5maWxlTmFtZSxcclxuICAgICAgY29sdW1uczogdGhpcy5nZW5lcmF0ZUV4Y2VsQ29sdW1ucyhjb2x1bW5zKSxcclxuICAgICAgc2hlZXRzXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRXhwb3J0QnlUZW1wbGF0ZSA9IChleGNlbENvbmZpZzogRXhjZWxDb25maWcpID0+IHtcclxuICAgIGNvbnN0IGV4dGVuZENvbHVtbnMgPSB0aGlzLmV4dGVuZENvbHVtbnMgfHwgW107XHJcbiAgICBjb25zdCBjb2x1bW5zID0gWy4uLnRoaXMuY29sdW1ucywgLi4uZXh0ZW5kQ29sdW1uc107XHJcbiAgICB0aGlzLmV4cG9ydEJ5VGVtcGxhdGUuZW1pdCh7XHJcbiAgICAgIGV4Y2VsQ29uZmlnLFxyXG4gICAgICBleGNlbENvbHVtbnM6IHRoaXMuZ2VuZXJhdGVFeGNlbENvbHVtbnMoY29sdW1ucylcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkVGVtcGxhdGUgPSBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCBleGNlbENvbmZpZyA9IGF3YWl0IHRoaXMuZXhjZWxTZXJ2aWNlLnVwbG9hZFRlbXBsYXRlKHRoaXMuZnVsbEtleSwgdGhpcy52YWxpZGF0b3IpO1xyXG4gICAgdGhpcy5leGNlbENvbmZpZ3MucHVzaCh7XHJcbiAgICAgIG5hbWU6IGV4Y2VsQ29uZmlnLm5hbWUsXHJcbiAgICAgIGZ1bGxQYXRoOiBleGNlbENvbmZpZy5mdWxsUGF0aCxcclxuICAgICAgcmVtb3ZhYmxlOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkVGVtcGxhdGUgPSAoZXhjZWxDb25maWc6IEV4Y2VsQ29uZmlnKSA9PiB7XHJcbiAgICB0aGlzLmV4Y2VsU2VydmljZS5kb3dubG9hZFRlbXBsYXRlKGV4Y2VsQ29uZmlnLmZ1bGxQYXRoLCBleGNlbENvbmZpZy5uYW1lKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVRlbXBsYXRlID0gKGV4Y2VsQ29uZmlnOiBFeGNlbENvbmZpZykgPT4ge1xyXG4gICAgdGhpcy5ub3RpZnlTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnUmVtb3ZlIHRlbXBsYXRlJykpLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZXhjZWxTZXJ2aWNlLnJlbW92ZSh0aGlzLmZ1bGxLZXksIGV4Y2VsQ29uZmlnLm5hbWUpLmZpbmFsbHkodGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKTtcclxuICAgICAgY29uc3QgaWR4ID0gdGhpcy5leGNlbENvbmZpZ3MuaW5kZXhPZihleGNlbENvbmZpZyk7XHJcbiAgICAgIHRoaXMuZXhjZWxDb25maWdzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGxvYWRDb25maWd1cmF0aW9uKCkge1xyXG4gICAgdGhpcy5leGNlbENvbmZpZ3MgPSBbXTtcclxuICAgIHRoaXMuZXhjZWxDb25maWdzID0gYXdhaXQgdGhpcy5leGNlbFNlcnZpY2UuZ2V0RmlsZXModGhpcy5mdWxsS2V5KTtcclxuICB9XHJcblxyXG4gIGV4cG9ydERlZmF1bHQgPSBhc3luYyAoKSA9PiB7XHJcbiAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmluaXREZWZhdWx0VGVtcGxhdGUoKS5maW5hbGx5KHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RvcCk7XHJcbiAgICBjb25zdCBleGNlbENvbHVtbnM6IEV4Y2VsVGVtcGF0ZUNvbHVtbltdID0gW107XHJcbiAgICBjb25zdCBleHRlbmRDb2x1bW5zID0gdGhpcy5leHRlbmRDb2x1bW5zIHx8IFtdO1xyXG4gICAgY29uc3QgY29sdW1ucyA9IFsuLi50aGlzLmNvbHVtbnMsIC4uLmV4dGVuZENvbHVtbnNdO1xyXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbicpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xyXG4gICAgICAgICAgaWYgKGNoaWxkQ29sdW1uLnR5cGUgIT09ICdpbWFnZScpIHtcclxuICAgICAgICAgICAgZXhjZWxDb2x1bW5zLnB1c2goe1xyXG4gICAgICAgICAgICAgIGZpZWxkOiBjaGlsZENvbHVtbi5maWVsZCxcclxuICAgICAgICAgICAgICB0aXRsZTogY2hpbGRDb2x1bW4udGl0bGUsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IGNoaWxkQ29sdW1uLndpZHRoXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSAhPT0gJ2ltYWdlJykge1xyXG4gICAgICAgIGV4Y2VsQ29sdW1ucy5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXHJcbiAgICAgICAgICB0aXRsZTogY29sdW1uLnRpdGxlLFxyXG4gICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cG9ydEJ5VGVtcGxhdGUuZW1pdCh7XHJcbiAgICAgIGV4Y2VsQ29uZmlnOiB7XHJcbiAgICAgICAgZnVsbFBhdGg6IHJlc3VsdC5maWxlUGF0aCxcclxuICAgICAgICBuYW1lOiBgWyR7dGhpcy5mdWxsS2V5fV0gRGVmYXVsdC54bHN4YFxyXG4gICAgICB9LFxyXG4gICAgICBleGNlbENvbHVtbnNcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmV3VGVtcGxhdGUgPSAoKSA9PiB7XHJcbiAgICB0aGlzLm5vdGlmeVNlcnZpY2UuY29uZmlybVdpdGhJbnB1dCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdFbnRlciB5b3VyIHRlbXBsYXRlIG5hbWUnKSwge1xyXG4gICAgICBtYXhsZW5ndGg6IDUwXHJcbiAgICB9KS50aGVuKGFzeW5jIChmaWxlTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQoKTtcclxuICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZSArICcueGxzeCc7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdG9yPy4oZmlsZU5hbWUpKSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcodGhpcy52YWxpZGF0b3IoZmlsZU5hbWUpKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGV4cG9ydGFibGVDb2x1bW5zID0gdGhpcy5leHBvcnRhYmxlQ29sdW1ucy5maWx0ZXIoY29sdW1uID0+IHRoaXMuc2VsZWN0ZWRbY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgaWYgKCFleHBvcnRhYmxlQ29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIGV4cG9ydGFibGVDb2x1bW5zID0gdGhpcy5leHBvcnRhYmxlQ29sdW1ucztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZW5lcmF0ZUFuZFVwbG9hZFRlbXBsYXRlKGV4cG9ydGFibGVDb2x1bW5zLCBmaWxlTmFtZSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdD8uZmlsZVBhdGgpIHtcclxuICAgICAgICAgIGNvbnN0IGV4Y2VsQ29uZmlnOiBFeGNlbENvbmZpZyA9IHtcclxuICAgICAgICAgICAgZnVsbFBhdGg6IHJlc3VsdC5maWxlUGF0aCxcclxuICAgICAgICAgICAgbmFtZTogcmVzdWx0LmZpbGVOYW1lLFxyXG4gICAgICAgICAgICByZW1vdmFibGU6IHRydWVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLmV4Y2VsQ29uZmlncy5wdXNoKGV4Y2VsQ29uZmlnKTtcclxuICAgICAgICAgIHRoaXMub25FeHBvcnRCeVRlbXBsYXRlKGV4Y2VsQ29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VSYWRpbyA9IChtYXRSYWRpb0NoYW5nZTogTWF0UmFkaW9DaGFuZ2UpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRXhjZWxDb25maWcgPSB0aGlzLmV4Y2VsQ29uZmlncy5maW5kKGUgPT4gZS5uYW1lID09PSBtYXRSYWRpb0NoYW5nZS52YWx1ZSk7XHJcbiAgICBpZiAoIXNlbGVjdGVkRXhjZWxDb25maWcpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEV4Y2VsQ29uZmlnID0ge1xyXG4gICAgICAgIG5hbWU6IHRoaXMubmV3RXhjZWxDb25maWdcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFeGNlbENvbmZpZyA9IHNlbGVjdGVkRXhjZWxDb25maWc7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cG9ydGFibGVDb2x1bW5zID0gWy4uLnRoaXMuY29sdW1ucywgLi4uKHRoaXMuZXh0ZW5kQ29sdW1ucyB8fCBbXSldLmZpbHRlcihlID0+IGUudHlwZSAhPT0gJ2ltYWdlJyk7XHJcbiAgICB0aGlzLnNlbGVjdGVkID0ge307XHJcbiAgfVxyXG59XHJcbiJdfQ==
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wb3B1cC1leHBvcnQtZXhjZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ncmlkLyIsInNvdXJjZXMiOlsic3JjL2xpYi9jb21wb25lbnRzL2dyaWQtcG9wdXAtZXhwb3J0LWV4Y2VsL2dyaWQtcG9wdXAtZXhwb3J0LWV4Y2VsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBeUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzVILE9BQU8sRUFDTCxlQUFlLEVBQ2hCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxFQUNMLGdCQUFnQixFQUNqQixNQUFNLDBCQUEwQixDQUFDO0FBRWxDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFHL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBTzFELE1BQU0sT0FBTyxzQkFBc0I7SUEyQmpDLFlBQ1UsR0FBc0IsRUFDdEIsY0FBZ0MsRUFDaEMsYUFBOEIsRUFDOUIsYUFBOEIsRUFDOUIsZ0JBQW9DO1FBSnBDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUNoQyxrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWlCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUEvQnRDLFdBQU0sR0FBRyxvQkFBb0IsQ0FBQztRQUN0QyxtQkFBYyxHQUFHLHNDQUFzQyxDQUFDO1FBRS9DLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFVVCxZQUFPLEdBQW1C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LENBQUMsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUMsQ0FBQztnQkFDakMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO2dCQUNwQixJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVE7Z0JBQ2hCLFNBQVMsRUFBRSxJQUFJO2FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztLQUFBOzs7WUExTkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSw0QkFBNEI7Z0JBQ3RDLDg1R0FBdUQ7O2FBRXhEOzs7WUF2QmtGLGlCQUFpQjtZQVFsRyxnQkFBZ0I7WUFTVCxlQUFlO1lBYnRCLGVBQWU7WUFRZixrQkFBa0I7OztvQkFlakIsU0FBUyxTQUFDLE9BQU87a0JBQ2pCLEtBQUs7c0JBVUwsS0FBSzs0QkFDTCxLQUFLO3VCQUNMLEtBQUs7d0JBQ0wsS0FBSzsyQkFDTCxLQUFLOytCQUVMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNkR3JpZENvbHVtbiwgR3JpZEJhc2VPcHRpb25FeHBvcnQgfSBmcm9tICcuLi8uLi9ncmlkLm1vZGVsJztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2ROb3RpZnlTZXJ2aWNlXHJcbn0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9ub3RpZnknO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZExvYWRpbmdTZXJ2aWNlXHJcbn0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9sb2FkaW5nJztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2RUcmFuc2xhdGVTZXJ2aWNlXHJcbn0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS90cmFuc2xhdGUnO1xyXG5pbXBvcnQgaGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XHJcbmltcG9ydCB7IE1hdFJhZGlvQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xyXG5pbXBvcnQgeyBTZE1vZGFsIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9tb2RhbCc7XHJcbmltcG9ydCB7IFNkRXhwb3J0U2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvZXhwb3J0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtZ3JpZC1wb3B1cC1leHBvcnQtZXhjZWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLXBvcHVwLWV4cG9ydC1leGNlbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC1wb3B1cC1leHBvcnQtZXhjZWwuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RHcmlkUG9wdXBFeHBvcnRFeGNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHJpdmF0ZSBwcmVmaXggPSAnUG9wdXAgRXhwb3J0IEV4Y2VsJztcclxuICBuZXdFeGNlbENvbmZpZyA9ICdmZDhmYjVkYi1hN2FkLTQzOTgtOTNhYy1jYjMzNTAyNjExODAnO1xyXG4gIEBWaWV3Q2hpbGQoJ21vZGFsJykgbW9kYWw6IFNkTW9kYWw7XHJcbiAgQElucHV0KCkga2V5ID0gJyc7XHJcbiAgZ2V0IGZ1bGxLZXkoKSB7XHJcbiAgICBpZiAoIXRoaXMua2V5KSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiBoYXNoKHtcclxuICAgICAgcHJlZml4OiB0aGlzLnByZWZpeCxcclxuICAgICAga2V5OiB0aGlzLmtleVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IFNkR3JpZENvbHVtbltdID0gW107XHJcbiAgQElucHV0KCkgZXh0ZW5kQ29sdW1uczogU2RHcmlkQ29sdW1uW10gPSBbXTtcclxuICBASW5wdXQoKSBmaWxlTmFtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHZhbGlkYXRvcjogKGZpbGVOYW1lOiBzdHJpbmcpID0+IHN0cmluZztcclxuICBASW5wdXQoKSBleHBvcnRPcHRpb246IEdyaWRCYXNlT3B0aW9uRXhwb3J0O1xyXG4gIGV4Y2VsQ29uZmlnczogYW55W10gPSBbXTtcclxuICBAT3V0cHV0KCkgZXhwb3J0QnlUZW1wbGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBleGNlbENvbmZpZzogYW55LCBleGNlbENvbHVtbnM6IGFueVtdIH0+KCk7XHJcbiAgdGFiSW5kZXggPSAwO1xyXG4gIHNlbGVjdGVkRXhjZWxDb25maWc6IGFueSA9IHt9O1xyXG4gIGV4cG9ydGFibGVDb2x1bW5zOiBTZEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIHNlbGVjdGVkOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBib29sZWFuXHJcbiAgfSA9IHt9O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBsb2FkaW5nU2VydmljZTogU2RMb2FkaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogU2RFeHBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlOiBTZE5vdGlmeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFNkVHJhbnNsYXRlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG5cclxuICB9XHJcblxyXG4gIGFzeW5jIG9wZW4oKSB7XHJcbiAgICBpZiAoIXRoaXMuZnVsbEtleSkge1xyXG4gICAgICBhd2FpdCB0aGlzLmV4cG9ydERlZmF1bHQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5sb2FkQ29uZmlndXJhdGlvbigpO1xyXG4gICAgdGhpcy5leHBvcnRhYmxlQ29sdW1ucyA9IFsuLi50aGlzLmNvbHVtbnMsIC4uLih0aGlzLmV4dGVuZENvbHVtbnMgfHwgW10pXS5maWx0ZXIoZSA9PiBlLnR5cGUgIT09ICdpbWFnZScpO1xyXG4gICAgdGhpcy5zZWxlY3RlZCA9IHt9O1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRXhjZWxDb25maWc/Lm5hbWUpIHtcclxuICAgICAgaWYgKHRoaXMuZXhjZWxDb25maWdzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEV4Y2VsQ29uZmlnID0gdGhpcy5leGNlbENvbmZpZ3NbMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEV4Y2VsQ29uZmlnID0ge1xyXG4gICAgICAgICAgbmFtZTogdGhpcy5uZXdFeGNlbENvbmZpZ1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMubW9kYWwub3BlbigpO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUV4Y2VsQ29sdW1ucyA9IChjb2x1bW5zOiBTZEdyaWRDb2x1bW5bXSkgPT4ge1xyXG4gICAgY29uc3QgZXhjZWxDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbicpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xyXG4gICAgICAgICAgaWYgKGNoaWxkQ29sdW1uLnR5cGUgIT09ICdpbWFnZScpIHtcclxuICAgICAgICAgICAgZXhjZWxDb2x1bW5zLnB1c2goe1xyXG4gICAgICAgICAgICAgIGZpZWxkOiBjaGlsZENvbHVtbi5maWVsZCxcclxuICAgICAgICAgICAgICB0aXRsZTogY2hpbGRDb2x1bW4udGl0bGUsXHJcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGNoaWxkQ29sdW1uLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBjaGlsZENvbHVtbi53aWR0aFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgIT09ICdpbWFnZScpIHtcclxuICAgICAgICBleGNlbENvbHVtbnMucHVzaCh7XHJcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxyXG4gICAgICAgICAgdGl0bGU6IGNvbHVtbi50aXRsZSxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBjb2x1bW4uZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICB3aWR0aDogY29sdW1uLndpZHRoXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBleGNlbENvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRUZW1wbGF0ZSA9IGFzeW5jIChjb2x1bW5zOiBTZEdyaWRDb2x1bW5bXSwgZmlsZU5hbWU/OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbHVtbnMgPSBjb2x1bW5zIHx8IFtdO1xyXG4gICAgY29uc3Qgc2hlZXRzOiB7XHJcbiAgICAgIG5hbWU6IHN0cmluZyxcclxuICAgICAgaXRlbXM6IGFueVtdLFxyXG4gICAgICBmaWVsZHM6IHN0cmluZ1tdXHJcbiAgICB9W10gPSBbXTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZXhwb3J0T3B0aW9uPy5zaGVldHMpKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgc2hlZXQgb2YgdGhpcy5leHBvcnRPcHRpb24uc2hlZXRzKSB7XHJcbiAgICAgICAgaWYgKHNoZWV0Lm5hbWUgJiYgc2hlZXQuaXRlbXMgJiYgc2hlZXQuZmllbGRzKSB7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzaGVldC5pdGVtcykpIHtcclxuICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgaXRlbXM6IHNoZWV0Lml0ZW1zLFxyXG4gICAgICAgICAgICAgIGZpZWxkczogc2hlZXQuZmllbGRzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgaXRlbXM6IGF3YWl0IHNoZWV0Lml0ZW1zKCksXHJcbiAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmdlbmVyYXRlVGVtcGxhdGUoe1xyXG4gICAgICBmaWxlTmFtZTogZmlsZU5hbWUgfHwgdGhpcy5maWxlTmFtZSxcclxuICAgICAgY29sdW1uczogdGhpcy5nZW5lcmF0ZUV4Y2VsQ29sdW1ucyhjb2x1bW5zKSxcclxuICAgICAgc2hlZXRzXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdERlZmF1bHRUZW1wbGF0ZSA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IGV4dGVuZENvbHVtbnMgPSB0aGlzLmV4dGVuZENvbHVtbnMgfHwgW107XHJcbiAgICBjb25zdCBjb2x1bW5zID0gWy4uLnRoaXMuY29sdW1ucywgLi4uZXh0ZW5kQ29sdW1uc107XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5pbml0VGVtcGxhdGUoY29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVRlbXBsYXRlID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdGFydCgpO1xyXG4gICAgYXdhaXQgdGhpcy5pbml0RGVmYXVsdFRlbXBsYXRlKCkuZmluYWxseSh0aGlzLmxvYWRpbmdTZXJ2aWNlLnN0b3ApO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVBbmRVcGxvYWRUZW1wbGF0ZSA9IGFzeW5jIChjb2x1bW5zOiBTZEdyaWRDb2x1bW5bXSwgZmlsZU5hbWU/OiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IHNoZWV0czoge1xyXG4gICAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICAgIGl0ZW1zOiBhbnlbXSxcclxuICAgICAgZmllbGRzOiBzdHJpbmdbXVxyXG4gICAgfVtdID0gW107XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmV4cG9ydE9wdGlvbj8uc2hlZXRzKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IHNoZWV0IG9mIHRoaXMuZXhwb3J0T3B0aW9uLnNoZWV0cykge1xyXG4gICAgICAgIGlmIChzaGVldC5uYW1lICYmIHNoZWV0Lml0ZW1zICYmIHNoZWV0LmZpZWxkcykge1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2hlZXQuaXRlbXMpKSB7XHJcbiAgICAgICAgICAgIHNoZWV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICBuYW1lOiBzaGVldC5uYW1lLFxyXG4gICAgICAgICAgICAgIGl0ZW1zOiBzaGVldC5pdGVtcyxcclxuICAgICAgICAgICAgICBmaWVsZHM6IHNoZWV0LmZpZWxkc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNoZWV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICBuYW1lOiBzaGVldC5uYW1lLFxyXG4gICAgICAgICAgICAgIGl0ZW1zOiBhd2FpdCBzaGVldC5pdGVtcygpLFxyXG4gICAgICAgICAgICAgIGZpZWxkczogc2hlZXQuZmllbGRzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhwb3J0U2VydmljZS5nZW5lcmF0ZVVwbG9hZFRlbXBsYXRlKHtcclxuICAgICAga2V5OiB0aGlzLmZ1bGxLZXksXHJcbiAgICAgIHRlbXBsYXRlOiB7XHJcbiAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lIHx8IHRoaXMuZmlsZU5hbWUsXHJcbiAgICAgICAgY29sdW1uczogdGhpcy5nZW5lcmF0ZUV4Y2VsQ29sdW1ucyhjb2x1bW5zKSxcclxuICAgICAgICBzaGVldHNcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydEJ5VGVtcGxhdGUgPSAoZXhjZWxDb25maWc6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgZXh0ZW5kQ29sdW1ucyA9IHRoaXMuZXh0ZW5kQ29sdW1ucyB8fCBbXTtcclxuICAgIGNvbnN0IGNvbHVtbnMgPSBbLi4udGhpcy5jb2x1bW5zLCAuLi5leHRlbmRDb2x1bW5zXTtcclxuICAgIHRoaXMuZXhwb3J0QnlUZW1wbGF0ZS5lbWl0KHtcclxuICAgICAgZXhjZWxDb25maWcsXHJcbiAgICAgIGV4Y2VsQ29sdW1uczogdGhpcy5nZW5lcmF0ZUV4Y2VsQ29sdW1ucyhjb2x1bW5zKVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRUZW1wbGF0ZSA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IGV4Y2VsQ29uZmlnID0gYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLnVwbG9hZFRlbXBsYXRlKHtcclxuICAgICAga2V5OiB0aGlzLmZ1bGxLZXksXHJcbiAgICAgIHZhbGlkYXRvcjogdGhpcy52YWxpZGF0b3JcclxuICAgIH0pO1xyXG4gICAgdGhpcy5leGNlbENvbmZpZ3MucHVzaCh7XHJcbiAgICAgIG5hbWU6IGV4Y2VsQ29uZmlnLmZpbGVOYW1lLFxyXG4gICAgICBmdWxsUGF0aDogZXhjZWxDb25maWcuZmlsZVBhdGgsXHJcbiAgICAgIHJlbW92YWJsZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFRlbXBsYXRlID0gKGV4Y2VsQ29uZmlnOiBhbnkpID0+IHtcclxuICAgIHRoaXMuZXhwb3J0U2VydmljZS5kb3dubG9hZChleGNlbENvbmZpZy5mdWxsUGF0aCwgZXhjZWxDb25maWcubmFtZSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVUZW1wbGF0ZSA9IChleGNlbENvbmZpZzogYW55KSA9PiB7XHJcbiAgICB0aGlzLm5vdGlmeVNlcnZpY2UuY29uZmlybSh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdSZW1vdmUgdGVtcGxhdGUnKSkudGhlbihhc3luYyAoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQoKTtcclxuICAgICAgYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLnJlbW92ZUZpbGUoe2tleTogdGhpcy5mdWxsS2V5LCBmaWxlTmFtZTogZXhjZWxDb25maWcubmFtZX0pLmZpbmFsbHkodGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKTtcclxuICAgICAgY29uc3QgaWR4ID0gdGhpcy5leGNlbENvbmZpZ3MuaW5kZXhPZihleGNlbENvbmZpZyk7XHJcbiAgICAgIHRoaXMuZXhjZWxDb25maWdzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGxvYWRDb25maWd1cmF0aW9uKCkge1xyXG4gICAgdGhpcy5leGNlbENvbmZpZ3MgPSBbXTtcclxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmZpbGVzSW5Gb2xkZXIoe2tleTogdGhpcy5mdWxsS2V5fSk7XHJcbiAgICB0aGlzLmV4Y2VsQ29uZmlncyA9IGZpbGVzLm1hcChlPT4gKHtcclxuICAgICAgZnVsbFBhdGg6IGUuZmlsZVBhdGgsXHJcbiAgICAgIG5hbWU6IGUuZmlsZU5hbWUsXHJcbiAgICAgIHJlbW92YWJsZTogdHJ1ZVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0RGVmYXVsdCA9IGFzeW5jICgpID0+IHtcclxuICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RhcnQoKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaW5pdERlZmF1bHRUZW1wbGF0ZSgpLmZpbmFsbHkodGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKTtcclxuICAgIGNvbnN0IGV4Y2VsQ29sdW1uczogYW55W10gPSBbXTtcclxuICAgIGNvbnN0IGV4dGVuZENvbHVtbnMgPSB0aGlzLmV4dGVuZENvbHVtbnMgfHwgW107XHJcbiAgICBjb25zdCBjb2x1bW5zID0gWy4uLnRoaXMuY29sdW1ucywgLi4uZXh0ZW5kQ29sdW1uc107XHJcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJykge1xyXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICBpZiAoY2hpbGRDb2x1bW4udHlwZSAhPT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgICBleGNlbENvbHVtbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgZmllbGQ6IGNoaWxkQ29sdW1uLmZpZWxkLFxyXG4gICAgICAgICAgICAgIHRpdGxlOiBjaGlsZENvbHVtbi50aXRsZSxcclxuICAgICAgICAgICAgICB3aWR0aDogY2hpbGRDb2x1bW4ud2lkdGhcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlICE9PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgZXhjZWxDb2x1bW5zLnB1c2goe1xyXG4gICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcclxuICAgICAgICAgIHRpdGxlOiBjb2x1bW4udGl0bGUsXHJcbiAgICAgICAgICB3aWR0aDogY29sdW1uLndpZHRoXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHRoaXMuZXhwb3J0QnlUZW1wbGF0ZS5lbWl0KHtcclxuICAgIC8vICAgZXhjZWxDb25maWc6IHtcclxuICAgIC8vICAgICBmdWxsUGF0aDogcmVzdWx0LmZpbGVQYXRoLFxyXG4gICAgLy8gICAgIG5hbWU6IGBbJHt0aGlzLmZ1bGxLZXl9XSBEZWZhdWx0Lnhsc3hgXHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyAgIGV4Y2VsQ29sdW1uc1xyXG4gICAgLy8gfSk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZXdUZW1wbGF0ZSA9ICgpID0+IHtcclxuICAgIHRoaXMubm90aWZ5U2VydmljZS5jb25maXJtV2l0aElucHV0KHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0VudGVyIHlvdXIgdGVtcGxhdGUgbmFtZScpLCB7XHJcbiAgICAgIG1heGxlbmd0aDogNTBcclxuICAgIH0pLnRoZW4oYXN5bmMgKGZpbGVOYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdGFydCgpO1xyXG4gICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lICsgJy54bHN4JztcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAodGhpcy52YWxpZGF0b3I/LihmaWxlTmFtZSkpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZyh0aGlzLnZhbGlkYXRvcihmaWxlTmFtZSkpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZXhwb3J0YWJsZUNvbHVtbnMgPSB0aGlzLmV4cG9ydGFibGVDb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gdGhpcy5zZWxlY3RlZFtjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICBpZiAoIWV4cG9ydGFibGVDb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgICAgZXhwb3J0YWJsZUNvbHVtbnMgPSB0aGlzLmV4cG9ydGFibGVDb2x1bW5zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdlbmVyYXRlQW5kVXBsb2FkVGVtcGxhdGUoZXhwb3J0YWJsZUNvbHVtbnMsIGZpbGVOYW1lKTtcclxuICAgICAgICBpZiAocmVzdWx0Py5maWxlUGF0aCkge1xyXG4gICAgICAgICAgY29uc3QgZXhjZWxDb25maWc6IGFueSA9IHtcclxuICAgICAgICAgICAgZnVsbFBhdGg6IHJlc3VsdC5maWxlUGF0aCxcclxuICAgICAgICAgICAgbmFtZTogcmVzdWx0LmZpbGVOYW1lLFxyXG4gICAgICAgICAgICByZW1vdmFibGU6IHRydWVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLmV4Y2VsQ29uZmlncy5wdXNoKGV4Y2VsQ29uZmlnKTtcclxuICAgICAgICAgIHRoaXMub25FeHBvcnRCeVRlbXBsYXRlKGV4Y2VsQ29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdG9wKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VSYWRpbyA9IChtYXRSYWRpb0NoYW5nZTogTWF0UmFkaW9DaGFuZ2UpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRXhjZWxDb25maWcgPSB0aGlzLmV4Y2VsQ29uZmlncy5maW5kKGUgPT4gZS5uYW1lID09PSBtYXRSYWRpb0NoYW5nZS52YWx1ZSk7XHJcbiAgICBpZiAoIXNlbGVjdGVkRXhjZWxDb25maWcpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEV4Y2VsQ29uZmlnID0ge1xyXG4gICAgICAgIG5hbWU6IHRoaXMubmV3RXhjZWxDb25maWdcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFeGNlbENvbmZpZyA9IHNlbGVjdGVkRXhjZWxDb25maWc7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cG9ydGFibGVDb2x1bW5zID0gWy4uLnRoaXMuY29sdW1ucywgLi4uKHRoaXMuZXh0ZW5kQ29sdW1ucyB8fCBbXSldLmZpbHRlcihlID0+IGUudHlwZSAhPT0gJ2ltYWdlJyk7XHJcbiAgICB0aGlzLnNlbGVjdGVkID0ge307XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wb3B1cC1leHBvcnQtZXhjZWwubW9kZWwuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2dyaWQvIiwic291cmNlcyI6WyJzcmMvbGliL2NvbXBvbmVudHMvZ3JpZC1wb3B1cC1leHBvcnQtZXhjZWwvZ3JpZC1wb3B1cC1leHBvcnQtZXhjZWwubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV4Y2VsQ29uZmlnIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9leGNlbCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEV4Y2VsQ29uZmlndXJhdGlvbiB7XHJcbiAgZXhjZWxDb25maWdzOiBFeGNlbENvbmZpZ1tdO1xyXG59XHJcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1wb3B1cC1leHBvcnQtZXhjZWwubW9kZWwuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2dyaWQvIiwic291cmNlcyI6WyJzcmMvbGliL2NvbXBvbmVudHMvZ3JpZC1wb3B1cC1leHBvcnQtZXhjZWwvZ3JpZC1wb3B1cC1leHBvcnQtZXhjZWwubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRXhjZWxDb25maWd1cmF0aW9uIHtcclxuICBleGNlbENvbmZpZ3M6IGFueVtdO1xyXG59XHJcbiJdfQ==