@oneteme/jquery-organizer 0.0.1

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 (34) hide show
  1. package/README.md +441 -0
  2. package/esm2022/lib/group-by-manager/group-by-manager.mjs +73 -0
  3. package/esm2022/lib/lazy-field-manager/lazy-field-manager.mjs +91 -0
  4. package/esm2022/lib/models/index.mjs +3 -0
  5. package/esm2022/lib/models/organizer-chart-adapter.mjs +164 -0
  6. package/esm2022/lib/models/organizer-config.interface.mjs +2 -0
  7. package/esm2022/lib/models/organizer-menu.model.mjs +17 -0
  8. package/esm2022/lib/models/organizer-utils.mjs +26 -0
  9. package/esm2022/lib/organizer-button/organizer-button.component.mjs +266 -0
  10. package/esm2022/lib/organizer-button/organizer-button.module.mjs +17 -0
  11. package/esm2022/lib/organizer-facade/organizer-facade.mjs +269 -0
  12. package/esm2022/lib/organizer-facade/organizer-facade.types.mjs +2 -0
  13. package/esm2022/lib/slice-panel/slice-panel.component.mjs +452 -0
  14. package/esm2022/lib/slice-panel/slice-panel.model.mjs +2 -0
  15. package/esm2022/oneteme-jquery-organizer.mjs +5 -0
  16. package/esm2022/public-api.mjs +12 -0
  17. package/fesm2022/oneteme-jquery-organizer.mjs +1369 -0
  18. package/fesm2022/oneteme-jquery-organizer.mjs.map +1 -0
  19. package/index.d.ts +5 -0
  20. package/lib/group-by-manager/group-by-manager.d.ts +20 -0
  21. package/lib/lazy-field-manager/lazy-field-manager.d.ts +25 -0
  22. package/lib/models/index.d.ts +2 -0
  23. package/lib/models/organizer-chart-adapter.d.ts +44 -0
  24. package/lib/models/organizer-config.interface.d.ts +103 -0
  25. package/lib/models/organizer-menu.model.d.ts +7 -0
  26. package/lib/models/organizer-utils.d.ts +8 -0
  27. package/lib/organizer-button/organizer-button.component.d.ts +51 -0
  28. package/lib/organizer-button/organizer-button.module.d.ts +8 -0
  29. package/lib/organizer-facade/organizer-facade.d.ts +51 -0
  30. package/lib/organizer-facade/organizer-facade.types.d.ts +31 -0
  31. package/lib/slice-panel/slice-panel.component.d.ts +80 -0
  32. package/lib/slice-panel/slice-panel.model.d.ts +25 -0
  33. package/package.json +35 -0
  34. package/public-api.d.ts +12 -0
