@sd-angular/core 1.3.103 → 1.3.105

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 (23) hide show
  1. package/bundles/sd-angular-core-grid-material.umd.js +296 -149
  2. package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
  3. package/bundles/sd-angular-core-grid-material.umd.min.js +2 -2
  4. package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
  5. package/bundles/sd-angular-core-setting.umd.js +21 -25
  6. package/bundles/sd-angular-core-setting.umd.js.map +1 -1
  7. package/bundles/sd-angular-core-setting.umd.min.js +1 -1
  8. package/bundles/sd-angular-core-setting.umd.min.js.map +1 -1
  9. package/esm2015/grid-material/src/lib/components/grid-filter/grid-filter.component.js +20 -19
  10. package/esm2015/grid-material/src/lib/grid-material.component.js +73 -56
  11. package/esm2015/grid-material/src/lib/services/grid-filter/grid-filter.service.js +126 -68
  12. package/esm2015/setting/src/lib/setting.service.js +22 -26
  13. package/fesm2015/sd-angular-core-grid-material.js +212 -137
  14. package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
  15. package/fesm2015/sd-angular-core-setting.js +21 -25
  16. package/fesm2015/sd-angular-core-setting.js.map +1 -1
  17. package/grid-material/sd-angular-core-grid-material.metadata.json +1 -1
  18. package/grid-material/src/lib/components/grid-filter/grid-filter.component.d.ts +7 -7
  19. package/grid-material/src/lib/grid-material.component.d.ts +3 -3
  20. package/grid-material/src/lib/services/grid-filter/grid-filter.service.d.ts +4 -4
  21. package/package.json +1 -1
  22. package/{sd-angular-core-1.3.103.tgz → sd-angular-core-1.3.105.tgz} +0 -0
  23. package/setting/sd-angular-core-setting.metadata.json +1 -1
@@ -1,13 +1,14 @@
1
- var _filterConfiguration, _filterValue, _cache, _loadDefaultConfiguration, _loadDefaultValue;
1
+ var _filterConfiguration, _filterValue, _cache, _defaultConfiguration, _defaultValue, _initConfiguration, _initValue;
2
2
  import { __classPrivateFieldGet } from "tslib";