@@ -0,0 +1,269 @@
1
+ import { Subject } from 'rxjs';
2
+ export function humanizeKey(key) {
3
+ return key
4
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
5
+ .replace(/[_-]+/g, ' ')
6
+ .replace(/^./, (v) => v.toUpperCase());
7
+ }
8
+ export class OrganizerFacade {
9
+ constructor() {
10
+ this.fields = {
11
+ activeFields: [],
12
+ userCustomized: false,
13
+ };
14
+ this.groupBy = {
15
+ activeKey: null,
16
+ userCustomized: false,
17
+ };
18
+ this.sliceBy = {
19
+ activeDynamicFields: [],
20
+ availableForDynamic: [],
21
+ allDynamicFields: [],
22
+ activeLabel: 'Aucun',
23
+ };
24
+ this._panelConfig = { fields: [], sliceConfigs: [] };
25
+ this._hiddenStaticKeys = new Set();
26
+ this._events$ = new Subject();
27
+ this.events$ = this._events$.asObservable();
28
+ }
29
+ get enabled() {
30
+ return this._panelConfig.config?.enabled === true;
31
+ }
32
+ get showFields() {
33
+ return this.enabled;
34
+ }
35
+ get showGroupBySection() {
36
+ return this.enabled && this.groupByFields.length > 0;
37
+ }
38
+ get showSliceBySection() {
39
+ return this.enabled && ((this._panelConfig.sliceConfigs?.length ?? 0) > 0 ||
40
+ this.sliceBy.allDynamicFields.length > 0);
41
+ }
42
+ get allowFieldRemoval() {
43
+ return this._panelConfig.config?.enableFieldRemoval !== false;
44
+ }
45
+ get isFieldDragDropEnabled() {
46
+ return this._panelConfig.config?.enableFieldDragDrop === true;
47
+ }
48
+ get menuBaseFields() {
49
+ return this._uniqueByKey((this._panelConfig.fields || []).filter(c => !c.optional));
50
+ }
51
+ get menuOptionalFields() {
52
+ return this._uniqueByKey((this._panelConfig.fields || []).filter(c => c.optional));
53
+ }
54
+ get totalFieldCount() {
55
+ return new Set((this._panelConfig.fields || []).map(c => c.key)).size;
56
+ }
57
+ get groupByFields() {
58
+ const seen = new Set();
59
+ return (this._panelConfig.fields || []).filter(c => {
60
+ if (c.groupable === false || seen.has(c.key))
61
+ return false;
62
+ if (!c.header && c.groupable !== true)
63
+ return false;
64
+ seen.add(c.key);
65
+ return true;
66
+ });
67
+ }
68
+ get activeGroupByLabel() {
69
+ if (!this.groupBy.activeKey)
70
+ return this._panelConfig.noneLabel ?? 'Aucun';
71
+ const field = this.groupByFields.find(c => c.key === this.groupBy.activeKey);
72
+ return field?.header || this.groupBy.activeKey;
73
+ }
74
+ get staticSlicesForMenu() {
75
+ return (this._panelConfig.sliceConfigs ?? [])
76
+ .filter(s => !!s.columnKey)
77
+ .map(s => {
78
+ const fieldIcon = (this._panelConfig.fields ?? []).find(c => c.key === s.columnKey)?.icon;
79
+ return { key: s.columnKey, title: s.title || humanizeKey(s.columnKey), icon: s.icon ?? fieldIcon };
80
+ });
81
+ }
82
+ fieldLabel(field) {
83
+ return field.header || humanizeKey(field.key);
84
+ }
85
+ update(panelConfig) {
86
+ this._panelConfig = panelConfig;
87
+ this._refreshDefaultFields();
88
+ this._refreshDynamicSliceMeta();
89
+ if (!this.groupBy.userCustomized) {
90
+ this.groupBy.activeKey = panelConfig.defaultGroupBy ?? null;
91
+ }
92
+ }
93
+ setActiveFields(fields) {
94
+ this.fields.activeFields = fields;
95
+ this.fields.userCustomized = true;
96
+ }
97
+ setUserCustomized(value) {
98
+ this.fields.userCustomized = value;
99
+ }
100
+ resetToDefaults() {
101
+ this.fields.userCustomized = false;
102
+ this.groupBy.userCustomized = false;
103
+ this._refreshDefaultFields();
104
+ this.groupBy.activeKey = this._panelConfig.defaultGroupBy ?? null;
105
+ this.sliceBy.activeDynamicFields = [];
106
+ this._refreshDynamicSliceMeta();
107
+ }
108
+ addField(field) {
109
+ const configFields = this._panelConfig.fields ?? [];
110
+ const configIndex = configFields.findIndex(c => c.key === field.key);
111
+ if (configIndex === -1) {
112
+ this.fields.activeFields = [...this.fields.activeFields, field];
113
+ }
114
+ else {
115
+ const insertBefore = this.fields.activeFields.findIndex(c => {
116
+ const ci = configFields.findIndex(cc => cc.key === c.key);
117
+ return ci !== -1 && ci > configIndex;
118
+ });
119
+ if (insertBefore === -1) {
120
+ this.fields.activeFields = [...this.fields.activeFields, field];
121
+ }
122
+ else {
123
+ const copy = [...this.fields.activeFields];
124
+ copy.splice(insertBefore, 0, field);
125
+ this.fields.activeFields = copy;
126
+ }
127
+ }
128
+ this.fields.userCustomized = true;
129
+ this._events$.next({ type: 'fieldsChanged', fieldIds: this.fields.activeFields.map(c => c.key) });
130
+ }
131
+ removeField(fieldKey) {
132
+ const field = this.fields.activeFields.find(c => c.key === fieldKey);
133
+ if (!field)
134
+ return false;
135
+ if (!field.optional && !this.allowFieldRemoval)
136
+ return false;
137
+ if (this.fields.activeFields.length <= 1)
138
+ return false;
139
+ this.fields.activeFields = this.fields.activeFields.filter(c => c.key !== fieldKey);
140
+ this.fields.userCustomized = true;
141
+ this._events$.next({ type: 'fieldsChanged', fieldIds: this.fields.activeFields.map(c => c.key) });
142
+ return true;
143
+ }
144
+ toggleFieldVisibility(field, visible) {
145
+ const isVisible = this.isFieldVisible(field.key);
146
+ if (visible && !isVisible) {
147
+ this.addField(field);
148
+ }
149
+ else if (!visible && isVisible) {
150
+ this.removeField(field.key);
151
+ }
152
+ }
153
+ reorderFields(fromKey, toKey) {
154
+ const prev = this.fields.activeFields.findIndex(c => c.key === fromKey);
155
+ const curr = this.fields.activeFields.findIndex(c => c.key === toKey);
156
+ if (prev === -1 || curr === -1 || prev === curr)
157
+ return false;
158
+ const reordered = [...this.fields.activeFields];
159
+ const [moved] = reordered.splice(prev, 1);
160
+ reordered.splice(curr, 0, moved);
161
+ this.fields.activeFields = reordered;
162
+ this.fields.userCustomized = true;
163
+ this._events$.next({ type: 'fieldsChanged', fieldIds: this.fields.activeFields.map(c => c.key) });
164
+ return true;
165
+ }
166
+ isFieldVisible(key) {
167
+ return this.fields.activeFields.some(c => c.key === key);
168
+ }
169
+ setGroupBy(key) {
170
+ this.groupBy.activeKey = key;
171
+ this.groupBy.userCustomized = true;
172
+ this._events$.next({ type: 'groupByChanged', key });
173
+ }
174
+ onDynamicSliceKeysChange(keys) {
175
+ const allFields = this._panelConfig.fields ?? [];
176
+ const staticKeys = new Set((this._panelConfig.sliceConfigs ?? []).map(s => s.columnKey).filter((k) => !!k));
177
+ const dynamicKeySet = new Set(keys);
178
+ const existingKeys = new Set([...staticKeys, ...dynamicKeySet]);
179
+ this.sliceBy.activeDynamicFields = keys
180
+ .map(k => allFields.find(c => c.key === k))
181
+ .filter((c) => !!c);
182
+ const seen = new Set();
183
+ this.sliceBy.availableForDynamic = allFields.filter(c => {
184
+ if (c.sliceable === false || existingKeys.has(c.key) || seen.has(c.key))
185
+ return false;
186
+ seen.add(c.key);
187
+ return true;
188
+ });
189
+ this._computeSliceLabel();
190
+ this._events$.next({ type: 'dynamicSlicesChanged', keys });
191
+ }
192
+ isDynamicSliceActive(key) {
193
+ return this.sliceBy.activeDynamicFields.some(c => c.key === key);
194
+ }
195
+ toOrganizerState() {
196
+ return {
197
+ selectedFieldIds: this.fields.activeFields.map(c => c.key),
198
+ groupByKey: this.groupBy.activeKey,
199
+ dynamicSliceKeys: this.sliceBy.activeDynamicFields.map(c => c.key),
200
+ };
201
+ }
202
+ destroy() { this._events$.complete(); }
203
+ updateHiddenStaticKeys(keys) {
204
+ this._hiddenStaticKeys = keys;
205
+ this._computeSliceLabel();
206
+ }
207
+ _refreshDefaultFields() {
208
+ const defaultFields = (this._panelConfig.fields || []).filter(c => !c.optional);
209
+ if (!this.fields.userCustomized || this.fields.activeFields.length === 0) {
210
+ this.fields.activeFields = [...defaultFields];
211
+ }
212
+ else {
213
+ const allowedKeys = new Set((this._panelConfig.fields || []).map(c => c.key));
214
+ this.fields.activeFields = this.fields.activeFields.filter(c => allowedKeys.has(c.key));
215
+ }
216
+ }
217
+ _refreshDynamicSliceMeta() {
218
+ const allFields = this._panelConfig.fields ?? [];
219
+ const staticKeys = new Set((this._panelConfig.sliceConfigs ?? []).map(s => s.columnKey).filter((k) => !!k));
220
+ const activeDynKeys = new Set(this.sliceBy.activeDynamicFields.map(c => c.key));
221
+ const seen1 = new Set();
222
+ this.sliceBy.availableForDynamic = allFields.filter(c => {
223
+ if (c.sliceable === false || staticKeys.has(c.key) || activeDynKeys.has(c.key) || seen1.has(c.key))
224
+ return false;
225
+ if (!c.header && c.sliceable !== true)
226
+ return false;
227
+ seen1.add(c.key);
228
+ return true;
229
+ });
230
+ const seen2 = new Set();
231
+ this.sliceBy.allDynamicFields = allFields.filter(c => {
232
+ if (c.sliceable === false || staticKeys.has(c.key) || seen2.has(c.key))
233
+ return false;
234
+ if (!c.header && c.sliceable !== true)
235
+ return false;
236
+ seen2.add(c.key);
237
+ return true;
238
+ });
239
+ this._computeSliceLabel();
240
+ }
241
+ _computeSliceLabel() {
242
+ const visibleStatics = (this._panelConfig.sliceConfigs ?? []).filter(s => !s.columnKey || !this._hiddenStaticKeys.has(s.columnKey));
243
+ const total = visibleStatics.length + this.sliceBy.activeDynamicFields.length;
244
+ if (total === 0) {
245
+ this.sliceBy.activeLabel = this._panelConfig.noneLabel ?? 'Aucun';
246
+ return;
247
+ }
248
+ if (total === 1) {
249
+ if (visibleStatics.length === 1) {
250
+ const first = visibleStatics[0];
251
+ this.sliceBy.activeLabel = first?.title || first?.columnKey || '1';
252
+ return;
253
+ }
254
+ this.sliceBy.activeLabel = this.sliceBy.activeDynamicFields[0]?.header || '1';
255
+ return;
256
+ }
257
+ this.sliceBy.activeLabel = `${total} actifs`;
258
+ }
259
+ _uniqueByKey(fields) {
260
+ const seen = new Set();
261
+ return fields.filter(c => {
262
+ if (seen.has(c.key))
263
+ return false;
264
+ seen.add(c.key);
265
+ return true;
266
+ });
267
+ }
268
+ }
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWZhY2FkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZXRlbWUvanF1ZXJ5LW9yZ2FuaXplci9zcmMvbGliL29yZ2FuaXplci1mYWNhZGUvb3JnYW5pemVyLWZhY2FkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSS9CLE1BQU0sVUFBVSxXQUFXLENBQUMsR0FBVztJQUNyQyxPQUFPLEdBQUc7U0FDUCxPQUFPLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDO1NBQ3RDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDO1NBQ3RCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxNQUFNLE9BQU8sZUFBZTtJQUE1QjtRQUVXLFdBQU0sR0FBaUM7WUFDOUMsWUFBWSxFQUFFLEVBQUU7WUFDaEIsY0FBYyxFQUFFLEtBQUs7U0FDdEIsQ0FBQztRQUVPLFlBQU8sR0FBMEI7WUFDeEMsU0FBUyxFQUFFLElBQUk7WUFDZixjQUFjLEVBQUUsS0FBSztTQUN0QixDQUFDO1FBRU8sWUFBTyxHQUFrQztZQUNoRCxtQkFBbUIsRUFBRSxFQUFFO1lBQ3ZCLG1CQUFtQixFQUFFLEVBQUU7WUFDdkIsZ0JBQWdCLEVBQUUsRUFBRTtZQUNwQixXQUFXLEVBQUUsT0FBTztTQUNyQixDQUFDO1FBRU0saUJBQVksR0FBaUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM5RSxzQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBRTdCLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBa0IsQ0FBQztRQUNqRCxZQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQXdRbEQsQ0FBQztJQXRRQyxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sS0FBSyxJQUFJLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQ3JCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEtBQUssS0FBSyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLG1CQUFtQixLQUFLLElBQUksQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzNELElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssSUFBSTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQztRQUMzRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RSxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7YUFDMUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7YUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1AsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUM7WUFDMUYsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7UUFDdkcsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQXVDO1FBQ2hELE9BQU8sS0FBSyxDQUFDLE1BQU0sSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxNQUFNLENBQUMsV0FBeUM7UUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDaEMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDO1NBQzdEO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFnQjtRQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFjO1FBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYTtRQUNwQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDcEQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JFLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNqRTthQUFNO1lBQ0wsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMxRCxNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzFELE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ2pFO2lCQUFNO2dCQUNMLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzthQUNqQztTQUNGO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWdCO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM3RCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQWEsRUFBRSxPQUFnQjtRQUNuRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RCO2FBQU0sSUFBSSxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQWUsRUFBRSxLQUFhO1FBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDeEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUN0RSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM5RCxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFXO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQWtCO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsSUFBYztRQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDakQsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQ3hCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM3RixDQUFDO1FBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxJQUFJO2FBQ3BDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5DLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3RELElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxLQUFLLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ3RGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFXO1FBQzlCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPO1lBQ0wsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMxRCxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTO1lBQ2xDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztTQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sS0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFBLENBQUMsQ0FBQztJQUU1QyxzQkFBc0IsQ0FBQyxJQUFpQjtRQUN0QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7U0FDL0M7YUFBTTtZQUNMLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN6RjtJQUNILENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ2pELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUN4QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDN0YsQ0FBQztRQUNGLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFaEYsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLENBQUMsU0FBUyxLQUFLLEtBQUssSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDakgsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ3BELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuRCxJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssS0FBSyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUNyRixJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsU0FBUyxLQUFLLElBQUk7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDcEQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQ2xFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQzlELENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO1FBQzlFLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtZQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQztZQUFDLE9BQU87U0FBRTtRQUMvRixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDZixJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUMvQixNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEtBQUssRUFBRSxLQUFLLElBQUksS0FBSyxFQUFFLFNBQVMsSUFBSSxHQUFHLENBQUM7Z0JBQ25FLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFJLEdBQUcsQ0FBQztZQUM5RSxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxHQUFHLEtBQUssU0FBUyxDQUFDO0lBQy9DLENBQUM7SUFFTyxZQUFZLENBQUMsTUFBZ0I7UUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUMvQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9yZ2FuaXplckV2ZW50LCBPcmdhbml6ZXJTdGF0ZSB9IGZyb20gJ0BvbmV0ZW1lL2pxdWVyeS1jb3JlJztcbmltcG9ydCB7IE9yZ2FuaXplckZpZWxkRGVmLCBPcmdhbml6ZXJGaWVsZHNTdGF0ZSwgT3JnYW5pemVyR3JvdXBCeVN0YXRlLCBPcmdhbml6ZXJQYW5lbENvbmZpZywgT3JnYW5pemVyU2xpY2VCeVN0YXRlIH0gZnJvbSAnLi9vcmdhbml6ZXItZmFjYWRlLnR5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGh1bWFuaXplS2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGtleVxuICAgIC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCAnJDEgJDInKVxuICAgIC5yZXBsYWNlKC9bXy1dKy9nLCAnICcpXG4gICAgLnJlcGxhY2UoL14uLywgKHYpID0+IHYudG9VcHBlckNhc2UoKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBPcmdhbml6ZXJGYWNhZGU8VEZpZWxkIGV4dGVuZHMgT3JnYW5pemVyRmllbGREZWYgPSBPcmdhbml6ZXJGaWVsZERlZj4ge1xuXG4gIHJlYWRvbmx5IGZpZWxkczogT3JnYW5pemVyRmllbGRzU3RhdGU8VEZpZWxkPiA9IHtcbiAgICBhY3RpdmVGaWVsZHM6IFtdLFxuICAgIHVzZXJDdXN0b21pemVkOiBmYWxzZSxcbiAgfTtcblxuICByZWFkb25seSBncm91cEJ5OiBPcmdhbml6ZXJHcm91cEJ5U3RhdGUgPSB7XG4gICAgYWN0aXZlS2V5OiBudWxsLFxuICAgIHVzZXJDdXN0b21pemVkOiBmYWxzZSxcbiAgfTtcblxuICByZWFkb25seSBzbGljZUJ5OiBPcmdhbml6ZXJTbGljZUJ5U3RhdGU8VEZpZWxkPiA9IHtcbiAgICBhY3RpdmVEeW5hbWljRmllbGRzOiBbXSxcbiAgICBhdmFpbGFibGVGb3JEeW5hbWljOiBbXSxcbiAgICBhbGxEeW5hbWljRmllbGRzOiBbXSxcbiAgICBhY3RpdmVMYWJlbDogJ0F1Y3VuJyxcbiAgfTtcblxuICBwcml2YXRlIF9wYW5lbENvbmZpZzogT3JnYW5pemVyUGFuZWxDb25maWc8VEZpZWxkPiA9IHsgZmllbGRzOiBbXSwgc2xpY2VDb25maWdzOiBbXSB9O1xuICBwcml2YXRlIF9oaWRkZW5TdGF0aWNLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRzJCA9IG5ldyBTdWJqZWN0PE9yZ2FuaXplckV2ZW50PigpO1xuICByZWFkb25seSBldmVudHMkID0gdGhpcy5fZXZlbnRzJC5hc09ic2VydmFibGUoKTtcblxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcGFuZWxDb25maWcuY29uZmlnPy5lbmFibGVkID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IHNob3dGaWVsZHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZDtcbiAgfVxuXG4gIGdldCBzaG93R3JvdXBCeVNlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZCAmJiB0aGlzLmdyb3VwQnlGaWVsZHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBzaG93U2xpY2VCeVNlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlZCAmJiAoXG4gICAgICAodGhpcy5fcGFuZWxDb25maWcuc2xpY2VDb25maWdzPy5sZW5ndGggPz8gMCkgPiAwIHx8XG4gICAgICB0aGlzLnNsaWNlQnkuYWxsRHluYW1pY0ZpZWxkcy5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIGdldCBhbGxvd0ZpZWxkUmVtb3ZhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcGFuZWxDb25maWcuY29uZmlnPy5lbmFibGVGaWVsZFJlbW92YWwgIT09IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGlzRmllbGREcmFnRHJvcEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhbmVsQ29uZmlnLmNvbmZpZz8uZW5hYmxlRmllbGREcmFnRHJvcCA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBtZW51QmFzZUZpZWxkcygpOiBURmllbGRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3VuaXF1ZUJ5S2V5KCh0aGlzLl9wYW5lbENvbmZpZy5maWVsZHMgfHwgW10pLmZpbHRlcihjID0+ICFjLm9wdGlvbmFsKSk7XG4gIH1cblxuICBnZXQgbWVudU9wdGlvbmFsRmllbGRzKCk6IFRGaWVsZFtdIHtcbiAgICByZXR1cm4gdGhpcy5fdW5pcXVlQnlLZXkoKHRoaXMuX3BhbmVsQ29uZmlnLmZpZWxkcyB8fCBbXSkuZmlsdGVyKGMgPT4gYy5vcHRpb25hbCkpO1xuICB9XG5cbiAgZ2V0IHRvdGFsRmllbGRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiBuZXcgU2V0KCh0aGlzLl9wYW5lbENvbmZpZy5maWVsZHMgfHwgW10pLm1hcChjID0+IGMua2V5KSkuc2l6ZTtcbiAgfVxuXG4gIGdldCBncm91cEJ5RmllbGRzKCk6IFRGaWVsZFtdIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgcmV0dXJuICh0aGlzLl9wYW5lbENvbmZpZy5maWVsZHMgfHwgW10pLmZpbHRlcihjID0+IHtcbiAgICAgIGlmIChjLmdyb3VwYWJsZSA9PT0gZmFsc2UgfHwgc2Vlbi5oYXMoYy5rZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWMuaGVhZGVyICYmIGMuZ3JvdXBhYmxlICE9PSB0cnVlKSByZXR1cm4gZmFsc2U7XG4gICAgICBzZWVuLmFkZChjLmtleSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBhY3RpdmVHcm91cEJ5TGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZ3JvdXBCeS5hY3RpdmVLZXkpIHJldHVybiB0aGlzLl9wYW5lbENvbmZpZy5ub25lTGFiZWwgPz8gJ0F1Y3VuJztcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ3JvdXBCeUZpZWxkcy5maW5kKGMgPT4gYy5rZXkgPT09IHRoaXMuZ3JvdXBCeS5hY3RpdmVLZXkpO1xuICAgIHJldHVybiBmaWVsZD8uaGVhZGVyIHx8IHRoaXMuZ3JvdXBCeS5hY3RpdmVLZXk7XG4gIH1cblxuICBnZXQgc3RhdGljU2xpY2VzRm9yTWVudSgpOiBBcnJheTx7IGtleTogc3RyaW5nOyB0aXRsZTogc3RyaW5nOyBpY29uPzogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gKHRoaXMuX3BhbmVsQ29uZmlnLnNsaWNlQ29uZmlncyA/PyBbXSlcbiAgICAgIC5maWx0ZXIocyA9PiAhIXMuY29sdW1uS2V5KVxuICAgICAgLm1hcChzID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRJY29uID0gKHRoaXMuX3BhbmVsQ29uZmlnLmZpZWxkcyA/PyBbXSkuZmluZChjID0+IGMua2V5ID09PSBzLmNvbHVtbktleSk/Lmljb247XG4gICAgICAgIHJldHVybiB7IGtleTogcy5jb2x1bW5LZXkhLCB0aXRsZTogcy50aXRsZSB8fCBodW1hbml6ZUtleShzLmNvbHVtbktleSEpLCBpY29uOiBzLmljb24gPz8gZmllbGRJY29uIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIGZpZWxkTGFiZWwoZmllbGQ6IHsga2V5OiBzdHJpbmc7IGhlYWRlcj86IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gZmllbGQuaGVhZGVyIHx8IGh1bWFuaXplS2V5KGZpZWxkLmtleSk7XG4gIH1cblxuICB1cGRhdGUocGFuZWxDb25maWc6IE9yZ2FuaXplclBhbmVsQ29uZmlnPFRGaWVsZD4pOiB2b2lkIHtcbiAgICB0aGlzLl9wYW5lbENvbmZpZyA9IHBhbmVsQ29uZmlnO1xuICAgIHRoaXMuX3JlZnJlc2hEZWZhdWx0RmllbGRzKCk7XG4gICAgdGhpcy5fcmVmcmVzaER5bmFtaWNTbGljZU1ldGEoKTtcbiAgICBpZiAoIXRoaXMuZ3JvdXBCeS51c2VyQ3VzdG9taXplZCkge1xuICAgICAgdGhpcy5ncm91cEJ5LmFjdGl2ZUtleSA9IHBhbmVsQ29uZmlnLmRlZmF1bHRHcm91cEJ5ID8/IG51bGw7XG4gICAgfVxuICB9XG5cbiAgc2V0QWN0aXZlRmllbGRzKGZpZWxkczogVEZpZWxkW10pOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMgPSBmaWVsZHM7XG4gICAgdGhpcy5maWVsZHMudXNlckN1c3RvbWl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgc2V0VXNlckN1c3RvbWl6ZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkcy51c2VyQ3VzdG9taXplZCA9IHZhbHVlO1xuICB9XG5cbiAgcmVzZXRUb0RlZmF1bHRzKCk6IHZvaWQge1xuICAgIHRoaXMuZmllbGRzLnVzZXJDdXN0b21pemVkID0gZmFsc2U7XG4gICAgdGhpcy5ncm91cEJ5LnVzZXJDdXN0b21pemVkID0gZmFsc2U7XG4gICAgdGhpcy5fcmVmcmVzaERlZmF1bHRGaWVsZHMoKTtcbiAgICB0aGlzLmdyb3VwQnkuYWN0aXZlS2V5ID0gdGhpcy5fcGFuZWxDb25maWcuZGVmYXVsdEdyb3VwQnkgPz8gbnVsbDtcbiAgICB0aGlzLnNsaWNlQnkuYWN0aXZlRHluYW1pY0ZpZWxkcyA9IFtdO1xuICAgIHRoaXMuX3JlZnJlc2hEeW5hbWljU2xpY2VNZXRhKCk7XG4gIH1cblxuICBhZGRGaWVsZChmaWVsZDogVEZpZWxkKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnRmllbGRzID0gdGhpcy5fcGFuZWxDb25maWcuZmllbGRzID8/IFtdO1xuICAgIGNvbnN0IGNvbmZpZ0luZGV4ID0gY29uZmlnRmllbGRzLmZpbmRJbmRleChjID0+IGMua2V5ID09PSBmaWVsZC5rZXkpO1xuICAgIGlmIChjb25maWdJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcyA9IFsuLi50aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMsIGZpZWxkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW5zZXJ0QmVmb3JlID0gdGhpcy5maWVsZHMuYWN0aXZlRmllbGRzLmZpbmRJbmRleChjID0+IHtcbiAgICAgICAgY29uc3QgY2kgPSBjb25maWdGaWVsZHMuZmluZEluZGV4KGNjID0+IGNjLmtleSA9PT0gYy5rZXkpO1xuICAgICAgICByZXR1cm4gY2kgIT09IC0xICYmIGNpID4gY29uZmlnSW5kZXg7XG4gICAgICB9KTtcbiAgICAgIGlmIChpbnNlcnRCZWZvcmUgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcyA9IFsuLi50aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMsIGZpZWxkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvcHkgPSBbLi4udGhpcy5maWVsZHMuYWN0aXZlRmllbGRzXTtcbiAgICAgICAgY29weS5zcGxpY2UoaW5zZXJ0QmVmb3JlLCAwLCBmaWVsZCk7XG4gICAgICAgIHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcyA9IGNvcHk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZmllbGRzLnVzZXJDdXN0b21pemVkID0gdHJ1ZTtcbiAgICB0aGlzLl9ldmVudHMkLm5leHQoeyB0eXBlOiAnZmllbGRzQ2hhbmdlZCcsIGZpZWxkSWRzOiB0aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpIH0pO1xuICB9XG5cbiAgcmVtb3ZlRmllbGQoZmllbGRLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuYWN0aXZlRmllbGRzLmZpbmQoYyA9PiBjLmtleSA9PT0gZmllbGRLZXkpO1xuICAgIGlmICghZmllbGQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWZpZWxkLm9wdGlvbmFsICYmICF0aGlzLmFsbG93RmllbGRSZW1vdmFsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcy5sZW5ndGggPD0gMSkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcyA9IHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcy5maWx0ZXIoYyA9PiBjLmtleSAhPT0gZmllbGRLZXkpO1xuICAgIHRoaXMuZmllbGRzLnVzZXJDdXN0b21pemVkID0gdHJ1ZTtcbiAgICB0aGlzLl9ldmVudHMkLm5leHQoeyB0eXBlOiAnZmllbGRzQ2hhbmdlZCcsIGZpZWxkSWRzOiB0aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdG9nZ2xlRmllbGRWaXNpYmlsaXR5KGZpZWxkOiBURmllbGQsIHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBpc1Zpc2libGUgPSB0aGlzLmlzRmllbGRWaXNpYmxlKGZpZWxkLmtleSk7XG4gICAgaWYgKHZpc2libGUgJiYgIWlzVmlzaWJsZSkge1xuICAgICAgdGhpcy5hZGRGaWVsZChmaWVsZCk7XG4gICAgfSBlbHNlIGlmICghdmlzaWJsZSAmJiBpc1Zpc2libGUpIHtcbiAgICAgIHRoaXMucmVtb3ZlRmllbGQoZmllbGQua2V5KTtcbiAgICB9XG4gIH1cblxuICByZW9yZGVyRmllbGRzKGZyb21LZXk6IHN0cmluZywgdG9LZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMuZmluZEluZGV4KGMgPT4gYy5rZXkgPT09IGZyb21LZXkpO1xuICAgIGNvbnN0IGN1cnIgPSB0aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMuZmluZEluZGV4KGMgPT4gYy5rZXkgPT09IHRvS2V5KTtcbiAgICBpZiAocHJldiA9PT0gLTEgfHwgY3VyciA9PT0gLTEgfHwgcHJldiA9PT0gY3VycikgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHJlb3JkZXJlZCA9IFsuLi50aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHNdO1xuICAgIGNvbnN0IFttb3ZlZF0gPSByZW9yZGVyZWQuc3BsaWNlKHByZXYsIDEpO1xuICAgIHJlb3JkZXJlZC5zcGxpY2UoY3VyciwgMCwgbW92ZWQpO1xuICAgIHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcyA9IHJlb3JkZXJlZDtcbiAgICB0aGlzLmZpZWxkcy51c2VyQ3VzdG9taXplZCA9IHRydWU7XG4gICAgdGhpcy5fZXZlbnRzJC5uZXh0KHsgdHlwZTogJ2ZpZWxkc0NoYW5nZWQnLCBmaWVsZElkczogdGhpcy5maWVsZHMuYWN0aXZlRmllbGRzLm1hcChjID0+IGMua2V5KSB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlzRmllbGRWaXNpYmxlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcy5zb21lKGMgPT4gYy5rZXkgPT09IGtleSk7XG4gIH1cblxuICBzZXRHcm91cEJ5KGtleTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBCeS5hY3RpdmVLZXkgPSBrZXk7XG4gICAgdGhpcy5ncm91cEJ5LnVzZXJDdXN0b21pemVkID0gdHJ1ZTtcbiAgICB0aGlzLl9ldmVudHMkLm5leHQoeyB0eXBlOiAnZ3JvdXBCeUNoYW5nZWQnLCBrZXkgfSk7XG4gIH1cblxuICBvbkR5bmFtaWNTbGljZUtleXNDaGFuZ2Uoa2V5czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBhbGxGaWVsZHMgPSB0aGlzLl9wYW5lbENvbmZpZy5maWVsZHMgPz8gW107XG4gICAgY29uc3Qgc3RhdGljS2V5cyA9IG5ldyBTZXQoXG4gICAgICAodGhpcy5fcGFuZWxDb25maWcuc2xpY2VDb25maWdzID8/IFtdKS5tYXAocyA9PiBzLmNvbHVtbktleSkuZmlsdGVyKChrKTogayBpcyBzdHJpbmcgPT4gISFrKVxuICAgICk7XG4gICAgY29uc3QgZHluYW1pY0tleVNldCA9IG5ldyBTZXQoa2V5cyk7XG4gICAgY29uc3QgZXhpc3RpbmdLZXlzID0gbmV3IFNldChbLi4uc3RhdGljS2V5cywgLi4uZHluYW1pY0tleVNldF0pO1xuXG4gICAgdGhpcy5zbGljZUJ5LmFjdGl2ZUR5bmFtaWNGaWVsZHMgPSBrZXlzXG4gICAgICAubWFwKGsgPT4gYWxsRmllbGRzLmZpbmQoYyA9PiBjLmtleSA9PT0gaykpXG4gICAgICAuZmlsdGVyKChjKTogYyBpcyBURmllbGQgPT4gISFjKTtcblxuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICB0aGlzLnNsaWNlQnkuYXZhaWxhYmxlRm9yRHluYW1pYyA9IGFsbEZpZWxkcy5maWx0ZXIoYyA9PiB7XG4gICAgICBpZiAoYy5zbGljZWFibGUgPT09IGZhbHNlIHx8IGV4aXN0aW5nS2V5cy5oYXMoYy5rZXkpIHx8IHNlZW4uaGFzKGMua2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgc2Vlbi5hZGQoYy5rZXkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb21wdXRlU2xpY2VMYWJlbCgpO1xuICAgIHRoaXMuX2V2ZW50cyQubmV4dCh7IHR5cGU6ICdkeW5hbWljU2xpY2VzQ2hhbmdlZCcsIGtleXMgfSk7XG4gIH1cblxuICBpc0R5bmFtaWNTbGljZUFjdGl2ZShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNsaWNlQnkuYWN0aXZlRHluYW1pY0ZpZWxkcy5zb21lKGMgPT4gYy5rZXkgPT09IGtleSk7XG4gIH1cblxuICB0b09yZ2FuaXplclN0YXRlKCk6IE9yZ2FuaXplclN0YXRlIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VsZWN0ZWRGaWVsZElkczogdGhpcy5maWVsZHMuYWN0aXZlRmllbGRzLm1hcChjID0+IGMua2V5KSxcbiAgICAgIGdyb3VwQnlLZXk6IHRoaXMuZ3JvdXBCeS5hY3RpdmVLZXksXG4gICAgICBkeW5hbWljU2xpY2VLZXlzOiB0aGlzLnNsaWNlQnkuYWN0aXZlRHluYW1pY0ZpZWxkcy5tYXAoYyA9PiBjLmtleSksXG4gICAgfTtcbiAgfVxuICBkZXN0cm95KCk6IHZvaWQgeyB0aGlzLl9ldmVudHMkLmNvbXBsZXRlKCkgfVxuXG4gIHVwZGF0ZUhpZGRlblN0YXRpY0tleXMoa2V5czogU2V0PHN0cmluZz4pOiB2b2lkIHtcbiAgICB0aGlzLl9oaWRkZW5TdGF0aWNLZXlzID0ga2V5cztcbiAgICB0aGlzLl9jb21wdXRlU2xpY2VMYWJlbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVmcmVzaERlZmF1bHRGaWVsZHMoKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdEZpZWxkcyA9ICh0aGlzLl9wYW5lbENvbmZpZy5maWVsZHMgfHwgW10pLmZpbHRlcihjID0+ICFjLm9wdGlvbmFsKTtcbiAgICBpZiAoIXRoaXMuZmllbGRzLnVzZXJDdXN0b21pemVkIHx8IHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZmllbGRzLmFjdGl2ZUZpZWxkcyA9IFsuLi5kZWZhdWx0RmllbGRzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWxsb3dlZEtleXMgPSBuZXcgU2V0KCh0aGlzLl9wYW5lbENvbmZpZy5maWVsZHMgfHwgW10pLm1hcChjID0+IGMua2V5KSk7XG4gICAgICB0aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMgPSB0aGlzLmZpZWxkcy5hY3RpdmVGaWVsZHMuZmlsdGVyKGMgPT4gYWxsb3dlZEtleXMuaGFzKGMua2V5KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVmcmVzaER5bmFtaWNTbGljZU1ldGEoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsRmllbGRzID0gdGhpcy5fcGFuZWxDb25maWcuZmllbGRzID8/IFtdO1xuICAgIGNvbnN0IHN0YXRpY0tleXMgPSBuZXcgU2V0KFxuICAgICAgKHRoaXMuX3BhbmVsQ29uZmlnLnNsaWNlQ29uZmlncyA/PyBbXSkubWFwKHMgPT4gcy5jb2x1bW5LZXkpLmZpbHRlcigoayk6IGsgaXMgc3RyaW5nID0+ICEhaylcbiAgICApO1xuICAgIGNvbnN0IGFjdGl2ZUR5bktleXMgPSBuZXcgU2V0KHRoaXMuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzLm1hcChjID0+IGMua2V5KSk7XG5cbiAgICBjb25zdCBzZWVuMSA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHRoaXMuc2xpY2VCeS5hdmFpbGFibGVGb3JEeW5hbWljID0gYWxsRmllbGRzLmZpbHRlcihjID0+IHtcbiAgICAgIGlmIChjLnNsaWNlYWJsZSA9PT0gZmFsc2UgfHwgc3RhdGljS2V5cy5oYXMoYy5rZXkpIHx8IGFjdGl2ZUR5bktleXMuaGFzKGMua2V5KSB8fCBzZWVuMS5oYXMoYy5rZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWMuaGVhZGVyICYmIGMuc2xpY2VhYmxlICE9PSB0cnVlKSByZXR1cm4gZmFsc2U7XG4gICAgICBzZWVuMS5hZGQoYy5rZXkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzZWVuMiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHRoaXMuc2xpY2VCeS5hbGxEeW5hbWljRmllbGRzID0gYWxsRmllbGRzLmZpbHRlcihjID0+IHtcbiAgICAgIGlmIChjLnNsaWNlYWJsZSA9PT0gZmFsc2UgfHwgc3RhdGljS2V5cy5oYXMoYy5rZXkpIHx8IHNlZW4yLmhhcyhjLmtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghYy5oZWFkZXIgJiYgYy5zbGljZWFibGUgIT09IHRydWUpIHJldHVybiBmYWxzZTtcbiAgICAgIHNlZW4yLmFkZChjLmtleSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICB0aGlzLl9jb21wdXRlU2xpY2VMYWJlbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29tcHV0ZVNsaWNlTGFiZWwoKTogdm9pZCB7XG4gICAgY29uc3QgdmlzaWJsZVN0YXRpY3MgPSAodGhpcy5fcGFuZWxDb25maWcuc2xpY2VDb25maWdzID8/IFtdKS5maWx0ZXIoXG4gICAgICBzID0+ICFzLmNvbHVtbktleSB8fCAhdGhpcy5faGlkZGVuU3RhdGljS2V5cy5oYXMocy5jb2x1bW5LZXkpXG4gICAgKTtcbiAgICBjb25zdCB0b3RhbCA9IHZpc2libGVTdGF0aWNzLmxlbmd0aCArIHRoaXMuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzLmxlbmd0aDtcbiAgICBpZiAodG90YWwgPT09IDApIHsgdGhpcy5zbGljZUJ5LmFjdGl2ZUxhYmVsID0gdGhpcy5fcGFuZWxDb25maWcubm9uZUxhYmVsID8/ICdBdWN1bic7IHJldHVybjsgfVxuICAgIGlmICh0b3RhbCA9PT0gMSkge1xuICAgICAgaWYgKHZpc2libGVTdGF0aWNzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBmaXJzdCA9IHZpc2libGVTdGF0aWNzWzBdO1xuICAgICAgICB0aGlzLnNsaWNlQnkuYWN0aXZlTGFiZWwgPSBmaXJzdD8udGl0bGUgfHwgZmlyc3Q/LmNvbHVtbktleSB8fCAnMSc7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2xpY2VCeS5hY3RpdmVMYWJlbCA9IHRoaXMuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzWzBdPy5oZWFkZXIgfHwgJzEnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNsaWNlQnkuYWN0aXZlTGFiZWwgPSBgJHt0b3RhbH0gYWN0aWZzYDtcbiAgfVxuXG4gIHByaXZhdGUgX3VuaXF1ZUJ5S2V5KGZpZWxkczogVEZpZWxkW10pOiBURmllbGRbXSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHJldHVybiBmaWVsZHMuZmlsdGVyKGMgPT4ge1xuICAgICAgaWYgKHNlZW4uaGFzKGMua2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgc2Vlbi5hZGQoYy5rZXkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWZhY2FkZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZXRlbWUvanF1ZXJ5LW9yZ2FuaXplci9zcmMvbGliL29yZ2FuaXplci1mYWNhZGUvb3JnYW5pemVyLWZhY2FkZS50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2xpY2VDb25maWcgfSBmcm9tICcuLi9zbGljZS1wYW5lbC9zbGljZS1wYW5lbC5tb2RlbCc7XG5pbXBvcnQgeyBPcmdhbml6ZXJDb25maWcgfSBmcm9tICdAb25ldGVtZS9qcXVlcnktY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyRmllbGREZWYge1xuICBrZXk6IHN0cmluZztcbiAgaGVhZGVyPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBvcHRpb25hbD86IGJvb2xlYW47XG4gIGdyb3VwYWJsZT86IGJvb2xlYW47XG4gIHNsaWNlYWJsZT86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclBhbmVsQ29uZmlnPFRGaWVsZCBleHRlbmRzIE9yZ2FuaXplckZpZWxkRGVmID0gT3JnYW5pemVyRmllbGREZWY+IHtcbiAgY29uZmlnPzogT3JnYW5pemVyQ29uZmlnO1xuICBmaWVsZHM6IFRGaWVsZFtdO1xuICBzbGljZUNvbmZpZ3M6IFNsaWNlQ29uZmlnPGFueT5bXTtcbiAgbm9uZUxhYmVsPzogc3RyaW5nO1xuICBkZWZhdWx0R3JvdXBCeT86IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyRmllbGRzU3RhdGU8VEZpZWxkIGV4dGVuZHMgT3JnYW5pemVyRmllbGREZWYgPSBPcmdhbml6ZXJGaWVsZERlZj4ge1xuICBhY3RpdmVGaWVsZHM6IFRGaWVsZFtdO1xuICB1c2VyQ3VzdG9taXplZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJHcm91cEJ5U3RhdGUge1xuICBhY3RpdmVLZXk6IHN0cmluZyB8IG51bGw7XG4gIHVzZXJDdXN0b21pemVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclNsaWNlQnlTdGF0ZTxURmllbGQgZXh0ZW5kcyBPcmdhbml6ZXJGaWVsZERlZiA9IE9yZ2FuaXplckZpZWxkRGVmPiB7XG4gIGFjdGl2ZUR5bmFtaWNGaWVsZHM6IFRGaWVsZFtdO1xuICBhdmFpbGFibGVGb3JEeW5hbWljOiBURmllbGRbXTtcbiAgYWxsRHluYW1pY0ZpZWxkczogVEZpZWxkW107XG4gIGFjdGl2ZUxhYmVsOiBzdHJpbmc7XG59XG4iXX0=