3
- import { Injectable } from '@angular/core';
4
- import hash from 'object-hash';
5
- import { SdSettingService } from '@sd-angular/core/setting';
3
+ import { Injectable } from "@angular/core";
4
+ import hash from "object-hash";
5
+ import { SdSettingService } from "@sd-angular/core/setting";
6
+ import { startWith } from "rxjs/operators";
6
7
  export class SdGridFilterService {
7
8
  constructor(settingService) {
8
9
  this.settingService = settingService;
9
- _filterConfiguration.set(this, 'GRID-FILTER-CONFIGURATION');
10
- _filterValue.set(this, 'GRID-FILTER-VALUE');
10
+ _filterConfiguration.set(this, "GRID-FILTER-CONFIGURATION");
11
+ _filterValue.set(this, "GRID-FILTER-VALUE");
11
12
  _cache.set(this, {});
12
13
  this.register = (key, args) => {
13
14
  let cacheSession = false;
@@ -15,69 +16,57 @@ export class SdGridFilterService {
15
16
  const { columns, externalFilters } = args;
16
17
  key = hash({
17
18
  columns,
18
- externalFilters
19
+ externalFilters,
19
20
  });
20
21
  cacheSession = true; // Nếu không có key thì chỉ lưu theo session
21
22
  }
22
23
  if (!__classPrivateFieldGet(this, _cache)[key]) {
24
+ // Setting của filter configuration
23
25
  const filterConfiguration = this.settingService.create({
24
26
  prefix: __classPrivateFieldGet(this, _filterConfiguration),
25
- key
27
+ key,
26
28
  }, {
27
- default: __classPrivateFieldGet(this, _loadDefaultConfiguration).call(this, args),
28
- type: cacheSession ? 'session' : undefined
29
+ default: __classPrivateFieldGet(this, _defaultConfiguration).call(this, args),
30
+ type: cacheSession ? "session" : undefined,
29
31
  });
32
+ // Lấy giá trị configuration merge với giá trị defaultShowing của args nếu như args có thay đổi
33
+ filterConfiguration.set(__classPrivateFieldGet(this, _initConfiguration).call(this, args, filterConfiguration.get()));
34
+ // Setting của filter value
30
35
  const filterValue = this.settingService.create({
31
36
  prefix: __classPrivateFieldGet(this, _filterValue),
32
- key
37
+ key,
33
38
  }, {
34
- default: __classPrivateFieldGet(this, _loadDefaultValue).call(this, args),
35
- type: cacheSession ? 'session' : undefined
39
+ default: __classPrivateFieldGet(this, _defaultValue).call(this, args),
40
+ type: cacheSession ? "session" : undefined,
36
41
  });
42
+ // Lấy giá trị value merge với giá trị default của args nếu như args có thay đổi
43
+ filterValue.set(__classPrivateFieldGet(this, _initValue).call(this, args, filterValue.get()));
37
44
  __classPrivateFieldGet(this, _cache)[key] = {
38
45
  configuration: {
39
46
  get: () => {
40
- const configuration = filterConfiguration.get();
41
- return {
42
- // Filter column
43
- inlineColumn: (configuration === null || configuration === void 0 ? void 0 : configuration.inlineColumn) || {},
44
- // Filter external
45
- inlineExternal: (configuration === null || configuration === void 0 ? void 0 : configuration.inlineExternal) || {},
46
- // Filter def
47
- inlineFilterDef: (configuration === null || configuration === void 0 ? void 0 : configuration.inlineFilterDef) || {},
48
- };
47
+ return filterConfiguration.get();
49
48
  },
50
49
  set: (configuration) => {
51
- const keys = Object.keys(configuration || {});
52
- const current = filterConfiguration.get();
53
- const { inlineColumn, inlineExternal, inlineFilterDef } = current;
54
- const updatedConfiguration = {
55
- // Filter column
56
- inlineColumn: keys.includes('inlineColumn') ? ((configuration === null || configuration === void 0 ? void 0 : configuration.inlineColumn) || {}) : inlineColumn,
57
- // Filter external
58
- inlineExternal: keys.includes('inlineExternal') ? ((configuration === null || configuration === void 0 ? void 0 : configuration.inlineExternal) || {}) : inlineExternal,
59
- // Filter def
60
- inlineFilterDef: keys.includes('inlineFilterDef') ? ((configuration === null || configuration === void 0 ? void 0 : configuration.inlineFilterDef) || {}) : inlineFilterDef,
50
+ const { inlineColumn, inlineExternal, inlineFilterDef } = configuration;
51
+ filterConfiguration.set({
52
+ inlineColumn,
53
+ inlineExternal,
54
+ inlineFilterDef,
55
+ });
56
+ return {
57
+ inlineColumn,
58
+ inlineExternal,
59
+ inlineFilterDef,
61
60
  };
62
- filterConfiguration.set(updatedConfiguration);
63
- return updatedConfiguration;
64
61
  },
65
62
  remove: () => {
66
63
  filterConfiguration.remove();
67
64
  },
68
- observer: filterConfiguration.observer
65
+ observer: filterConfiguration.observer.pipe(startWith(filterConfiguration.get())),
69
66
  },
70
67
  value: {
71
68
  get: () => {
72
- const configuration = filterValue.get();
73
- return {
74
- // Filter column
75
- columnFilter: (configuration === null || configuration === void 0 ? void 0 : configuration.columnFilter) || {},
76
- // Filter external
77
- externalFilter: (configuration === null || configuration === void 0 ? void 0 : configuration.externalFilter) || {},
78
- // Filter def
79
- filterDef: (configuration === null || configuration === void 0 ? void 0 : configuration.filterDef) || {}
80
- };
69
+ return filterValue.get();
81
70
  },
82
71
  set: (configuration) => {
83
72
  const keys = Object.keys(configuration || {});
@@ -85,11 +74,17 @@ export class SdGridFilterService {
85
74
  const { columnFilter, externalFilter, filterDef } = current;
86
75
  const updatedConfiguration = {
87
76
  // Filter column
88
- columnFilter: keys.includes('columnFilter') ? ((configuration === null || configuration === void 0 ? void 0 : configuration.columnFilter) || {}) : columnFilter,
77
+ columnFilter: keys.includes("columnFilter")
78
+ ? (configuration === null || configuration === void 0 ? void 0 : configuration.columnFilter) || {}
79
+ : columnFilter,
89
80
  // Filter external
90
- externalFilter: keys.includes('externalFilter') ? ((configuration === null || configuration === void 0 ? void 0 : configuration.externalFilter) || {}) : externalFilter,
81
+ externalFilter: keys.includes("externalFilter")
82
+ ? (configuration === null || configuration === void 0 ? void 0 : configuration.externalFilter) || {}
83
+ : externalFilter,
91
84
  // Filter def
92
- filterDef: keys.includes('filterDef') ? ((configuration === null || configuration === void 0 ? void 0 : configuration.filterDef) || {}) : filterDef,
85
+ filterDef: keys.includes("filterDef")
86
+ ? (configuration === null || configuration === void 0 ? void 0 : configuration.filterDef) || {}
87
+ : filterDef,
93
88
  };
94
89
  filterValue.set(updatedConfiguration);
95
90
  return updatedConfiguration;
@@ -97,72 +92,135 @@ export class SdGridFilterService {
97
92
  remove: () => {
98
93
  filterValue.remove();
99
94
  },
100
- observer: filterValue.observer
101
- }
95
+ observer: filterValue.observer.pipe(startWith(filterValue.get())),
96
+ },
102
97
  };
103
98
  }
104
99
  return __classPrivateFieldGet(this, _cache)[key];
105
100
  };
106
- _loadDefaultConfiguration.set(this, (args) => {
107
- var _a, _b, _c, _d;
101
+ _defaultConfiguration.set(this, (args) => {
102
+ var _a;
108
103
  const { columns, externalFilters, filterDefs } = args;
109
104
  const inlineColumn = {};
110
105
  const inlineExternal = {};
111
106
  const inlineFilterDef = {};
112
107
  // Filter column
113
- for (const item of (columns || [])) {
114
- inlineColumn[item.field] = (_a = inlineColumn[item.field]) !== null && _a !== void 0 ? _a : (_b = item === null || item === void 0 ? void 0 : item.filter) === null || _b === void 0 ? void 0 : _b.defaultShowing;
108
+ for (const item of columns || []) {
109
+ inlineColumn[item.field] = (_a = item === null || item === void 0 ? void 0 : item.filter) === null || _a === void 0 ? void 0 : _a.defaultShowing;
115
110
  }
116
111
  // Filter external
117
- for (const item of (externalFilters || [])) {
118
- inlineExternal[item.field] = (_c = inlineExternal[item.field]) !== null && _c !== void 0 ? _c : item === null || item === void 0 ? void 0 : item.defaultShowing;
112
+ for (const item of externalFilters || []) {
113
+ inlineExternal[item.field] = item === null || item === void 0 ? void 0 : item.defaultShowing;
119
114
  }
120
115
  // Filter def
121
- for (const item of (filterDefs || [])) {
122
- inlineFilterDef[item.sdMaterialFilterDef] = (_d = inlineFilterDef[item.sdMaterialFilterDef]) !== null && _d !== void 0 ? _d : item === null || item === void 0 ? void 0 : item.defaultShowing;
116
+ for (const item of filterDefs || []) {
117
+ inlineFilterDef[item.sdMaterialFilterDef] = item === null || item === void 0 ? void 0 : item.defaultShowing;
123
118
  }
124
119
  return {
120
+ // Filter column
125
121
  inlineColumn,
122
+ // Filter external
126
123
  inlineExternal,
124
+ // Filter def
127
125
  inlineFilterDef,
128
126
  };
129
127
  });
130
- _loadDefaultValue.set(this, (args) => {
131
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
128
+ _defaultValue.set(this, (args) => {
129
+ var _a;
130
+ const columnFilter = {};
131
+ const externalFilter = {};
132
+ const filterDef = {};
132
133
  const { columns, externalFilters, filterDefs } = args;
134
+ // Filter column
135
+ for (const item of columns || []) {
136
+ columnFilter[item.field] = (_a = item === null || item === void 0 ? void 0 : item.filter) === null || _a === void 0 ? void 0 : _a.default;
137
+ }
138
+ // Filter external
139
+ for (const item of externalFilters || []) {
140
+ externalFilter[item.field] = item === null || item === void 0 ? void 0 : item.default;
141
+ }
142
+ // Filter def
143
+ for (const item of filterDefs || []) {
144
+ filterDef[item.sdMaterialFilterDef] = undefined;
145
+ }
146
+ return {
147
+ // Filter column
148
+ columnFilter,
149
+ // Filter external
150
+ externalFilter,
151
+ // Filter def
152
+ filterDef,
153
+ };
154
+ });
155
+ _initConfiguration.set(this, (args, configuration) => {
156
+ var _a, _b, _c, _d, _e, _f, _g;
157
+ const { columns, externalFilters, filterDefs } = args;
158
+ const inlineColumn = {};
159
+ const inlineExternal = {};
160
+ const inlineFilterDef = {};
161
+ // Filter column
162
+ for (const item of columns || []) {
163
+ inlineColumn[item.field] = (_b = (_a = configuration === null || configuration === void 0 ? void 0 : configuration.inlineColumn) === null || _a === void 0 ? void 0 : _a[item.field]) !== null && _b !== void 0 ? _b : (_c = item === null || item === void 0 ? void 0 : item.filter) === null || _c === void 0 ? void 0 : _c.defaultShowing;
164
+ }
165
+ // Filter external
166
+ for (const item of externalFilters || []) {
167
+ inlineExternal[item.field] = (_e = (_d = configuration === null || configuration === void 0 ? void 0 : configuration.inlineExternal) === null || _d === void 0 ? void 0 : _d[item.field]) !== null && _e !== void 0 ? _e : item === null || item === void 0 ? void 0 : item.defaultShowing;
168
+ }
169
+ // Filter def
170
+ for (const item of filterDefs || []) {
171
+ inlineFilterDef[item.sdMaterialFilterDef] = (_g = (_f = configuration === null || configuration === void 0 ? void 0 : configuration.inlineFilterDef) === null || _f === void 0 ? void 0 : _f[item.sdMaterialFilterDef]) !== null && _g !== void 0 ? _g : item === null || item === void 0 ? void 0 : item.defaultShowing;
172
+ }
173
+ return {
174
+ // Filter column
175
+ inlineColumn,
176
+ // Filter external
177
+ inlineExternal,
178
+ // Filter def
179
+ inlineFilterDef,
180
+ };
181
+ });
182
+ _initValue.set(this, (args, value) => {
183
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
133
184
  const columnFilter = {};
134
185
  const externalFilter = {};
135
186
  const filterDef = {};
187
+ const { columns, externalFilters, filterDefs } = args;
136
188
  // Filter column
137
- for (const item of (columns || [])) {
138
- columnFilter[item.field] = (_a = columnFilter[item.field]) !== null && _a !== void 0 ? _a : (_b = item === null || item === void 0 ? void 0 : item.filter) === null || _b === void 0 ? void 0 : _b.default;
189
+ for (const item of columns || []) {
190
+ columnFilter[item.field] = (_b = (_a = value === null || value === void 0 ? void 0 : value.columnFilter) === null || _a === void 0 ? void 0 : _a[item.field]) !== null && _b !== void 0 ? _b : (_c = item === null || item === void 0 ? void 0 : item.filter) === null || _c === void 0 ? void 0 : _c.default;
139
191
  }
140
192
  // Filter external
141
- for (const item of (externalFilters || [])) {
142
- if (item.type === 'daterange') {
193
+ for (const item of externalFilters || []) {
194
+ if (item.type === "daterange") {
143
195
  externalFilter[item.field] = {
144
- from: (_f = (_d = (_c = externalFilter[item.field]) === null || _c === void 0 ? void 0 : _c.from) !== null && _d !== void 0 ? _d : (_e = item.default) === null || _e === void 0 ? void 0 : _e.from) !== null && _f !== void 0 ? _f : undefined,
145
- to: (_k = (_h = (_g = externalFilter[item.field]) === null || _g === void 0 ? void 0 : _g.to) !== null && _h !== void 0 ? _h : (_j = item.default) === null || _j === void 0 ? void 0 : _j.to) !== null && _k !== void 0 ? _k : undefined
196
+ from: (_f = (_e = (_d = value === null || value === void 0 ? void 0 : value.externalFilter) === null || _d === void 0 ? void 0 : _d[item.field]) === null || _e === void 0 ? void 0 : _e.from) !== null && _f !== void 0 ? _f : (_g = item.default) === null || _g === void 0 ? void 0 : _g.from,
197
+ to: (_k = (_j = (_h = value === null || value === void 0 ? void 0 : value.externalFilter) === null || _h === void 0 ? void 0 : _h[item.field]) === null || _j === void 0 ? void 0 : _j.to) !== null && _k !== void 0 ? _k : (_l = item.default) === null || _l === void 0 ? void 0 : _l.to,
146
198
  };
147
199
  }
148
200
  else {
149
- externalFilter[item.field] = (_l = externalFilter[item.field]) !== null && _l !== void 0 ? _l : item.default;
201
+ externalFilter[item.field] = (_o = (_m = value === null || value === void 0 ? void 0 : value.externalFilter) === null || _m === void 0 ? void 0 : _m[item.field]) !== null && _o !== void 0 ? _o : item === null || item === void 0 ? void 0 : item.default;
150
202
  }
151
203
  }
152
204
  // Filter def
205
+ for (const item of filterDefs || []) {
206
+ filterDef[item.sdMaterialFilterDef] = (_q = (_p = value === null || value === void 0 ? void 0 : value.filterDef) === null || _p === void 0 ? void 0 : _p[item.sdMaterialFilterDef]) !== null && _q !== void 0 ? _q : undefined;
207
+ }
153
208
  return {
209
+ // Filter column
154
210
  columnFilter,
211
+ // Filter external
155
212
  externalFilter,
213
+ // Filter def
156
214
  filterDef,
157
215
  };
158
216
  });
159
217
  }
160
218
  }
161
- _filterConfiguration = new WeakMap(), _filterValue = new WeakMap(), _cache = new WeakMap(), _loadDefaultConfiguration = new WeakMap(), _loadDefaultValue = new WeakMap();
219
+ _filterConfiguration = new WeakMap(), _filterValue = new WeakMap(), _cache = new WeakMap(), _defaultConfiguration = new WeakMap(), _defaultValue = new WeakMap(), _initConfiguration = new WeakMap(), _initValue = new WeakMap();
162
220
  SdGridFilterService.decorators = [
163
221
  { type: Injectable }
164
222
  ];
165
223
  SdGridFilterService.ctorParameters = () => [
166
224
  { type: SdSettingService }
167
225
  ];
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZ3JpZC1tYXRlcmlhbC8iLCJzb3VyY2VzIjpbInNyYy9saWIvc2VydmljZXMvZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBTzVELE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFBb0IsY0FBZ0M7UUFBaEMsbUJBQWMsR0FBZCxjQUFjLENBQWtCO1FBSHBELCtCQUF1QiwyQkFBMkIsRUFBQztRQUNuRCx1QkFBZSxtQkFBbUIsRUFBQztRQUNuQyxpQkFBdUQsRUFBRSxFQUFDO1FBRzFELGFBQVEsR0FBRyxDQUFDLEdBQVcsRUFBRSxJQUl4QixFQUFFLEVBQUU7WUFDSCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDUixNQUFNLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQztnQkFDMUMsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDVCxPQUFPO29CQUNQLGVBQWU7aUJBQ2hCLENBQUMsQ0FBQztnQkFDSCxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsNENBQTRDO2FBQ2xFO1lBQ0QsSUFBSSxDQUFDLHFDQUFZLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFvQztvQkFDeEYsTUFBTSxvREFBMkI7b0JBQ2pDLEdBQUc7aUJBQ0osRUFBRTtvQkFDRCxPQUFPLEVB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LENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQywwQ0FBRSxFQUFFLHlDQUFJLElBQUksQ0FBQyxPQUFPLDBDQUFFLEVBQUUsbUNBQUksU0FBUztxQkFDcEUsQ0FBQztpQkFDSDtxQkFBTTtvQkFDTCxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG1DQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7aUJBQ3pFO2FBQ0Y7WUFDRCxhQUFhO1lBQ2IsT0FBTztnQkFDTCxZQUFZO2dCQUNaLGNBQWM7Z0JBQ2QsU0FBUzthQUNWLENBQUE7UUFDSCxDQUFDLEVBQUE7SUE5SkQsQ0FBQzs7OztZQU5GLFVBQVU7OztZQU5GLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IGhhc2ggZnJvbSAnb2JqZWN0LWhhc2gnO1xyXG5pbXBvcnQgeyBTZFNldHRpbmdTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9zZXR0aW5nJztcclxuaW1wb3J0IHsgU2RHcmlkTWF0ZXJpYWxFeHRlcm5hbEZpbHRlciwgU2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uLCBTZEdyaWRNYXRlcmlhbEZpbHRlclJlZ2lzdGVyLCBTZEdyaWRNYXRlcmlhbEZpbHRlclZhbHVlIH0gZnJvbSAnLi9ncmlkLWZpbHRlci5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7IFNkR3JpZE1hdGVyaWFsQ29sdW1uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgU2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc2QtbWF0ZXJpYWwtZmlsdGVyLWRlZi5kaXJlY3RpdmUnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU2RHcmlkRmlsdGVyU2VydmljZSB7XHJcbiAgI2ZpbHRlckNvbmZpZ3VyYXRpb24gPSAnR1JJRC1GSUxURVItQ09ORklHVVJBVElPTic7XHJcbiAgI2ZpbHRlclZhbHVlID0gJ0dSSUQtRklMVEVSLVZBTFVFJztcclxuICAjY2FjaGU6IFJlY29yZDxzdHJpbmcsIFNkR3JpZE1hdGVyaWFsRmlsdGVyUmVnaXN0ZXI+ID0ge307XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXR0aW5nU2VydmljZTogU2RTZXR0aW5nU2VydmljZSkge1xyXG4gIH1cclxuICByZWdpc3RlciA9IChrZXk6IHN0cmluZywgYXJnczoge1xyXG4gICAgY29sdW1uczogU2RHcmlkTWF0ZXJpYWxDb2x1bW5bXSxcclxuICAgIGV4dGVybmFsRmlsdGVyczogU2RHcmlkTWF0ZXJpYWxFeHRlcm5hbEZpbHRlcltdLFxyXG4gICAgZmlsdGVyRGVmczogU2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZVtdXHJcbiAgfSkgPT4ge1xyXG4gICAgbGV0IGNhY2hlU2Vzc2lvbiA9IGZhbHNlO1xyXG4gICAgaWYgKCFrZXkpIHtcclxuICAgICAgY29uc3QgeyBjb2x1bW5zLCBleHRlcm5hbEZpbHRlcnMgfSA9IGFyZ3M7XHJcbiAgICAgIGtleSA9IGhhc2goe1xyXG4gICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJzXHJcbiAgICAgIH0pO1xyXG4gICAgICBjYWNoZVNlc3Npb24gPSB0cnVlOyAvLyBO4bq/dSBraMO0bmcgY8OzIGtleSB0aMOsIGNo4buJIGzGsHUgdGhlbyBzZXNzaW9uXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuI2NhY2hlW2tleV0pIHtcclxuICAgICAgY29uc3QgZmlsdGVyQ29uZmlndXJhdGlvbiA9IHRoaXMuc2V0dGluZ1NlcnZpY2UuY3JlYXRlPFNkR3JpZE1hdGVyaWFsRmlsdGVyQ29uZmlndXJhdGlvbj4oe1xyXG4gICAgICAgIHByZWZpeDogdGhpcy4jZmlsdGVyQ29uZmlndXJhdGlvbixcclxuICAgICAgICBrZXlcclxuICAgICAgfSwge1xyXG4gICAgICAgIGRlZmF1bHQ6IHRoaXMuI2xvYWREZWZhdWx0Q29uZmlndXJhdGlvbihhcmdzKSxcclxuICAgICAgICB0eXBlOiBjYWNoZVNlc3Npb24gPyAnc2Vzc2lvbicgOiB1bmRlZmluZWRcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy5zZXR0aW5nU2VydmljZS5jcmVhdGU8U2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZT4oe1xyXG4gICAgICAgIHByZWZpeDogdGhpcy4jZmlsdGVyVmFsdWUsXHJcbiAgICAgICAga2V5XHJcbiAgICAgIH0sIHtcclxuICAgICAgICBkZWZhdWx0OiB0aGlzLiNsb2FkRGVmYXVsdFZhbHVlKGFyZ3MpLFxyXG4gICAgICAgIHR5cGU6IGNhY2hlU2Vzc2lvbiA/ICdzZXNzaW9uJyA6IHVuZGVmaW5lZFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHtcclxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XHJcbiAgICAgICAgICBnZXQ6ICgpOiBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gZmlsdGVyQ29uZmlndXJhdGlvbi5nZXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgY29sdW1uXHJcbiAgICAgICAgICAgICAgaW5saW5lQ29sdW1uOiBjb25maWd1cmF0aW9uPy5pbmxpbmVDb2x1bW4gfHwge30sXHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIGV4dGVybmFsXHJcbiAgICAgICAgICAgICAgaW5saW5lRXh0ZXJuYWw6IGNvbmZpZ3VyYXRpb24/LmlubGluZUV4dGVybmFsIHx8IHt9LFxyXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBkZWZcclxuICAgICAgICAgICAgICBpbmxpbmVGaWx0ZXJEZWY6IGNvbmZpZ3VyYXRpb24/LmlubGluZUZpbHRlckRlZiB8fCB7fSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzZXQ6IChjb25maWd1cmF0aW9uOiBQYXJ0aWFsPFNkR3JpZE1hdGVyaWFsRmlsdGVyQ29uZmlndXJhdGlvbj4pOiBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY29uZmlndXJhdGlvbiB8fCB7fSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBmaWx0ZXJDb25maWd1cmF0aW9uLmdldCgpO1xyXG4gICAgICAgICAgICBjb25zdCB7IGlubGluZUNvbHVtbiwgaW5saW5lRXh0ZXJuYWwsIGlubGluZUZpbHRlckRlZiB9ID0gY3VycmVudDtcclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgICAgICAgICAgIGlubGluZUNvbHVtbjoga2V5cy5pbmNsdWRlcygnaW5saW5lQ29sdW1uJykgPyAoY29uZmlndXJhdGlvbj8uaW5saW5lQ29sdW1uIHx8IHt9KSA6IGlubGluZUNvbHVtbixcclxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgICAgICAgICAgICBpbmxpbmVFeHRlcm5hbDoga2V5cy5pbmNsdWRlcygnaW5saW5lRXh0ZXJuYWwnKSA/IChjb25maWd1cmF0aW9uPy5pbmxpbmVFeHRlcm5hbCB8fCB7fSkgOiBpbmxpbmVFeHRlcm5hbCxcclxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICAgICAgICAgICAgaW5saW5lRmlsdGVyRGVmOiBrZXlzLmluY2x1ZGVzKCdpbmxpbmVGaWx0ZXJEZWYnKSA/IChjb25maWd1cmF0aW9uPy5pbmxpbmVGaWx0ZXJEZWYgfHwge30pIDogaW5saW5lRmlsdGVyRGVmLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBmaWx0ZXJDb25maWd1cmF0aW9uLnNldCh1cGRhdGVkQ29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVkQ29uZmlndXJhdGlvbjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICByZW1vdmU6ICgpID0+IHtcclxuICAgICAgICAgICAgZmlsdGVyQ29uZmlndXJhdGlvbi5yZW1vdmUoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvYnNlcnZlcjogZmlsdGVyQ29uZmlndXJhdGlvbi5vYnNlcnZlclxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdmFsdWU6IHtcclxuICAgICAgICAgIGdldDogKCk6IFNkR3JpZE1hdGVyaWFsRmlsdGVyVmFsdWUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gZmlsdGVyVmFsdWUuZ2V0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgICAgICAgICAgIGNvbHVtbkZpbHRlcjogY29uZmlndXJhdGlvbj8uY29sdW1uRmlsdGVyIHx8IHt9LFxyXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgICAgICAgICAgIGV4dGVybmFsRmlsdGVyOiBjb25maWd1cmF0aW9uPy5leHRlcm5hbEZpbHRlciB8fCB7fSxcclxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICAgICAgICAgICAgZmlsdGVyRGVmOiBjb25maWd1cmF0aW9uPy5maWx0ZXJEZWYgfHwge31cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzZXQ6IChjb25maWd1cmF0aW9uOiBQYXJ0aWFsPFNkR3JpZE1hdGVyaWFsRmlsdGVyVmFsdWU+KTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjb25maWd1cmF0aW9uIHx8IHt9KTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGZpbHRlclZhbHVlLmdldCgpO1xyXG4gICAgICAgICAgICBjb25zdCB7IGNvbHVtbkZpbHRlciwgZXh0ZXJuYWxGaWx0ZXIsIGZpbHRlckRlZiB9ID0gY3VycmVudDtcclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgICAgICAgICAgIGNvbHVtbkZpbHRlcjoga2V5cy5pbmNsdWRlcygnY29sdW1uRmlsdGVyJykgPyAoY29uZmlndXJhdGlvbj8uY29sdW1uRmlsdGVyIHx8IHt9KSA6IGNvbHVtbkZpbHRlcixcclxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgICAgICAgICAgICBleHRlcm5hbEZpbHRlcjoga2V5cy5pbmNsdWRlcygnZXh0ZXJuYWxGaWx0ZXInKSA/IChjb25maWd1cmF0aW9uPy5leHRlcm5hbEZpbHRlciB8fCB7fSkgOiBleHRlcm5hbEZpbHRlcixcclxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICAgICAgICAgICAgZmlsdGVyRGVmOiBrZXlzLmluY2x1ZGVzKCdmaWx0ZXJEZWYnKSA/IChjb25maWd1cmF0aW9uPy5maWx0ZXJEZWYgfHwge30pIDogZmlsdGVyRGVmLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBmaWx0ZXJWYWx1ZS5zZXQodXBkYXRlZENvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlZENvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVtb3ZlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZpbHRlclZhbHVlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9ic2VydmVyOiBmaWx0ZXJWYWx1ZS5vYnNlcnZlclxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlW2tleV07XHJcbiAgfVxyXG5cclxuICAjbG9hZERlZmF1bHRDb25maWd1cmF0aW9uID0gKGFyZ3M6IHtcclxuICAgIGNvbHVtbnM6IFNkR3JpZE1hdGVyaWFsQ29sdW1uW10sXHJcbiAgICBleHRlcm5hbEZpbHRlcnM6IFNkR3JpZE1hdGVyaWFsRXh0ZXJuYWxGaWx0ZXJbXSxcclxuICAgIGZpbHRlckRlZnM6IFNkTWF0ZXJpYWxGaWx0ZXJEZWZEaXJlY3RpdmVbXVxyXG4gIH0pOiBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBleHRlcm5hbEZpbHRlcnMsIGZpbHRlckRlZnMgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCBpbmxpbmVDb2x1bW46IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICBjb25zdCBpbmxpbmVFeHRlcm5hbDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcclxuICAgIGNvbnN0IGlubGluZUZpbHRlckRlZjogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcclxuICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiAoY29sdW1ucyB8fCBbXSkpIHtcclxuICAgICAgaW5saW5lQ29sdW1uW2l0ZW0uZmllbGRdID0gaW5saW5lQ29sdW1uW2l0ZW0uZmllbGRdID8/IGl0ZW0/LmZpbHRlcj8uZGVmYXVsdFNob3dpbmc7XHJcbiAgICB9XHJcbiAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiAoZXh0ZXJuYWxGaWx0ZXJzIHx8IFtdKSkge1xyXG4gICAgICBpbmxpbmVFeHRlcm5hbFtpdGVtLmZpZWxkXSA9IGlubGluZUV4dGVybmFsW2l0ZW0uZmllbGRdID8/IGl0ZW0/LmRlZmF1bHRTaG93aW5nO1xyXG4gICAgfVxyXG4gICAgLy8gRmlsdGVyIGRlZlxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIChmaWx0ZXJEZWZzIHx8IFtdKSkge1xyXG4gICAgICBpbmxpbmVGaWx0ZXJEZWZbaXRlbS5zZE1hdGVyaWFsRmlsdGVyRGVmXSA9IGlubGluZUZpbHRlckRlZltpdGVtLnNkTWF0ZXJpYWxGaWx0ZXJEZWZdID8/IGl0ZW0/LmRlZmF1bHRTaG93aW5nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaW5saW5lQ29sdW1uLFxyXG4gICAgICBpbmxpbmVFeHRlcm5hbCxcclxuICAgICAgaW5saW5lRmlsdGVyRGVmLFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgI2xvYWREZWZhdWx0VmFsdWUgPSAoYXJnczoge1xyXG4gICAgY29sdW1uczogU2RHcmlkTWF0ZXJpYWxDb2x1bW5bXSxcclxuICAgIGV4dGVybmFsRmlsdGVyczogU2RHcmlkTWF0ZXJpYWxFeHRlcm5hbEZpbHRlcltdLFxyXG4gICAgZmlsdGVyRGVmczogU2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZVtdXHJcbiAgfSk6IFNkR3JpZE1hdGVyaWFsRmlsdGVyVmFsdWUgPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBleHRlcm5hbEZpbHRlcnMsIGZpbHRlckRlZnMgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCBjb2x1bW5GaWx0ZXI6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIGNvbnN0IGV4dGVybmFsRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBjb25zdCBmaWx0ZXJEZWY6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiAoY29sdW1ucyB8fCBbXSkpIHtcclxuICAgICAgY29sdW1uRmlsdGVyW2l0ZW0uZmllbGRdID0gY29sdW1uRmlsdGVyW2l0ZW0uZmllbGRdID8/IGl0ZW0/LmZpbHRlcj8uZGVmYXVsdDtcclxuICAgIH1cclxuICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIChleHRlcm5hbEZpbHRlcnMgfHwgW10pKSB7XHJcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdkYXRlcmFuZ2UnKSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbaXRlbS5maWVsZF0gPSB7XHJcbiAgICAgICAgICBmcm9tOiBleHRlcm5hbEZpbHRlcltpdGVtLmZpZWxkXT8uZnJvbSA/PyBpdGVtLmRlZmF1bHQ/LmZyb20gPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdG86IGV4dGVybmFsRmlsdGVyW2l0ZW0uZmllbGRdPy50byA/PyBpdGVtLmRlZmF1bHQ/LnRvID8/IHVuZGVmaW5lZFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbaXRlbS5maWVsZF0gPSBleHRlcm5hbEZpbHRlcltpdGVtLmZpZWxkXSA/PyBpdGVtLmRlZmF1bHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEZpbHRlciBkZWZcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNvbHVtbkZpbHRlcixcclxuICAgICAgZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgIGZpbHRlckRlZixcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvZ3JpZC1tYXRlcmlhbC8iLCJzb3VyY2VzIjpbInNyYy9saWIvc2VydmljZXMvZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBUzVELE9BQU8sRUFBTyxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRCxNQUFNLE9BQU8sbUJBQW1CO0lBSTlCLFlBQW9CLGNBQWdDO1FBQWhDLG1CQUFjLEdBQWQsY0FBYyxDQUFrQjtRQUhwRCwrQkFBdUIsMkJBQTJCLEVBQUM7UUFDbkQsdUJBQWUsbUJBQW1CLEVBQUM7UUFDbkMsaUJBQXVELEVBQUUsRUFBQztRQUUxRCxhQUFRLEdBQUcsQ0FDVCxHQUFXLEVBQ1gsSUFJQyxFQUNELEVBQUU7WUFDRixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDUixNQUFNLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQztnQkFDMUMsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDVCxPQUFPO29CQUNQLGVBQWU7aUJBQ2hCLENBQUMsQ0FBQztnQkFDSCxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsNENBQTRDO2FBQ2xFO1lBQ0QsSUFBSSxDQUFDLHFDQUFZLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQixtQ0FBbUM7Z0JBQ25DLE1BQU0sbUJBQW1CLEdBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUN4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QUFjLDBDQUFHLElBQUksQ0FBQyxLQUFLLDJDQUFHLEVBQUUseUNBQUksSUFBSSxDQUFDLE9BQU8sMENBQUUsRUFBRTtxQkFDaEUsQ0FBQztpQkFDSDtxQkFBTTtvQkFDTCxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUN4QixLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsY0FBYywwQ0FBRyxJQUFJLENBQUMsS0FBSyxvQ0FBSyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsT0FBTyxDQUFDO2lCQUN4RDthQUNGO1lBQ0QsYUFBYTtZQUNiLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRTtnQkFDbkMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUNqQyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsU0FBUywwQ0FBRyxJQUFJLENBQUMsbUJBQW1CLG9DQUFLLFNBQVMsQ0FBQzthQUM3RDtZQUNELE9BQU87Z0JBQ0wsZ0JBQWdCO2dCQUNoQixZQUFZO2dCQUNaLGtCQUFrQjtnQkFDbEIsY0FBYztnQkFDZCxhQUFhO2dCQUNiLFNBQVM7YUFDVixDQUFDO1FBQ0osQ0FBQyxFQUFDO0lBNVBxRCxDQUFDOzs7O1lBTHpELFVBQVU7OztZQVhGLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgaGFzaCBmcm9tIFwib2JqZWN0LWhhc2hcIjtcclxuaW1wb3J0IHsgU2RTZXR0aW5nU2VydmljZSB9IGZyb20gXCJAc2QtYW5ndWxhci9jb3JlL3NldHRpbmdcIjtcclxuaW1wb3J0IHtcclxuICBTZEdyaWRNYXRlcmlhbEV4dGVybmFsRmlsdGVyLFxyXG4gIFNkR3JpZE1hdGVyaWFsRmlsdGVyQ29uZmlndXJhdGlvbixcclxuICBTZEdyaWRNYXRlcmlhbEZpbHRlclJlZ2lzdGVyLFxyXG4gIFNkR3JpZE1hdGVyaWFsRmlsdGVyVmFsdWUsXHJcbn0gZnJvbSBcIi4vZ3JpZC1maWx0ZXIubW9kZWxcIjtcclxuaW1wb3J0IHsgU2RHcmlkTWF0ZXJpYWxDb2x1bW4gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2dyaWQtY29sdW1uLm1vZGVsXCI7XHJcbmltcG9ydCB7IFNkTWF0ZXJpYWxGaWx0ZXJEZWZEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9zZC1tYXRlcmlhbC1maWx0ZXItZGVmLmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU2RHcmlkRmlsdGVyU2VydmljZSB7XHJcbiAgI2ZpbHRlckNvbmZpZ3VyYXRpb24gPSBcIkdSSUQtRklMVEVSLUNPTkZJR1VSQVRJT05cIjtcclxuICAjZmlsdGVyVmFsdWUgPSBcIkdSSUQtRklMVEVSLVZBTFVFXCI7XHJcbiAgI2NhY2hlOiBSZWNvcmQ8c3RyaW5nLCBTZEdyaWRNYXRlcmlhbEZpbHRlclJlZ2lzdGVyPiA9IHt9O1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2V0dGluZ1NlcnZpY2U6IFNkU2V0dGluZ1NlcnZpY2UpIHt9XHJcbiAgcmVnaXN0ZXIgPSAoXHJcbiAgICBrZXk6IHN0cmluZyxcclxuICAgIGFyZ3M6IHtcclxuICAgICAgY29sdW1uczogU2RHcmlkTWF0ZXJpYWxDb2x1bW5bXTtcclxuICAgICAgZXh0ZXJuYWxGaWx0ZXJzOiBTZEdyaWRNYXRlcmlhbEV4dGVybmFsRmlsdGVyW107XHJcbiAgICAgIGZpbHRlckRlZnM6IFNkTWF0ZXJpYWxGaWx0ZXJEZWZEaXJlY3RpdmVbXTtcclxuICAgIH1cclxuICApID0+IHtcclxuICAgIGxldCBjYWNoZVNlc3Npb24gPSBmYWxzZTtcclxuICAgIGlmICgha2V5KSB7XHJcbiAgICAgIGNvbnN0IHsgY29sdW1ucywgZXh0ZXJuYWxGaWx0ZXJzIH0gPSBhcmdzO1xyXG4gICAgICBrZXkgPSBoYXNoKHtcclxuICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgIGV4dGVybmFsRmlsdGVycyxcclxuICAgICAgfSk7XHJcbiAgICAgIGNhY2hlU2Vzc2lvbiA9IHRydWU7IC8vIE7hur91IGtow7RuZyBjw7Mga2V5IHRow6wgY2jhu4kgbMawdSB0aGVvIHNlc3Npb25cclxuICAgIH1cclxuICAgIGlmICghdGhpcy4jY2FjaGVba2V5XSkge1xyXG4gICAgICAvLyBTZXR0aW5nIGPhu6dhIGZpbHRlciBjb25maWd1cmF0aW9uXHJcbiAgICAgIGNvbnN0IGZpbHRlckNvbmZpZ3VyYXRpb24gPVxyXG4gICAgICAgIHRoaXMuc2V0dGluZ1NlcnZpY2UuY3JlYXRlPFNkR3JpZE1hdGVyaWFsRmlsdGVyQ29uZmlndXJhdGlvbj4oXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHByZWZpeDogdGhpcy4jZmlsdGVyQ29uZmlndXJhdGlvbixcclxuICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGVmYXVsdDogdGhpcy4jZGVmYXVsdENvbmZpZ3VyYXRpb24oYXJncyksXHJcbiAgICAgICAgICAgIHR5cGU6IGNhY2hlU2Vzc2lvbiA/IFwic2Vzc2lvblwiIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIC8vIEzhuqV5IGdpw6EgdHLhu4sgY29uZmlndXJhdGlvbiBtZXJnZSB24bubaSBnacOhIHRy4buLIGRlZmF1bHRTaG93aW5nIGPhu6dhIGFyZ3MgbuG6v3UgbmjGsCBhcmdzIGPDsyB0aGF5IMSR4buVaVxyXG4gICAgICBmaWx0ZXJDb25maWd1cmF0aW9uLnNldCh0aGlzLiNpbml0Q29uZmlndXJhdGlvbihhcmdzLCBmaWx0ZXJDb25maWd1cmF0aW9uLmdldCgpKSk7XHJcbiAgICAgIC8vIFNldHRpbmcgY+G7p2EgZmlsdGVyIHZhbHVlXHJcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy5zZXR0aW5nU2VydmljZS5jcmVhdGU8U2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZT4oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcHJlZml4OiB0aGlzLiNmaWx0ZXJWYWx1ZSxcclxuICAgICAgICAgIGtleSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGRlZmF1bHQ6IHRoaXMuI2RlZmF1bHRWYWx1ZShhcmdzKSxcclxuICAgICAgICAgIHR5cGU6IGNhY2hlU2Vzc2lvbiA/IFwic2Vzc2lvblwiIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgLy8gTOG6pXkgZ2nDoSB0cuG7iyB2YWx1ZSBtZXJnZSB24bubaSBnacOhIHRy4buLIGRlZmF1bHQgY+G7p2EgYXJncyBu4bq/dSBuaMawIGFyZ3MgY8OzIHRoYXkgxJHhu5VpXHJcbiAgICAgIGZpbHRlclZhbHVlLnNldCh0aGlzLiNpbml0VmFsdWUoYXJncywgZmlsdGVyVmFsdWUuZ2V0KCkpKTtcclxuICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHtcclxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XHJcbiAgICAgICAgICBnZXQ6ICgpOiBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyQ29uZmlndXJhdGlvbi5nZXQoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzZXQ6IChcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogUGFydGlhbDxTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24+XHJcbiAgICAgICAgICApOiBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB7IGlubGluZUNvbHVtbiwgaW5saW5lRXh0ZXJuYWwsIGlubGluZUZpbHRlckRlZiB9ID1cclxuICAgICAgICAgICAgICBjb25maWd1cmF0aW9uO1xyXG4gICAgICAgICAgICBmaWx0ZXJDb25maWd1cmF0aW9uLnNldCh7XHJcbiAgICAgICAgICAgICAgaW5saW5lQ29sdW1uLFxyXG4gICAgICAgICAgICAgIGlubGluZUV4dGVybmFsLFxyXG4gICAgICAgICAgICAgIGlubGluZUZpbHRlckRlZixcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgaW5saW5lQ29sdW1uLFxyXG4gICAgICAgICAgICAgIGlubGluZUV4dGVybmFsLFxyXG4gICAgICAgICAgICAgIGlubGluZUZpbHRlckRlZixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICByZW1vdmU6ICgpID0+IHtcclxuICAgICAgICAgICAgZmlsdGVyQ29uZmlndXJhdGlvbi5yZW1vdmUoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvYnNlcnZlcjogZmlsdGVyQ29uZmlndXJhdGlvbi5vYnNlcnZlci5waXBlKHN0YXJ0V2l0aChmaWx0ZXJDb25maWd1cmF0aW9uLmdldCgpKSksXHJcbiAgICAgICAgfSxcclxuICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgZ2V0OiAoKTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJWYWx1ZS5nZXQoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzZXQ6IChcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogUGFydGlhbDxTZEdyaWRNYXRlcmlhbEZpbHRlclZhbHVlPlxyXG4gICAgICAgICAgKTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjb25maWd1cmF0aW9uIHx8IHt9KTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGZpbHRlclZhbHVlLmdldCgpO1xyXG4gICAgICAgICAgICBjb25zdCB7IGNvbHVtbkZpbHRlciwgZXh0ZXJuYWxGaWx0ZXIsIGZpbHRlckRlZiB9ID0gY3VycmVudDtcclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgICAgICAgICAgIGNvbHVtbkZpbHRlcjoga2V5cy5pbmNsdWRlcyhcImNvbHVtbkZpbHRlclwiKVxyXG4gICAgICAgICAgICAgICAgPyBjb25maWd1cmF0aW9uPy5jb2x1bW5GaWx0ZXIgfHwge31cclxuICAgICAgICAgICAgICAgIDogY29sdW1uRmlsdGVyLFxyXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgICAgICAgICAgIGV4dGVybmFsRmlsdGVyOiBrZXlzLmluY2x1ZGVzKFwiZXh0ZXJuYWxGaWx0ZXJcIilcclxuICAgICAgICAgICAgICAgID8gY29uZmlndXJhdGlvbj8uZXh0ZXJuYWxGaWx0ZXIgfHwge31cclxuICAgICAgICAgICAgICAgIDogZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIGRlZlxyXG4gICAgICAgICAgICAgIGZpbHRlckRlZjoga2V5cy5pbmNsdWRlcyhcImZpbHRlckRlZlwiKVxyXG4gICAgICAgICAgICAgICAgPyBjb25maWd1cmF0aW9uPy5maWx0ZXJEZWYgfHwge31cclxuICAgICAgICAgICAgICAgIDogZmlsdGVyRGVmLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBmaWx0ZXJWYWx1ZS5zZXQodXBkYXRlZENvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlZENvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVtb3ZlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGZpbHRlclZhbHVlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9ic2VydmVyOiBmaWx0ZXJWYWx1ZS5vYnNlcnZlci5waXBlKHN0YXJ0V2l0aChmaWx0ZXJWYWx1ZS5nZXQoKSkpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVba2V5XTtcclxuICB9O1xyXG5cclxuICAjZGVmYXVsdENvbmZpZ3VyYXRpb24gPSAoYXJnczoge1xyXG4gICAgY29sdW1uczogU2RHcmlkTWF0ZXJpYWxDb2x1bW5bXTtcclxuICAgIGV4dGVybmFsRmlsdGVyczogU2RHcmlkTWF0ZXJpYWxFeHRlcm5hbEZpbHRlcltdO1xyXG4gICAgZmlsdGVyRGVmczogU2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZVtdO1xyXG4gIH0pOiBTZEdyaWRNYXRlcmlhbEZpbHRlckNvbmZpZ3VyYXRpb24gPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zLCBleHRlcm5hbEZpbHRlcnMsIGZpbHRlckRlZnMgfSA9IGFyZ3M7XHJcbiAgICBjb25zdCBpbmxpbmVDb2x1bW46IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICBjb25zdCBpbmxpbmVFeHRlcm5hbDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcclxuICAgIGNvbnN0IGlubGluZUZpbHRlckRlZjogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcclxuICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2x1bW5zIHx8IFtdKSB7XHJcbiAgICAgIGlubGluZUNvbHVtbltpdGVtLmZpZWxkXSA9IGl0ZW0/LmZpbHRlcj8uZGVmYXVsdFNob3dpbmc7XHJcbiAgICB9XHJcbiAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBleHRlcm5hbEZpbHRlcnMgfHwgW10pIHtcclxuICAgICAgaW5saW5lRXh0ZXJuYWxbaXRlbS5maWVsZF0gPSBpdGVtPy5kZWZhdWx0U2hvd2luZztcclxuICAgIH1cclxuICAgIC8vIEZpbHRlciBkZWZcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWx0ZXJEZWZzIHx8IFtdKSB7XHJcbiAgICAgIGlubGluZUZpbHRlckRlZltpdGVtLnNkTWF0ZXJpYWxGaWx0ZXJEZWZdID0gaXRlbT8uZGVmYXVsdFNob3dpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAvLyBGaWx0ZXIgY29sdW1uXHJcbiAgICAgIGlubGluZUNvbHVtbixcclxuICAgICAgLy8gRmlsdGVyIGV4dGVybmFsXHJcbiAgICAgIGlubGluZUV4dGVybmFsLFxyXG4gICAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICAgIGlubGluZUZpbHRlckRlZixcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgI2RlZmF1bHRWYWx1ZSA9IChhcmdzOiB7XHJcbiAgICBjb2x1bW5zOiBTZEdyaWRNYXRlcmlhbENvbHVtbltdO1xyXG4gICAgZXh0ZXJuYWxGaWx0ZXJzOiBTZEdyaWRNYXRlcmlhbEV4dGVybmFsRmlsdGVyW107XHJcbiAgICBmaWx0ZXJEZWZzOiBTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlW107XHJcbiAgfSk6IFNkR3JpZE1hdGVyaWFsRmlsdGVyVmFsdWUgPT4ge1xyXG4gICAgY29uc3QgY29sdW1uRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBjb25zdCBleHRlcm5hbEZpbHRlcjogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xyXG4gICAgY29uc3QgZmlsdGVyRGVmOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBjb25zdCB7IGNvbHVtbnMsIGV4dGVybmFsRmlsdGVycywgZmlsdGVyRGVmcyB9ID0gYXJncztcclxuICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2x1bW5zIHx8IFtdKSB7XHJcbiAgICAgIGNvbHVtbkZpbHRlcltpdGVtLmZpZWxkXSA9IGl0ZW0/LmZpbHRlcj8uZGVmYXVsdDtcclxuICAgIH1cclxuICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGV4dGVybmFsRmlsdGVycyB8fCBbXSkge1xyXG4gICAgICBleHRlcm5hbEZpbHRlcltpdGVtLmZpZWxkXSA9IGl0ZW0/LmRlZmF1bHQ7XHJcbiAgICB9XHJcbiAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyRGVmcyB8fCBbXSkge1xyXG4gICAgICBmaWx0ZXJEZWZbaXRlbS5zZE1hdGVyaWFsRmlsdGVyRGVmXSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgICAgY29sdW1uRmlsdGVyLFxyXG4gICAgICAvLyBGaWx0ZXIgZXh0ZXJuYWxcclxuICAgICAgZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgIC8vIEZpbHRlciBkZWZcclxuICAgICAgZmlsdGVyRGVmLFxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAjaW5pdENvbmZpZ3VyYXRpb24gPSAoXHJcbiAgICBhcmdzOiB7XHJcbiAgICAgIGNvbHVtbnM6IFNkR3JpZE1hdGVyaWFsQ29sdW1uW107XHJcbiAgICAgIGV4dGVybmFsRmlsdGVyczogU2RHcmlkTWF0ZXJpYWxFeHRlcm5hbEZpbHRlcltdO1xyXG4gICAgICBmaWx0ZXJEZWZzOiBTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlW107XHJcbiAgICB9LFxyXG4gICAgY29uZmlndXJhdGlvbjogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uXHJcbiAgKTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJDb25maWd1cmF0aW9uID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1ucywgZXh0ZXJuYWxGaWx0ZXJzLCBmaWx0ZXJEZWZzIH0gPSBhcmdzO1xyXG4gICAgY29uc3QgaW5saW5lQ29sdW1uOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xyXG4gICAgY29uc3QgaW5saW5lRXh0ZXJuYWw6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICBjb25zdCBpbmxpbmVGaWx0ZXJEZWY6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgICAvLyBGaWx0ZXIgY29sdW1uXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29sdW1ucyB8fCBbXSkge1xyXG4gICAgICBpbmxpbmVDb2x1bW5baXRlbS5maWVsZF0gPVxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24/LmlubGluZUNvbHVtbj8uW2l0ZW0uZmllbGRdID8/XHJcbiAgICAgICAgaXRlbT8uZmlsdGVyPy5kZWZhdWx0U2hvd2luZztcclxuICAgIH1cclxuICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGV4dGVybmFsRmlsdGVycyB8fCBbXSkge1xyXG4gICAgICBpbmxpbmVFeHRlcm5hbFtpdGVtLmZpZWxkXSA9XHJcbiAgICAgICAgY29uZmlndXJhdGlvbj8uaW5saW5lRXh0ZXJuYWw/LltpdGVtLmZpZWxkXSA/PyBpdGVtPy5kZWZhdWx0U2hvd2luZztcclxuICAgIH1cclxuICAgIC8vIEZpbHRlciBkZWZcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWx0ZXJEZWZzIHx8IFtdKSB7XHJcbiAgICAgIGlubGluZUZpbHRlckRlZltpdGVtLnNkTWF0ZXJpYWxGaWx0ZXJEZWZdID1cclxuICAgICAgICBjb25maWd1cmF0aW9uPy5pbmxpbmVGaWx0ZXJEZWY/LltpdGVtLnNkTWF0ZXJpYWxGaWx0ZXJEZWZdID8/XHJcbiAgICAgICAgaXRlbT8uZGVmYXVsdFNob3dpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAvLyBGaWx0ZXIgY29sdW1uXHJcbiAgICAgIGlubGluZUNvbHVtbixcclxuICAgICAgLy8gRmlsdGVyIGV4dGVybmFsXHJcbiAgICAgIGlubGluZUV4dGVybmFsLFxyXG4gICAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICAgIGlubGluZUZpbHRlckRlZixcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgI2luaXRWYWx1ZSA9IChcclxuICAgIGFyZ3M6IHtcclxuICAgICAgY29sdW1uczogU2RHcmlkTWF0ZXJpYWxDb2x1bW5bXTtcclxuICAgICAgZXh0ZXJuYWxGaWx0ZXJzOiBTZEdyaWRNYXRlcmlhbEV4dGVybmFsRmlsdGVyW107XHJcbiAgICAgIGZpbHRlckRlZnM6IFNkTWF0ZXJpYWxGaWx0ZXJEZWZEaXJlY3RpdmVbXTtcclxuICAgIH0sXHJcbiAgICB2YWx1ZTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJWYWx1ZVxyXG4gICk6IFNkR3JpZE1hdGVyaWFsRmlsdGVyVmFsdWUgPT4ge1xyXG4gICAgY29uc3QgY29sdW1uRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBjb25zdCBleHRlcm5hbEZpbHRlcjogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xyXG4gICAgY29uc3QgZmlsdGVyRGVmOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICBjb25zdCB7IGNvbHVtbnMsIGV4dGVybmFsRmlsdGVycywgZmlsdGVyRGVmcyB9ID0gYXJncztcclxuICAgIC8vIEZpbHRlciBjb2x1bW5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2x1bW5zIHx8IFtdKSB7XHJcbiAgICAgIGNvbHVtbkZpbHRlcltpdGVtLmZpZWxkXSA9XHJcbiAgICAgICAgdmFsdWU/LmNvbHVtbkZpbHRlcj8uW2l0ZW0uZmllbGRdID8/IGl0ZW0/LmZpbHRlcj8uZGVmYXVsdDtcclxuICAgIH1cclxuICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGV4dGVybmFsRmlsdGVycyB8fCBbXSkge1xyXG4gICAgICBpZiAoaXRlbS50eXBlID09PSBcImRhdGVyYW5nZVwiKSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbaXRlbS5maWVsZF0gPSB7XHJcbiAgICAgICAgICBmcm9tOiB2YWx1ZT8uZXh0ZXJuYWxGaWx0ZXI/LltpdGVtLmZpZWxkXT8uZnJvbSA/PyBpdGVtLmRlZmF1bHQ/LmZyb20sXHJcbiAgICAgICAgICB0bzogdmFsdWU/LmV4dGVybmFsRmlsdGVyPy5baXRlbS5maWVsZF0/LnRvID8/IGl0ZW0uZGVmYXVsdD8udG8sXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBleHRlcm5hbEZpbHRlcltpdGVtLmZpZWxkXSA9XHJcbiAgICAgICAgICB2YWx1ZT8uZXh0ZXJuYWxGaWx0ZXI/LltpdGVtLmZpZWxkXSA/PyBpdGVtPy5kZWZhdWx0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBGaWx0ZXIgZGVmXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyRGVmcyB8fCBbXSkge1xyXG4gICAgICBmaWx0ZXJEZWZbaXRlbS5zZE1hdGVyaWFsRmlsdGVyRGVmXSA9XHJcbiAgICAgICAgdmFsdWU/LmZpbHRlckRlZj8uW2l0ZW0uc2RNYXRlcmlhbEZpbHRlckRlZl0gPz8gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLy8gRmlsdGVyIGNvbHVtblxyXG4gICAgICBjb2x1bW5GaWx0ZXIsXHJcbiAgICAgIC8vIEZpbHRlciBleHRlcm5hbFxyXG4gICAgICBleHRlcm5hbEZpbHRlcixcclxuICAgICAgLy8gRmlsdGVyIGRlZlxyXG4gICAgICBmaWx0ZXJEZWYsXHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuIl19
@@ -1,4 +1,4 @@
1
- var _cache, _subject, _get, _getServer, _set, _setServer, _has, _hasServer, _remove, _removeServer;
1
+ var _cache, _subject, _observer, _get, _getServer, _set, _setServer, _has, _hasServer, _remove, _removeServer;
2
2
  import { __awaiter, __classPrivateFieldGet } from "tslib";
3
3
  import { Optional } from '@angular/core';
4
4
  import { Injectable, Inject } from '@angular/core';
@@ -13,6 +13,7 @@ export class SdSettingService {
13
13
  this.configuration = configuration;
14
14
  _cache.set(this, {});
15
15
  _subject.set(this, {});
16
+ _observer.set(this, {});
16
17
  _get.set(this, (key, option) => {
17
18
  return () => {
18
19
  let cache = __classPrivateFieldGet(this, _cache)[key];
@@ -62,21 +63,15 @@ export class SdSettingService {
62
63
  });
63
64
  _set.set(this, (key, option) => {
64
65
  return (data) => {
65
- if (data === undefined) {
66
- __classPrivateFieldGet(this, _cache)[key] = {
67
- data: undefined,
68
- createdOn: new Date()
69
- };
70
- }
71
- else {
72
- __classPrivateFieldGet(this, _cache)[key] = {
73
- data: JSON.parse(JSON.stringify(data)),
74
- createdOn: new Date()
75
- };
76
- }
66
+ const clonedData = data === undefined ? undefined : JSON.parse(JSON.stringify(data));
67
+ __classPrivateFieldGet(this, _cache)[key] = {
68
+ data: clonedData,
69
+ createdOn: new Date(),
70
+ };
71
+ const storagedData = JSON.stringify(__classPrivateFieldGet(this, _cache)[key]);
77
72
  if ((option === null || option === void 0 ? void 0 : option.type) === 'session') {
78
73
  try {
79
- sessionStorage.setItem(key, JSON.stringify(__classPrivateFieldGet(this, _cache)[key]));
74
+ sessionStorage.setItem(key, storagedData);
80
75
  __classPrivateFieldGet(this, _subject)[key].next(__classPrivateFieldGet(this, _cache)[key].data);
81
76
  }
82
77
  catch (err) {
@@ -85,7 +80,7 @@ export class SdSettingService {
85
80
  }
86
81
  else {
87
82
  try {
88
- localStorage.setItem(key, JSON.stringify(__classPrivateFieldGet(this, _cache)[key]));
83
+ localStorage.setItem(key, storagedData);
89
84
  __classPrivateFieldGet(this, _subject)[key].next(__classPrivateFieldGet(this, _cache)[key].data);
90
85
  }
91
86
  catch (err) {
@@ -100,13 +95,13 @@ export class SdSettingService {
100
95
  if (data === undefined) {
101
96
  __classPrivateFieldGet(this, _cache)[key] = {
102
97
  data: undefined,
103
- createdOn: new Date()
98
+ createdOn: new Date(),
104
99
  };
105
100
  }
106
101
  else {
107
102
  __classPrivateFieldGet(this, _cache)[key] = {
108
103
  data: JSON.parse(JSON.stringify(data)),
109
- createdOn: new Date()
104
+ createdOn: new Date(),
110
105
  };
111
106
  }
112
107
  try {
@@ -196,10 +191,10 @@ export class SdSettingService {
196
191
  throw new Error('Key is required');
197
192
  }
198
193
  let hashKey = null;
199
- if (typeof (key) === 'string') {
194
+ if (typeof key === 'string') {
200
195
  hashKey = key;
201
196
  }
202
- else if (typeof (key) === 'object') {
197
+ else if (typeof key === 'object') {
203
198
  hashKey = hash(key);
204
199
  }
205
200
  else {
@@ -214,6 +209,7 @@ export class SdSettingService {
214
209
  const remove = __classPrivateFieldGet(this, _remove).call(this, hashKey, option);
215
210
  if (!__classPrivateFieldGet(this, _subject)[hashKey]) {
216
211
  __classPrivateFieldGet(this, _subject)[hashKey] = new BehaviorSubject(get());
212
+ __classPrivateFieldGet(this, _observer)[hashKey] = __classPrivateFieldGet(this, _subject)[hashKey].asObservable();
217
213
  }
218
214
  return {
219
215
  get,
@@ -221,7 +217,7 @@ export class SdSettingService {
221
217
  has,
222
218
  remove,
223
219
  subject: __classPrivateFieldGet(this, _subject)[hashKey],
224
- observer: __classPrivateFieldGet(this, _subject)[hashKey]
220
+ observer: __classPrivateFieldGet(this, _observer)[hashKey],
225
221
  };
226
222
  }
227
223
  createServer(key, option) {
@@ -230,10 +226,10 @@ export class SdSettingService {
230
226
  throw new Error('Key is required');
231
227
  }
232
228
  let hashKey = null;
233
- if (typeof (key) === 'string') {
229
+ if (typeof key === 'string') {
234
230
  hashKey = key;
235
231
  }
236
- else if (typeof (key) === 'object') {
232
+ else if (typeof key === 'object') {
237
233
  hashKey = hash(key);
238
234
  }
239
235
  else {
@@ -264,18 +260,18 @@ export class SdSettingService {
264
260
  has,
265
261
  remove,
266
262
  subject: __classPrivateFieldGet(this, _subject)[hashKey],
267
- observer: __classPrivateFieldGet(this, _subject)[hashKey].pipe(startWith(__classPrivateFieldGet(this, _subject)[hashKey].getValue()), switchMap(get))
263
+ observer: __classPrivateFieldGet(this, _subject)[hashKey].pipe(startWith(__classPrivateFieldGet(this, _subject)[hashKey].getValue()), switchMap(get)),
268
264
  };
269
265
  }
270
266
  }
271
- _cache = new WeakMap(), _subject = new WeakMap(), _get = new WeakMap(), _getServer = new WeakMap(), _set = new WeakMap(), _setServer = new WeakMap(), _has = new WeakMap(), _hasServer = new WeakMap(), _remove = new WeakMap(), _removeServer = new WeakMap();
267
+ _cache = new WeakMap(), _subject = new WeakMap(), _observer = new WeakMap(), _get = new WeakMap(), _getServer = new WeakMap(), _set = new WeakMap(), _setServer = new WeakMap(), _has = new WeakMap(), _hasServer = new WeakMap(), _remove = new WeakMap(), _removeServer = new WeakMap();
272
268
  SdSettingService.ɵprov = i0.ɵɵdefineInjectable({ factory: function SdSettingService_Factory() { return new SdSettingService(i0.ɵɵinject(i1.SETTING_CONFIG, 8)); }, token: SdSettingService, providedIn: "root" });
273
269
  SdSettingService.decorators = [
274
270
  { type: Injectable, args: [{
275
- providedIn: 'root'
271
+ providedIn: 'root',
276
272
  },] }
277
273
  ];
278
274
  SdSettingService.ctorParameters = () => [
279
275
  { type: undefined, decorators: [{ type: Inject, args: [SETTING_CONFIG,] }, { type: Optional }] }
280
276
  ];
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9zZXR0aW5nLyIsInNvdXJjZXMiOlsic3JjL2xpYi9zZXR0aW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUFXLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBNkYsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBSzVJLE1BQU0sT0FBTyxnQkFBZ0I7SUFZM0IsWUFBd0QsYUFBb0M7UUFBcEMsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBWDVGLGlCQUtJLEVBQUUsRUFBQztRQUVQLG1CQUVJLEVBQUUsRUFBQztRQThFUCxlQUFPLENBQVUsR0FBVyxFQUFFLE1BQTJCLEVBQWEsRUFBRTtZQUN0RSxPQUFPLEdBQUcsRUFBRTtnQkFDVixJQUFJLEtBQUssR0FBRyxxQ0FBWSxHQUFHLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxJQUFJLE1BQUssU0FBUyxFQUFFO29CQUM5QixJQUFJO3dCQUNGLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDakQ7b0JBQUMsV0FBTTt3QkFDTixLQUFLLEdBQUcsU0FBUyxDQUFDO3FCQUNuQjtpQkFDRjtxQkFBTTtvQkFD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UUFDN0MsTUFBTSxNQUFNLEdBQUcsMkNBQUEsSUFBSSxFQUFTLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPO1lBQ0wsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsTUFBTTtZQUNOLE9BQU8sRUFBRSx1Q0FBYyxPQUFPLENBQUM7WUFDL0IsUUFBUSxFQUFFLHVDQUFjLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsdUNBQWMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEcsQ0FBQztJQUNKLENBQUM7Ozs7O1lBekZGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OzRDQWFjLE1BQU0sU0FBQyxjQUFjLGNBQUcsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgaGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU0VUVElOR19DT05GSUcsIElTZXR0aW5nQ29uZmlndXJhdGlvbiwgU2RTZXR0aW5nT3B0aW9uLCBTZFNldHRpbmcsIFNkU2V0dGluZ1NlcnZlciwgU2RTZXR0aW5nT3B0aW9uU2VydmVyIH0gZnJvbSAnLi9zZXR0aW5nLm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNkU2V0dGluZ1NlcnZpY2Uge1xyXG4gICNjYWNoZToge1xyXG4gICAgW2tleTogc3RyaW5nXToge1xyXG4gICAgICBkYXRhOiBhbnksXHJcbiAgICAgIGNyZWF0ZWRPbjogRGF0ZVxyXG4gICAgfVxyXG4gIH0gPSB7fTtcclxuXHJcbiAgI3N1YmplY3Q6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IEJlaGF2aW9yU3ViamVjdDxhbnk+O1xyXG4gIH0gPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChTRVRUSU5HX0NPTkZJRykgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBJU2V0dGluZ0NvbmZpZ3VyYXRpb24pIHsgfVxyXG5cclxuICBjcmVhdGU8VCA9IGFueT4oa2V5OiBzdHJpbmcgfCBvYmplY3QsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvbjxUPik6IFNkU2V0dGluZzxUPiB7XHJcbiAgICBpZiAoIWtleSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleSBpcyByZXF1aXJlZCcpO1xyXG4gICAgfVxyXG4gICAgbGV0IGhhc2hLZXk6IHN0cmluZyA9IG51bGw7XHJcbiAgICBpZiAodHlwZW9mIChrZXkpID09PSAnc3RyaW5nJykge1xyXG4gICAgICBoYXNoS2V5ID0ga2V5O1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgKGtleSkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGhhc2hLZXkgPSBoYXNoKGtleSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uPy5jb252ZXJ0S2V5KSB7XHJcbiAgICAgIGhhc2hLZXkgPSB0aGlzLmNvbmZpZ3VyYXRpb24uY29udmVydEtleShoYXNoS2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBnZXQgPSB0aGlzLiNnZXQ8VD4oaGFzaEtleSwgb3B0aW9uKTtcclxuICAgIGNvbnN0IHNldCA9IHRoaXMuI3NldDxUPihoYXNoS2V5LCBvcHRpb24pO1xyXG4gICAgY29uc3QgaGFzID0gdGhpcy4jaGFzKGhhc2hLZXksIG9wdGlvbik7XHJcbiAgICBjb25zdCByZW1vdmUgPSB0aGlzLiNyZW1vdmUoaGFzaEtleSwgb3B0aW9uKTtcclxuICAgIGlmICghdGhpcy4jc3ViamVjdFtoYXNoS2V5XSkge1xyXG4gICAgICB0aGlzLiNzdWJqZWN0W2hhc2hLZXldID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUPihnZXQoKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBnZXQsXHJcbiAgICAgIHNldCxcclxuICAgICAgaGFzLFxyXG4gICAgICByZW1vdmUsXHJcbiAgICAgIHN1YmplY3Q6IHRoaXMuI3N1YmplY3RbaGFzaEtleV0sXHJcbiAgICAgIG9ic2VydmVyOiB0aGlzLiNzdWJqZWN0W2hhc2hLZXldXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2VydmVyPFQgPSBhbnk+KGtleTogc3RyaW5nIHwgb2JqZWN0LCBvcHRpb24/OiBTZFNldHRpbmdPcHRpb25TZXJ2ZXI8VD4pOiBTZFNldHRpbmdTZXJ2ZXI8VD4ge1xyXG4gICAgaWYgKCFrZXkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdLZXkgaXMgcmVxdWlyZWQnKTtcclxuICAgIH1cclxuICAgIGxldCBoYXNoS2V5OiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKHR5cGVvZiAoa2V5KSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaGFzaEtleSA9IGtleTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIChrZXkpID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBoYXNoS2V5ID0gaGFzaChrZXkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGtleScpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbj8uY29udmVydEtleSkge1xyXG4gICAgICBoYXNoS2V5ID0gdGhpcy5jb25maWd1cmF0aW9uLmNvbnZlcnRLZXkoaGFzaEtleSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbj8uZ2V0KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIGluaXQgc2V0dGluZyBjb25maWd1cmF0aW9uIG1ldGhvZCBnZXQgZm9yIHR5cGUgc2VydmVyJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbj8uc2V0KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIGluaXQgc2V0dGluZyBjb25maWd1cmF0aW9uIG1ldGhvZCBzZXQgZm9yIHR5cGUgc2VydmVyJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbj8ucmVtb3ZlKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIGluaXQgc2V0dGluZyBjb25maWd1cmF0aW9uIG1ldGhvZCByZW1vdmUgZm9yIHR5cGUgc2VydmVyJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuI3N1YmplY3RbaGFzaEtleV0pIHtcclxuICAgICAgdGhpcy4jc3ViamVjdFtoYXNoS2V5XSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihvcHRpb24/LmRlZmF1bHQpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ2V0ID0gdGhpcy4jZ2V0U2VydmVyPFQ+KGhhc2hLZXksIG9wdGlvbik7XHJcbiAgICBjb25zdCBzZXQgPSB0aGlzLiNzZXRTZXJ2ZXI8VD4oaGFzaEtleSwgb3B0aW9uKTtcclxuICAgIGNvbnN0IGhhcyA9IHRoaXMuI2hhc1NlcnZlcihoYXNoS2V5LCBvcHRpb24pO1xyXG4gICAgY29uc3QgcmVtb3ZlID0gdGhpcy4jcmVtb3ZlKGhhc2hLZXksIG9wdGlvbik7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBnZXQsXHJcbiAgICAgIHNldCxcclxuICAgICAgaGFzLFxyXG4gICAgICByZW1vdmUsXHJcbiAgICAgIHN1YmplY3Q6IHRoaXMuI3N1YmplY3RbaGFzaEtleV0sXHJcbiAgICAgIG9ic2VydmVyOiB0aGlzLiNzdWJqZWN0W2hhc2hLZXldLnBpcGUoc3RhcnRXaXRoKHRoaXMuI3N1YmplY3RbaGFzaEtleV0uZ2V0VmFsdWUoKSksIHN3aXRjaE1hcChnZXQpKVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNnZXQgPSA8VCA9IGFueT4oa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvbjxUPik6ICgoKSA9PiBUKSA9PiB7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBsZXQgY2FjaGUgPSB0aGlzLiNjYWNoZVtrZXldO1xyXG4gICAgICBpZiAob3B0aW9uPy50eXBlID09PSAnc2Vzc2lvbicpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY2FjaGUgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KSk7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICBjYWNoZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNhY2hlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKTtcclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgIGNhY2hlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbj8uZGVmYXVsdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2FjaGUuZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjYWNoZS5kYXRhKSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgI2dldFNlcnZlciA9IDxUID0gYW55PihrZXk6IHN0cmluZywgb3B0aW9uPzogU2RTZXR0aW5nT3B0aW9uU2VydmVyPFQ+KTogKCgpID0+IFByb21pc2U8VD4pID0+IHtcclxuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XHJcbiAgICAgIGxldCBjYWNoZSA9IHRoaXMuI2NhY2hlW2tleV07XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY2FjaGUgPSBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24/LmdldChrZXksIG9wdGlvbik7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIGNhY2hlID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghY2FjaGUpIHtcclxuICAgICAgICByZXR1cm4gb3B0aW9uPy5kZWZhdWx0O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjYWNoZS5kYXRhID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNhY2hlLmRhdGEpKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAjc2V0ID0gPFQgPSBhbnk+KGtleTogc3RyaW5nLCBvcHRpb24/OiBTZFNldHRpbmdPcHRpb248VD4pOiAoKGRhdGE6IFQpID0+IHZvaWQpID0+IHtcclxuICAgIHJldHVybiAoZGF0YTogVCkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHtcclxuICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGNyZWF0ZWRPbjogbmV3IERhdGUoKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHtcclxuICAgICAgICAgIGRhdGE6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpLFxyXG4gICAgICAgICAgY3JlYXRlZE9uOiBuZXcgRGF0ZSgpXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob3B0aW9uPy50eXBlID09PSAnc2Vzc2lvbicpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHRoaXMuI2NhY2hlW2tleV0pKTtcclxuICAgICAgICAgIHRoaXMuI3N1YmplY3Rba2V5XS5uZXh0KHRoaXMuI2NhY2hlW2tleV0uZGF0YSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHRoaXMuI2NhY2hlW2tleV0pKTtcclxuICAgICAgICAgIHRoaXMuI3N1YmplY3Rba2V5XS5uZXh0KHRoaXMuI2NhY2hlW2tleV0uZGF0YSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgI3NldFNlcnZlciA9IDxUID0gYW55PihrZXk6IHN0cmluZywgb3B0aW9uPzogU2RTZXR0aW5nT3B0aW9uPFQ+KTogKChkYXRhOiBUKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKGRhdGE6IFQpID0+IHtcclxuICAgICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuI2NhY2hlW2tleV0gPSB7XHJcbiAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBjcmVhdGVkT246IG5ldyBEYXRlKClcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuI2NhY2hlW2tleV0gPSB7XHJcbiAgICAgICAgICBkYXRhOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSxcclxuICAgICAgICAgIGNyZWF0ZWRPbjogbmV3IERhdGUoKVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24/LnNldChrZXksIHRoaXMuI2NhY2hlW2tleV0pO1xyXG4gICAgICAgIHRoaXMuI3N1YmplY3Rba2V5XS5uZXh0KHRoaXMuI2NhY2hlW2tleV0uZGF0YSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNoYXMgPSAoa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvbik6ICgoKSA9PiBib29sZWFuKSA9PiB7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBsZXQgY2FjaGUgPSB0aGlzLiNjYWNoZVtrZXldO1xyXG4gICAgICBpZiAob3B0aW9uPy50eXBlID09PSAnc2Vzc2lvbicpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY2FjaGUgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KSk7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICBjYWNoZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNhY2hlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKTtcclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgIGNhY2hlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNoYXNTZXJ2ZXIgPSAoa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvblNlcnZlcik6ICgoKSA9PiBQcm9taXNlPGJvb2xlYW4+KSA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xyXG4gICAgICBsZXQgY2FjaGUgPSB0aGlzLiNjYWNoZVtrZXldO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhY2hlID0gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uPy5nZXQoa2V5LCBvcHRpb24pO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjYWNoZSA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNyZW1vdmUgPSAoa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvbik6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChvcHRpb24/LnR5cGUgPT09ICdzZXNzaW9uJykge1xyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiNjYWNoZVtrZXldID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuI3N1YmplY3Rba2V5XS5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNyZW1vdmVTZXJ2ZXIgPSAoa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvblNlcnZlcik6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbj8ucmVtb3ZlKGtleSwgb3B0aW9uKTtcclxuICAgICAgICB0aGlzLiNjYWNoZVtrZXldID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuI3N1YmplY3Rba2V5XS5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
277
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9zZXR0aW5nLyIsInNvdXJjZXMiOlsic3JjL2xpYi9zZXR0aW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQUUsZUFBZSxFQUF1QixNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQTZGLE1BQU0saUJBQWlCLENBQUM7OztBQUs1SSxNQUFNLE9BQU8sZ0JBQWdCO0lBVzNCLFlBR1UsYUFBb0M7UUFBcEMsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBYjlDLGlCQUtJLEVBQUUsRUFBQztRQUVQLG1CQUFpRCxFQUFFLEVBQUM7UUFDcEQsb0JBQTZDLEVBQUUsRUFBQztRQW1GaEQsZUFBTyxDQUFVLEdBQVcsRUFBRSxNQUEyQixFQUFhLEVBQUU7WUFDdEUsT0FBTyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxLQUFLLEdBQUcscUNBQVksR0FBRyxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsSUFBSSxNQUFLLFNBQVMsRUFBRTtvQkFDOUIsSUFBSTt3QkFDRixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQ2pEO29CQUFDLFdBQU07d0JBQ04sS0FBSyxHQUFHLFNBQVMsQ0FB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QUcsMkNBQUEsSUFBSSxFQUFTLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPO1lBQ0wsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsTUFBTTtZQUNOLE9BQU8sRUFBRSx1Q0FBYyxPQUFPLENBQUM7WUFDL0IsUUFBUSxFQUFFLHVDQUFjLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsdUNBQWMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEcsQ0FBQztJQUNKLENBQUM7Ozs7O1lBN0ZGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OzRDQWFJLE1BQU0sU0FBQyxjQUFjLGNBQ3JCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IGhhc2ggZnJvbSAnb2JqZWN0LWhhc2gnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFNFVFRJTkdfQ09ORklHLCBJU2V0dGluZ0NvbmZpZ3VyYXRpb24sIFNkU2V0dGluZ09wdGlvbiwgU2RTZXR0aW5nLCBTZFNldHRpbmdTZXJ2ZXIsIFNkU2V0dGluZ09wdGlvblNlcnZlciB9IGZyb20gJy4vc2V0dGluZy5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RTZXR0aW5nU2VydmljZSB7XHJcbiAgI2NhY2hlOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiB7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgICAgY3JlYXRlZE9uOiBEYXRlO1xyXG4gICAgfTtcclxuICB9ID0ge307XHJcblxyXG4gICNzdWJqZWN0OiBSZWNvcmQ8c3RyaW5nLCBCZWhhdmlvclN1YmplY3Q8YW55Pj4gPSB7fTtcclxuICAjb2JzZXJ2ZXI6IFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGU8YW55Pj4gPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KFNFVFRJTkdfQ09ORklHKVxyXG4gICAgQE9wdGlvbmFsKClcclxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbjogSVNldHRpbmdDb25maWd1cmF0aW9uXHJcbiAgKSB7fVxyXG5cclxuICBjcmVhdGU8VCA9IGFueT4oa2V5OiBzdHJpbmcgfCBvYmplY3QsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvbjxUPik6IFNkU2V0dGluZzxUPiB7XHJcbiAgICBpZiAoIWtleSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleSBpcyByZXF1aXJlZCcpO1xyXG4gICAgfVxyXG4gICAgbGV0IGhhc2hLZXk6IHN0cmluZyA9IG51bGw7XHJcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaGFzaEtleSA9IGtleTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgaGFzaEtleSA9IGhhc2goa2V5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXknKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24/LmNvbnZlcnRLZXkpIHtcclxuICAgICAgaGFzaEtleSA9IHRoaXMuY29uZmlndXJhdGlvbi5jb252ZXJ0S2V5KGhhc2hLZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdldCA9IHRoaXMuI2dldDxUPihoYXNoS2V5LCBvcHRpb24pO1xyXG4gICAgY29uc3Qgc2V0ID0gdGhpcy4jc2V0PFQ+KGhhc2hLZXksIG9wdGlvbik7XHJcbiAgICBjb25zdCBoYXMgPSB0aGlzLiNoYXMoaGFzaEtleSwgb3B0aW9uKTtcclxuICAgIGNvbnN0IHJlbW92ZSA9IHRoaXMuI3JlbW92ZShoYXNoS2V5LCBvcHRpb24pO1xyXG4gICAgaWYgKCF0aGlzLiNzdWJqZWN0W2hhc2hLZXldKSB7XHJcbiAgICAgIHRoaXMuI3N1YmplY3RbaGFzaEtleV0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFQ+KGdldCgpKTtcclxuICAgICAgdGhpcy4jb2JzZXJ2ZXJbaGFzaEtleV0gPSB0aGlzLiNzdWJqZWN0W2hhc2hLZXldLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZ2V0LFxyXG4gICAgICBzZXQsXHJcbiAgICAgIGhhcyxcclxuICAgICAgcmVtb3ZlLFxyXG4gICAgICBzdWJqZWN0OiB0aGlzLiNzdWJqZWN0W2hhc2hLZXldLFxyXG4gICAgICBvYnNlcnZlcjogdGhpcy4jb2JzZXJ2ZXJbaGFzaEtleV0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2VydmVyPFQgPSBhbnk+KGtleTogc3RyaW5nIHwgb2JqZWN0LCBvcHRpb24/OiBTZFNldHRpbmdPcHRpb25TZXJ2ZXI8VD4pOiBTZFNldHRpbmdTZXJ2ZXI8VD4ge1xyXG4gICAgaWYgKCFrZXkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdLZXkgaXMgcmVxdWlyZWQnKTtcclxuICAgIH1cclxuICAgIGxldCBoYXNoS2V5OiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGhhc2hLZXkgPSBrZXk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGhhc2hLZXkgPSBoYXNoKGtleSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uPy5jb252ZXJ0S2V5KSB7XHJcbiAgICAgIGhhc2hLZXkgPSB0aGlzLmNvbmZpZ3VyYXRpb24uY29udmVydEtleShoYXNoS2V5KTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uPy5nZXQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgaW5pdCBzZXR0aW5nIGNvbmZpZ3VyYXRpb24gbWV0aG9kIGdldCBmb3IgdHlwZSBzZXJ2ZXInKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uPy5zZXQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgaW5pdCBzZXR0aW5nIGNvbmZpZ3VyYXRpb24gbWV0aG9kIHNldCBmb3IgdHlwZSBzZXJ2ZXInKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uPy5yZW1vdmUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgaW5pdCBzZXR0aW5nIGNvbmZpZ3VyYXRpb24gbWV0aG9kIHJlbW92ZSBmb3IgdHlwZSBzZXJ2ZXInKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy4jc3ViamVjdFtoYXNoS2V5XSkge1xyXG4gICAgICB0aGlzLiNzdWJqZWN0W2hhc2hLZXldID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG9wdGlvbj8uZGVmYXVsdCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBnZXQgPSB0aGlzLiNnZXRTZXJ2ZXI8VD4oaGFzaEtleSwgb3B0aW9uKTtcclxuICAgIGNvbnN0IHNldCA9IHRoaXMuI3NldFNlcnZlcjxUPihoYXNoS2V5LCBvcHRpb24pO1xyXG4gICAgY29uc3QgaGFzID0gdGhpcy4jaGFzU2VydmVyKGhhc2hLZXksIG9wdGlvbik7XHJcbiAgICBjb25zdCByZW1vdmUgPSB0aGlzLiNyZW1vdmUoaGFzaEtleSwgb3B0aW9uKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGdldCxcclxuICAgICAgc2V0LFxyXG4gICAgICBoYXMsXHJcbiAgICAgIHJlbW92ZSxcclxuICAgICAgc3ViamVjdDogdGhpcy4jc3ViamVjdFtoYXNoS2V5XSxcclxuICAgICAgb2JzZXJ2ZXI6IHRoaXMuI3N1YmplY3RbaGFzaEtleV0ucGlwZShzdGFydFdpdGgodGhpcy4jc3ViamVjdFtoYXNoS2V5XS5nZXRWYWx1ZSgpKSwgc3dpdGNoTWFwKGdldCkpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNnZXQgPSA8VCA9IGFueT4oa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvbjxUPik6ICgoKSA9PiBUKSA9PiB7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICBsZXQgY2FjaGUgPSB0aGlzLiNjYWNoZVtrZXldO1xyXG4gICAgICBpZiAob3B0aW9uPy50eXBlID09PSAnc2Vzc2lvbicpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY2FjaGUgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KSk7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICBjYWNoZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNhY2hlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpKTtcclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgIGNhY2hlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbj8uZGVmYXVsdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2FjaGUuZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjYWNoZS5kYXRhKSk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gICNnZXRTZXJ2ZXIgPSA8VCA9IGFueT4oa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvblNlcnZlcjxUPik6ICgoKSA9PiBQcm9taXNlPFQ+KSA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xyXG4gICAgICBsZXQgY2FjaGUgPSB0aGlzLiNjYWNoZVtrZXldO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhY2hlID0gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uPy5nZXQoa2V5LCBvcHRpb24pO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjYWNoZSA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbj8uZGVmYXVsdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2FjaGUuZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjYWNoZS5kYXRhKSk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gICNzZXQgPSA8VCA9IGFueT4oa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvbjxUPik6ICgoZGF0YTogVCkgPT4gdm9pZCkgPT4ge1xyXG4gICAgcmV0dXJuIChkYXRhOiBUKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNsb25lZERhdGEgPSBkYXRhID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHtcclxuICAgICAgICBkYXRhOiBjbG9uZWREYXRhLFxyXG4gICAgICAgIGNyZWF0ZWRPbjogbmV3IERhdGUoKSxcclxuICAgICAgfTtcclxuICAgICAgY29uc3Qgc3RvcmFnZWREYXRhID0gSlNPTi5zdHJpbmdpZnkodGhpcy4jY2FjaGVba2V5XSk7XHJcbiAgICAgIGlmIChvcHRpb24/LnR5cGUgPT09ICdzZXNzaW9uJykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGtleSwgc3RvcmFnZWREYXRhKTtcclxuICAgICAgICAgIHRoaXMuI3N1YmplY3Rba2V5XS5uZXh0KHRoaXMuI2NhY2hlW2tleV0uZGF0YSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHN0b3JhZ2VkRGF0YSk7XHJcbiAgICAgICAgICB0aGlzLiNzdWJqZWN0W2tleV0ubmV4dCh0aGlzLiNjYWNoZVtrZXldLmRhdGEpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAjc2V0U2VydmVyID0gPFQgPSBhbnk+KGtleTogc3RyaW5nLCBvcHRpb24/OiBTZFNldHRpbmdPcHRpb248VD4pOiAoKGRhdGE6IFQpID0+IFByb21pc2U8dm9pZD4pID0+IHtcclxuICAgIHJldHVybiBhc3luYyAoZGF0YTogVCkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHtcclxuICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGNyZWF0ZWRPbjogbmV3IERhdGUoKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuI2NhY2hlW2tleV0gPSB7XHJcbiAgICAgICAgICBkYXRhOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSxcclxuICAgICAgICAgIGNyZWF0ZWRPbjogbmV3IERhdGUoKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uPy5zZXQoa2V5LCB0aGlzLiNjYWNoZVtrZXldKTtcclxuICAgICAgICB0aGlzLiNzdWJqZWN0W2tleV0ubmV4dCh0aGlzLiNjYWNoZVtrZXldLmRhdGEpO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgI2hhcyA9IChrZXk6IHN0cmluZywgb3B0aW9uPzogU2RTZXR0aW5nT3B0aW9uKTogKCgpID0+IGJvb2xlYW4pID0+IHtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIGxldCBjYWNoZSA9IHRoaXMuI2NhY2hlW2tleV07XHJcbiAgICAgIGlmIChvcHRpb24/LnR5cGUgPT09ICdzZXNzaW9uJykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjYWNoZSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShrZXkpKTtcclxuICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgIGNhY2hlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY2FjaGUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkpO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgY2FjaGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghY2FjaGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gICNoYXNTZXJ2ZXIgPSAoa2V5OiBzdHJpbmcsIG9wdGlvbj86IFNkU2V0dGluZ09wdGlvblNlcnZlcik6ICgoKSA9PiBQcm9taXNlPGJvb2xlYW4+KSA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xyXG4gICAgICBsZXQgY2FjaGUgPSB0aGlzLiNjYWNoZVtrZXldO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhY2hlID0gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uPy5nZXQoa2V5LCBvcHRpb24pO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBjYWNoZSA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICAjcmVtb3ZlID0gKGtleTogc3RyaW5nLCBvcHRpb24/OiBTZFNldHRpbmdPcHRpb24pOiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4ge1xyXG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAob3B0aW9uPy50eXBlID09PSAnc2Vzc2lvbicpIHtcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLiNzdWJqZWN0W2tleV0ubmV4dCh1bmRlZmluZWQpO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgI3JlbW92ZVNlcnZlciA9IChrZXk6IHN0cmluZywgb3B0aW9uPzogU2RTZXR0aW5nT3B0aW9uU2VydmVyKTogKCgpID0+IFByb21pc2U8dm9pZD4pID0+IHtcclxuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uPy5yZW1vdmUoa2V5LCBvcHRpb24pO1xyXG4gICAgICAgIHRoaXMuI2NhY2hlW2tleV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy4jc3ViamVjdFtrZXldLm5leHQodW5kZWZpbmVkKTtcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuIl19