@gravitee/ui-components 3.24.5-renovate-github-markdown-css-5-x-6cd8067 → 3.25.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.
- package/assets/css/github-markdown-css/github-markdown.css +545 -500
- package/assets/i18n/en.json +3 -0
- package/assets/i18n/fr.json +3 -0
- package/assets/icons/design.svg +1 -1
- package/package.json +2 -9
- package/src/atoms/gv-autocomplete.js +132 -156
- package/src/atoms/gv-button.js +73 -248
- package/src/atoms/gv-checkbox.js +45 -103
- package/src/atoms/gv-date-picker-calendar.js +312 -393
- package/src/atoms/gv-date-picker-cell.js +57 -81
- package/src/atoms/gv-date-picker.js +180 -319
- package/src/atoms/gv-file-upload.js +85 -195
- package/src/atoms/gv-icon.js +13 -34
- package/src/atoms/gv-image.js +31 -66
- package/src/atoms/gv-input-message.js +12 -37
- package/src/atoms/gv-input.js +117 -148
- package/src/atoms/gv-link.js +47 -125
- package/src/atoms/gv-message.js +18 -69
- package/src/atoms/gv-metric.js +19 -68
- package/src/atoms/gv-relative-time.js +67 -38
- package/src/atoms/gv-select-native.js +96 -215
- package/src/atoms/gv-select.js +110 -230
- package/src/atoms/gv-spinner.js +5 -26
- package/src/atoms/gv-state.js +25 -66
- package/src/atoms/gv-switch.js +40 -160
- package/src/atoms/gv-tag.js +26 -78
- package/src/atoms/gv-text.js +22 -83
- package/src/charts/gv-chart-bar.js +22 -18
- package/src/charts/gv-chart-gauge.js +28 -31
- package/src/charts/gv-chart-histogram.js +18 -10
- package/src/charts/gv-chart-line.js +70 -59
- package/src/charts/gv-chart-map.js +44 -42
- package/src/charts/gv-chart-pie.js +18 -14
- package/src/index.js +1 -0
- package/src/lib/cron-expression.js +40 -35
- package/src/lib/date.js +10 -1
- package/src/lib/events.js +3 -1
- package/src/lib/http-client-schema-form.js +13 -12
- package/src/lib/http.js +57 -56
- package/src/lib/i18n.js +30 -22
- package/src/lib/item.js +13 -12
- package/src/lib/properties.js +77 -42
- package/src/lib/schema-form.js +4 -5
- package/src/lib/studio.js +13 -60
- package/src/lib/style.js +8 -8
- package/src/lib/text-format.js +14 -7
- package/src/lib/theme.js +8 -5
- package/src/lib/utils.js +17 -18
- package/src/mixins/chart-element.js +31 -54
- package/src/mixins/input-element.js +60 -47
- package/src/mixins/item-resource.js +34 -32
- package/src/mixins/keyboard-element.js +6 -5
- package/src/mixins/update-after-browser.js +4 -1
- package/src/mixins/with-resize-observer.js +23 -13
- package/src/mixins/with-skeleton-attribute.js +54 -48
- package/src/molecules/gv-card-full.js +26 -147
- package/src/molecules/gv-card-list.js +13 -42
- package/src/molecules/gv-card.js +17 -91
- package/src/molecules/gv-category-list.js +6 -17
- package/src/molecules/gv-category.js +23 -103
- package/src/molecules/gv-code.js +81 -143
- package/src/molecules/gv-confirm.js +41 -71
- package/src/molecules/gv-cron-editor.js +143 -389
- package/src/molecules/gv-dropdown-menu.js +14 -46
- package/src/molecules/gv-expandable.js +31 -59
- package/src/molecules/gv-expression-language.js +176 -138
- package/src/molecules/gv-identity-picture.js +42 -65
- package/src/molecules/gv-list.js +42 -134
- package/src/molecules/gv-metrics.js +37 -49
- package/src/molecules/gv-modal.js +28 -95
- package/src/molecules/gv-nav.js +49 -75
- package/src/molecules/gv-option.js +57 -130
- package/src/molecules/gv-plans.js +86 -209
- package/src/molecules/gv-popover.js +57 -177
- package/src/molecules/gv-promote.js +28 -146
- package/src/molecules/gv-rating-list.js +69 -195
- package/src/molecules/gv-rating.js +52 -105
- package/src/molecules/gv-row-expandable.js +5 -11
- package/src/molecules/gv-row.js +21 -147
- package/src/molecules/gv-stats.js +23 -48
- package/src/molecules/gv-stepper.js +43 -187
- package/src/molecules/gv-table.js +199 -309
- package/src/molecules/gv-tree.js +33 -156
- package/src/organisms/gv-documentation.js +45 -128
- package/src/organisms/gv-header.js +37 -195
- package/src/organisms/gv-http-client.js +32 -168
- package/src/organisms/gv-menu.js +37 -158
- package/src/organisms/gv-newsletter-subscription.js +48 -189
- package/src/organisms/gv-pagination.js +49 -77
- package/src/organisms/gv-properties.js +271 -492
- package/src/organisms/gv-resizable-views.js +41 -259
- package/src/organisms/gv-resources.js +168 -275
- package/src/organisms/gv-schema-form-array.js +49 -159
- package/src/organisms/gv-schema-form-control-object.js +59 -73
- package/src/organisms/gv-schema-form-control.js +107 -134
- package/src/organisms/gv-schema-form.js +219 -280
- package/src/organisms/gv-tabs.js +66 -98
- package/src/organisms/gv-user-menu.js +36 -201
- package/src/organisms/gv-vertical-menu.js +20 -61
- package/src/policy-studio/gv-flow-step.js +106 -245
- package/src/policy-studio/gv-flow.js +125 -304
- package/src/policy-studio/gv-policy-studio-menu.js +157 -471
- package/src/policy-studio/gv-policy-studio.js +714 -760
- package/src/styles/empty.js +3 -20
- package/src/styles/input.js +3 -247
- package/src/styles/link.js +3 -16
- package/src/styles/shapes.js +1 -0
- package/src/styles/skeleton.js +3 -37
- package/src/styles/zoom.js +3 -24
- package/src/theme/gv-theme.js +21 -60
- package/CHANGELOG.md +0 -1260
- package/LICENSE.txt +0 -202
- package/README.md +0 -195
- package/src/.eslintrc.js +0 -19
- package/src/theme/definition.json +0 -1762
|
@@ -19,7 +19,6 @@ import { pickedCompletion, startCompletion } from '@codemirror/autocomplete';
|
|
|
19
19
|
import { keymap } from '@codemirror/view';
|
|
20
20
|
import { EditorSelection, Prec } from '@codemirror/state';
|
|
21
21
|
import { get } from 'object-path';
|
|
22
|
-
|
|
23
22
|
/**
|
|
24
23
|
* Expression Language component
|
|
25
24
|
*
|
|
@@ -41,17 +40,21 @@ import { get } from 'object-path';
|
|
|
41
40
|
* @attr {Boolean} [autofocus=false] - true to put the focus on the input
|
|
42
41
|
* @attr {Boolean} [readonly=false] - true if field is readonly mode
|
|
43
42
|
*/
|
|
43
|
+
|
|
44
44
|
export class GvExpressionLanguage extends GvCode {
|
|
45
45
|
static get properties() {
|
|
46
|
-
return {
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
return { ...super.properties,
|
|
47
|
+
grammar: {
|
|
48
|
+
type: Object
|
|
49
|
+
}
|
|
49
50
|
};
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
firstUpdated() {
|
|
53
54
|
super.firstUpdated();
|
|
54
|
-
dispatchCustomEvent(this, 'ready', {
|
|
55
|
+
dispatchCustomEvent(this, 'ready', {
|
|
56
|
+
currentTarget: this
|
|
57
|
+
});
|
|
55
58
|
}
|
|
56
59
|
|
|
57
60
|
getExtensions() {
|
|
@@ -59,29 +62,35 @@ export class GvExpressionLanguage extends GvCode {
|
|
|
59
62
|
}
|
|
60
63
|
|
|
61
64
|
insertELKeymap() {
|
|
62
|
-
return keymap.of([
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
65
|
+
return keymap.of([{
|
|
66
|
+
key: 'Ctrl-Shift-e',
|
|
67
|
+
mac: 'Cmd-Shift-e',
|
|
68
|
+
|
|
69
|
+
run(view) {
|
|
70
|
+
view.dispatch(view.state.changeByRange(range => ({
|
|
71
|
+
changes: [{
|
|
72
|
+
from: range.from,
|
|
73
|
+
to: range.to,
|
|
74
|
+
insert: '{#}'
|
|
75
|
+
}],
|
|
76
|
+
range: EditorSelection.range(range.from + 2, range.from + 2)
|
|
77
|
+
})));
|
|
78
|
+
startCompletion(view);
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
}]);
|
|
78
83
|
}
|
|
79
84
|
|
|
80
85
|
buildMethods(type) {
|
|
81
86
|
const modelType = this.getModelType(type);
|
|
82
|
-
return modelType.methods.map(({
|
|
87
|
+
return modelType.methods.map(({
|
|
88
|
+
name,
|
|
89
|
+
params = [],
|
|
90
|
+
returnType
|
|
91
|
+
}) => {
|
|
83
92
|
const command = `${name}()`;
|
|
84
|
-
const displayParams = params.map(
|
|
93
|
+
const displayParams = params.map(p => `${p.type} ${p.name}`);
|
|
85
94
|
const label = `${name}(${displayParams.join(', ')})`;
|
|
86
95
|
const detail = `return ${returnType}`;
|
|
87
96
|
return {
|
|
@@ -90,32 +99,42 @@ export class GvExpressionLanguage extends GvCode {
|
|
|
90
99
|
apply: (view, completion, from, to) => {
|
|
91
100
|
const anchor = from + name.length + 1;
|
|
92
101
|
view.dispatch({
|
|
93
|
-
changes: {
|
|
94
|
-
|
|
102
|
+
changes: {
|
|
103
|
+
from,
|
|
104
|
+
to,
|
|
105
|
+
insert: completion.command
|
|
106
|
+
},
|
|
107
|
+
selection: {
|
|
108
|
+
anchor
|
|
109
|
+
},
|
|
95
110
|
userEvent: 'input.complete',
|
|
96
|
-
annotations: pickedCompletion.of(view)
|
|
111
|
+
annotations: pickedCompletion.of(view)
|
|
97
112
|
});
|
|
98
113
|
},
|
|
99
114
|
label,
|
|
100
|
-
detail
|
|
115
|
+
detail
|
|
101
116
|
};
|
|
102
117
|
});
|
|
103
118
|
}
|
|
104
119
|
|
|
105
120
|
findBestAutocompleteHandler(completionContext) {
|
|
106
|
-
return this.expressionLanguageCompletionHandlers
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
|
|
121
|
+
return this.expressionLanguageCompletionHandlers.filter(handler => this.grammar != null && handler.supportEL === true || handler.supportEL !== true).map(handler => {
|
|
122
|
+
const match = handler.expr ? completionContext.matchBefore(handler.expr) : true;
|
|
123
|
+
return {
|
|
124
|
+
handler,
|
|
125
|
+
match
|
|
126
|
+
};
|
|
127
|
+
}).find(({
|
|
128
|
+
match,
|
|
129
|
+
expr
|
|
130
|
+
}) => match);
|
|
113
131
|
}
|
|
114
132
|
|
|
115
133
|
getModelType(typeId) {
|
|
116
134
|
if (this.grammar != null) {
|
|
117
135
|
return get(this.grammar, `_types.${typeId}`);
|
|
118
136
|
}
|
|
137
|
+
|
|
119
138
|
return null;
|
|
120
139
|
}
|
|
121
140
|
|
|
@@ -127,12 +146,14 @@ export class GvExpressionLanguage extends GvCode {
|
|
|
127
146
|
if (this.grammar != null) {
|
|
128
147
|
return get(this.grammar, `_enums.${typeId}`);
|
|
129
148
|
}
|
|
149
|
+
|
|
130
150
|
return [''];
|
|
131
151
|
}
|
|
132
152
|
|
|
133
153
|
convertType(type) {
|
|
134
154
|
if (type) {
|
|
135
155
|
const lowerType = type.toLowerCase();
|
|
156
|
+
|
|
136
157
|
if (lowerType === 'string') {
|
|
137
158
|
return 'text';
|
|
138
159
|
} else if (lowerType === 'httpheaders' || lowerType === 'multivaluemap') {
|
|
@@ -143,128 +164,145 @@ export class GvExpressionLanguage extends GvCode {
|
|
|
143
164
|
return 'enum';
|
|
144
165
|
}
|
|
145
166
|
}
|
|
167
|
+
|
|
146
168
|
return 'variable';
|
|
147
169
|
}
|
|
148
170
|
|
|
149
171
|
get expressionLanguageCompletionHandlers() {
|
|
150
|
-
return [
|
|
151
|
-
{
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
172
|
+
return [{
|
|
173
|
+
expr: /{#[a-z]*/,
|
|
174
|
+
supportEL: true,
|
|
175
|
+
|
|
176
|
+
run(completionContext, match) {
|
|
177
|
+
const prefix = match.text.replaceAll('{#', '');
|
|
178
|
+
const from = completionContext.pos - prefix.length;
|
|
179
|
+
const options = Object.keys(this.grammar).filter(command => !command.startsWith('_') && command.startsWith(prefix)).map(command => {
|
|
180
|
+
return {
|
|
181
|
+
type: 'variable',
|
|
182
|
+
command,
|
|
183
|
+
apply: command,
|
|
184
|
+
label: command
|
|
185
|
+
};
|
|
186
|
+
});
|
|
187
|
+
return {
|
|
188
|
+
from,
|
|
189
|
+
options
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
}, {
|
|
194
|
+
expr: /{#[a-z]*.[a-zA-Z]*/,
|
|
195
|
+
supportEL: true,
|
|
196
|
+
|
|
197
|
+
run(completionContext, match) {
|
|
198
|
+
const tokens = match.text.split('.');
|
|
199
|
+
const key = tokens[0].replaceAll('{#', '');
|
|
200
|
+
const prefix = tokens[1];
|
|
201
|
+
let candidate = this.grammar[key][prefix];
|
|
202
|
+
let options = [];
|
|
203
|
+
let from = completionContext.pos;
|
|
204
|
+
|
|
205
|
+
if (candidate) {
|
|
206
|
+
if (this.isMap(candidate._type)) {
|
|
207
|
+
options = this.getEnum(candidate._type).map(value => {
|
|
208
|
+
const type = this.convertType(candidate._type);
|
|
209
|
+
const command = `['${value}'][0]`;
|
|
160
210
|
return {
|
|
161
|
-
type
|
|
211
|
+
type,
|
|
162
212
|
command,
|
|
163
213
|
apply: command,
|
|
164
|
-
label:
|
|
214
|
+
label: value
|
|
215
|
+
};
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
} else {
|
|
219
|
+
from -= prefix.length;
|
|
220
|
+
candidate = this.grammar[key];
|
|
221
|
+
|
|
222
|
+
if (candidate._type) {
|
|
223
|
+
options = this.buildMethods(candidate._type);
|
|
224
|
+
} else {
|
|
225
|
+
options = Object.keys(candidate).filter(command => !command.startsWith('_') && command.startsWith(prefix)).map(command => ({
|
|
226
|
+
type: this.convertType(candidate[command]._type),
|
|
227
|
+
command,
|
|
228
|
+
apply: command,
|
|
229
|
+
label: command
|
|
230
|
+
}));
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
return {
|
|
235
|
+
from,
|
|
236
|
+
options
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
}, {
|
|
241
|
+
expr: /{#[a-z]*.[a-zA-Z]*.[a-zA-Z]*/,
|
|
242
|
+
supportEL: true,
|
|
243
|
+
|
|
244
|
+
run(completionContext, match) {
|
|
245
|
+
const tokens = match.text.split('.');
|
|
246
|
+
const key = tokens[0].replaceAll('{#', '');
|
|
247
|
+
const word = tokens[1];
|
|
248
|
+
const prefix = tokens[2];
|
|
249
|
+
const candidate = this.grammar[key][word];
|
|
250
|
+
let options = [];
|
|
251
|
+
let from = completionContext.pos;
|
|
252
|
+
|
|
253
|
+
if (candidate) {
|
|
254
|
+
if (this.isMap(candidate._type)) {
|
|
255
|
+
options = this.getEnum(candidate._type).filter(command => !command.startsWith('_') && command.startsWith(prefix)).map(label => {
|
|
256
|
+
const type = this.convertType(candidate._type);
|
|
257
|
+
return {
|
|
258
|
+
type,
|
|
259
|
+
command: `['${label}'][0]`,
|
|
260
|
+
|
|
261
|
+
apply(view, completion, _from, to) {
|
|
262
|
+
from = _from - prefix.length - 1;
|
|
263
|
+
view.dispatch({
|
|
264
|
+
changes: {
|
|
265
|
+
from,
|
|
266
|
+
to,
|
|
267
|
+
insert: completion.command
|
|
268
|
+
},
|
|
269
|
+
selection: {
|
|
270
|
+
anchor: from + completion.command.length
|
|
271
|
+
},
|
|
272
|
+
userEvent: 'input.complete',
|
|
273
|
+
annotations: pickedCompletion.of(view)
|
|
274
|
+
});
|
|
275
|
+
},
|
|
276
|
+
|
|
277
|
+
label
|
|
165
278
|
};
|
|
166
279
|
});
|
|
167
|
-
return { from, options };
|
|
168
|
-
},
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
expr: /{#[a-z]*.[a-zA-Z]*/,
|
|
172
|
-
supportEL: true,
|
|
173
|
-
run(completionContext, match) {
|
|
174
|
-
const tokens = match.text.split('.');
|
|
175
|
-
const key = tokens[0].replaceAll('{#', '');
|
|
176
|
-
const prefix = tokens[1];
|
|
177
|
-
let candidate = this.grammar[key][prefix];
|
|
178
|
-
let options = [];
|
|
179
|
-
let from = completionContext.pos;
|
|
180
|
-
if (candidate) {
|
|
181
|
-
if (this.isMap(candidate._type)) {
|
|
182
|
-
options = this.getEnum(candidate._type).map((value) => {
|
|
183
|
-
const type = this.convertType(candidate._type);
|
|
184
|
-
const command = `['${value}'][0]`;
|
|
185
|
-
return {
|
|
186
|
-
type,
|
|
187
|
-
command,
|
|
188
|
-
apply: command,
|
|
189
|
-
label: value,
|
|
190
|
-
};
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
280
|
} else {
|
|
194
|
-
from -= prefix.length;
|
|
195
|
-
candidate = this.grammar[key];
|
|
196
281
|
if (candidate._type) {
|
|
197
282
|
options = this.buildMethods(candidate._type);
|
|
198
283
|
} else {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
284
|
+
from -= prefix.length;
|
|
285
|
+
options = Object.keys(candidate).filter(command => command.startsWith(prefix)).map(command => {
|
|
286
|
+
return {
|
|
202
287
|
type: this.convertType(candidate[command]._type),
|
|
203
288
|
command,
|
|
204
289
|
apply: command,
|
|
205
|
-
label: command
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
}
|
|
209
|
-
return { from, options };
|
|
210
|
-
},
|
|
211
|
-
},
|
|
212
|
-
{
|
|
213
|
-
expr: /{#[a-z]*.[a-zA-Z]*.[a-zA-Z]*/,
|
|
214
|
-
supportEL: true,
|
|
215
|
-
run(completionContext, match) {
|
|
216
|
-
const tokens = match.text.split('.');
|
|
217
|
-
const key = tokens[0].replaceAll('{#', '');
|
|
218
|
-
const word = tokens[1];
|
|
219
|
-
const prefix = tokens[2];
|
|
220
|
-
const candidate = this.grammar[key][word];
|
|
221
|
-
let options = [];
|
|
222
|
-
let from = completionContext.pos;
|
|
223
|
-
if (candidate) {
|
|
224
|
-
if (this.isMap(candidate._type)) {
|
|
225
|
-
options = this.getEnum(candidate._type)
|
|
226
|
-
.filter((command) => !command.startsWith('_') && command.startsWith(prefix))
|
|
227
|
-
.map((label) => {
|
|
228
|
-
const type = this.convertType(candidate._type);
|
|
229
|
-
return {
|
|
230
|
-
type,
|
|
231
|
-
command: `['${label}'][0]`,
|
|
232
|
-
apply(view, completion, _from, to) {
|
|
233
|
-
from = _from - prefix.length - 1;
|
|
234
|
-
view.dispatch({
|
|
235
|
-
changes: { from, to, insert: completion.command },
|
|
236
|
-
selection: { anchor: from + completion.command.length },
|
|
237
|
-
userEvent: 'input.complete',
|
|
238
|
-
annotations: pickedCompletion.of(view),
|
|
239
|
-
});
|
|
240
|
-
},
|
|
241
|
-
label,
|
|
242
|
-
};
|
|
243
|
-
});
|
|
244
|
-
} else {
|
|
245
|
-
if (candidate._type) {
|
|
246
|
-
options = this.buildMethods(candidate._type);
|
|
247
|
-
} else {
|
|
248
|
-
from -= prefix.length;
|
|
249
|
-
options = Object.keys(candidate)
|
|
250
|
-
.filter((command) => command.startsWith(prefix))
|
|
251
|
-
.map((command) => {
|
|
252
|
-
return {
|
|
253
|
-
type: this.convertType(candidate[command]._type),
|
|
254
|
-
command,
|
|
255
|
-
apply: command,
|
|
256
|
-
label: command,
|
|
257
|
-
};
|
|
258
|
-
});
|
|
259
|
-
}
|
|
290
|
+
label: command
|
|
291
|
+
};
|
|
292
|
+
});
|
|
260
293
|
}
|
|
261
294
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return {
|
|
298
|
+
from,
|
|
299
|
+
options
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
}, this.defaultCompletionHandler];
|
|
267
304
|
}
|
|
268
|
-
}
|
|
269
305
|
|
|
306
|
+
}
|
|
270
307
|
window.customElements.define('gv-expression-language', GvExpressionLanguage);
|
|
308
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1leHByZXNzaW9uLWxhbmd1YWdlLmpzIl0sIm5hbWVzIjpbIkd2Q29kZSIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJwaWNrZWRDb21wbGV0aW9uIiwic3RhcnRDb21wbGV0aW9uIiwia2V5bWFwIiwiRWRpdG9yU2VsZWN0aW9uIiwiUHJlYyIsImdldCIsIkd2RXhwcmVzc2lvbkxhbmd1YWdlIiwicHJvcGVydGllcyIsImdyYW1tYXIiLCJ0eXBlIiwiT2JqZWN0IiwiZmlyc3RVcGRhdGVkIiwiY3VycmVudFRhcmdldCIsImdldEV4dGVuc2lvbnMiLCJoaWdoIiwiaW5zZXJ0RUxLZXltYXAiLCJvZiIsImtleSIsIm1hYyIsInJ1biIsInZpZXciLCJkaXNwYXRjaCIsInN0YXRlIiwiY2hhbmdlQnlSYW5nZSIsInJhbmdlIiwiY2hhbmdlcyIsImZyb20iLCJ0byIsImluc2VydCIsImJ1aWxkTWV0aG9kcyIsIm1vZGVsVHlwZSIsImdldE1vZGVsVHlwZSIsIm1ldGhvZHMiLCJtYXAiLCJuYW1lIiwicGFyYW1zIiwicmV0dXJuVHlwZSIsImNvbW1hbmQiLCJkaXNwbGF5UGFyYW1zIiwicCIsImxhYmVsIiwiam9pbiIsImRldGFpbCIsImFwcGx5IiwiY29tcGxldGlvbiIsImFuY2hvciIsImxlbmd0aCIsInNlbGVjdGlvbiIsInVzZXJFdmVudCIsImFubm90YXRpb25zIiwiZmluZEJlc3RBdXRvY29tcGxldGVIYW5kbGVyIiwiY29tcGxldGlvbkNvbnRleHQiLCJleHByZXNzaW9uTGFuZ3VhZ2VDb21wbGV0aW9uSGFuZGxlcnMiLCJmaWx0ZXIiLCJoYW5kbGVyIiwic3VwcG9ydEVMIiwibWF0Y2giLCJleHByIiwibWF0Y2hCZWZvcmUiLCJmaW5kIiwidHlwZUlkIiwiaXNNYXAiLCJpbmNsdWRlcyIsImdldEVudW0iLCJjb252ZXJ0VHlwZSIsImxvd2VyVHlwZSIsInRvTG93ZXJDYXNlIiwicHJlZml4IiwidGV4dCIsInJlcGxhY2VBbGwiLCJwb3MiLCJvcHRpb25zIiwia2V5cyIsInN0YXJ0c1dpdGgiLCJ0b2tlbnMiLCJzcGxpdCIsImNhbmRpZGF0ZSIsIl90eXBlIiwidmFsdWUiLCJ3b3JkIiwiX2Zyb20iLCJkZWZhdWx0Q29tcGxldGlvbkhhbmRsZXIiLCJ3aW5kb3ciLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsTUFBVCxRQUF1QixzQkFBdkI7QUFDQSxTQUFTQyxtQkFBVCxRQUFvQyxlQUFwQztBQUNBLFNBQVNDLGdCQUFULEVBQTJCQyxlQUEzQixRQUFrRCwwQkFBbEQ7QUFDQSxTQUFTQyxNQUFULFFBQXVCLGtCQUF2QjtBQUNBLFNBQVNDLGVBQVQsRUFBMEJDLElBQTFCLFFBQXNDLG1CQUF0QztBQUNBLFNBQVNDLEdBQVQsUUFBb0IsYUFBcEI7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsT0FBTyxNQUFNQyxvQkFBTixTQUFtQ1IsTUFBbkMsQ0FBMEM7QUFDMUIsYUFBVlMsVUFBVSxHQUFHO0FBQ3RCLFdBQU8sRUFDTCxHQUFHLE1BQU1BLFVBREo7QUFFTEMsTUFBQUEsT0FBTyxFQUFFO0FBQUVDLFFBQUFBLElBQUksRUFBRUM7QUFBUjtBQUZKLEtBQVA7QUFJRDs7QUFFREMsRUFBQUEsWUFBWSxHQUFHO0FBQ2IsVUFBTUEsWUFBTjtBQUNBWixJQUFBQSxtQkFBbUIsQ0FBQyxJQUFELEVBQU8sT0FBUCxFQUFnQjtBQUFFYSxNQUFBQSxhQUFhLEVBQUU7QUFBakIsS0FBaEIsQ0FBbkI7QUFDRDs7QUFFREMsRUFBQUEsYUFBYSxHQUFHO0FBQ2QsV0FBTyxDQUFDVCxJQUFJLENBQUNVLElBQUwsQ0FBVSxLQUFLQyxjQUFMLEVBQVYsQ0FBRCxDQUFQO0FBQ0Q7O0FBRURBLEVBQUFBLGNBQWMsR0FBRztBQUNmLFdBQU9iLE1BQU0sQ0FBQ2MsRUFBUCxDQUFVLENBQ2Y7QUFDRUMsTUFBQUEsR0FBRyxFQUFFLGNBRFA7QUFFRUMsTUFBQUEsR0FBRyxFQUFFLGFBRlA7O0FBR0VDLE1BQUFBLEdBQUcsQ0FBQ0MsSUFBRCxFQUFPO0FBQ1JBLFFBQUFBLElBQUksQ0FBQ0MsUUFBTCxDQUNFRCxJQUFJLENBQUNFLEtBQUwsQ0FBV0MsYUFBWCxDQUEwQkMsS0FBRCxLQUFZO0FBQ25DQyxVQUFBQSxPQUFPLEVBQUUsQ0FBQztBQUFFQyxZQUFBQSxJQUFJLEVBQUVGLEtBQUssQ0FBQ0UsSUFBZDtBQUFvQkMsWUFBQUEsRUFBRSxFQUFFSCxLQUFLLENBQUNHLEVBQTlCO0FBQWtDQyxZQUFBQSxNQUFNLEVBQUU7QUFBMUMsV0FBRCxDQUQwQjtBQUVuQ0osVUFBQUEsS0FBSyxFQUFFckIsZUFBZSxDQUFDcUIsS0FBaEIsQ0FBc0JBLEtBQUssQ0FBQ0UsSUFBTixHQUFhLENBQW5DLEVBQXNDRixLQUFLLENBQUNFLElBQU4sR0FBYSxDQUFuRDtBQUY0QixTQUFaLENBQXpCLENBREY7QUFNQXpCLFFBQUFBLGVBQWUsQ0FBQ21CLElBQUQsQ0FBZjtBQUNBLGVBQU8sSUFBUDtBQUNEOztBQVpILEtBRGUsQ0FBVixDQUFQO0FBZ0JEOztBQUVEUyxFQUFBQSxZQUFZLENBQUNwQixJQUFELEVBQU87QUFDakIsVUFBTXFCLFNBQVMsR0FBRyxLQUFLQyxZQUFMLENBQWtCdEIsSUFBbEIsQ0FBbEI7QUFDQSxXQUFPcUIsU0FBUyxDQUFDRSxPQUFWLENBQWtCQyxHQUFsQixDQUFzQixDQUFDO0FBQUVDLE1BQUFBLElBQUY7QUFBUUMsTUFBQUEsTUFBTSxHQUFHLEVBQWpCO0FBQXFCQyxNQUFBQTtBQUFyQixLQUFELEtBQXVDO0FBQ2xFLFlBQU1DLE9BQU8sR0FBSSxHQUFFSCxJQUFLLElBQXhCO0FBQ0EsWUFBTUksYUFBYSxHQUFHSCxNQUFNLENBQUNGLEdBQVAsQ0FBWU0sQ0FBRCxJQUFRLEdBQUVBLENBQUMsQ0FBQzlCLElBQUssSUFBRzhCLENBQUMsQ0FBQ0wsSUFBSyxFQUF0QyxDQUF0QjtBQUNBLFlBQU1NLEtBQUssR0FBSSxHQUFFTixJQUFLLElBQUdJLGFBQWEsQ0FBQ0csSUFBZCxDQUFtQixJQUFuQixDQUF5QixHQUFsRDtBQUNBLFlBQU1DLE1BQU0sR0FBSSxVQUFTTixVQUFXLEVBQXBDO0FBQ0EsYUFBTztBQUNMM0IsUUFBQUEsSUFBSSxFQUFFLFFBREQ7QUFFTDRCLFFBQUFBLE9BRks7QUFHTE0sUUFBQUEsS0FBSyxFQUFFLENBQUN2QixJQUFELEVBQU93QixVQUFQLEVBQW1CbEIsSUFBbkIsRUFBeUJDLEVBQXpCLEtBQWdDO0FBQ3JDLGdCQUFNa0IsTUFBTSxHQUFHbkIsSUFBSSxHQUFHUSxJQUFJLENBQUNZLE1BQVosR0FBcUIsQ0FBcEM7QUFDQTFCLFVBQUFBLElBQUksQ0FBQ0MsUUFBTCxDQUFjO0FBQ1pJLFlBQUFBLE9BQU8sRUFBRTtBQUFFQyxjQUFBQSxJQUFGO0FBQVFDLGNBQUFBLEVBQVI7QUFBWUMsY0FBQUEsTUFBTSxFQUFFZ0IsVUFBVSxDQUFDUDtBQUEvQixhQURHO0FBRVpVLFlBQUFBLFNBQVMsRUFBRTtBQUFFRixjQUFBQTtBQUFGLGFBRkM7QUFHWkcsWUFBQUEsU0FBUyxFQUFFLGdCQUhDO0FBSVpDLFlBQUFBLFdBQVcsRUFBRWpELGdCQUFnQixDQUFDZ0IsRUFBakIsQ0FBb0JJLElBQXBCO0FBSkQsV0FBZDtBQU1ELFNBWEk7QUFZTG9CLFFBQUFBLEtBWks7QUFhTEUsUUFBQUE7QUFiSyxPQUFQO0FBZUQsS0FwQk0sQ0FBUDtBQXFCRDs7QUFFRFEsRUFBQUEsMkJBQTJCLENBQUNDLGlCQUFELEVBQW9CO0FBQzdDLFdBQU8sS0FBS0Msb0NBQUwsQ0FDSkMsTUFESSxDQUNJQyxPQUFELElBQWMsS0FBSzlDLE9BQUwsSUFBZ0IsSUFBaEIsSUFBd0I4QyxPQUFPLENBQUNDLFNBQVIsS0FBc0IsSUFBL0MsSUFBd0RELE9BQU8sQ0FBQ0MsU0FBUixLQUFzQixJQUQ5RixFQUVKdEIsR0FGSSxDQUVDcUIsT0FBRCxJQUFhO0FBQ2hCLFlBQU1FLEtBQUssR0FBR0YsT0FBTyxDQUFDRyxJQUFSLEdBQWVOLGlCQUFpQixDQUFDTyxXQUFsQixDQUE4QkosT0FBTyxDQUFDRyxJQUF0QyxDQUFmLEdBQTZELElBQTNFO0FBQ0EsYUFBTztBQUFFSCxRQUFBQSxPQUFGO0FBQVdFLFFBQUFBO0FBQVgsT0FBUDtBQUNELEtBTEksRUFNSkcsSUFOSSxDQU1DLENBQUM7QUFBRUgsTUFBQUEsS0FBRjtBQUFTQyxNQUFBQTtBQUFULEtBQUQsS0FBcUJELEtBTnRCLENBQVA7QUFPRDs7QUFFRHpCLEVBQUFBLFlBQVksQ0FBQzZCLE1BQUQsRUFBUztBQUNuQixRQUFJLEtBQUtwRCxPQUFMLElBQWdCLElBQXBCLEVBQTBCO0FBQ3hCLGFBQU9ILEdBQUcsQ0FBQyxLQUFLRyxPQUFOLEVBQWdCLFVBQVNvRCxNQUFPLEVBQWhDLENBQVY7QUFDRDs7QUFDRCxXQUFPLElBQVA7QUFDRDs7QUFFREMsRUFBQUEsS0FBSyxDQUFDRCxNQUFELEVBQVM7QUFDWixXQUFPLENBQUMsS0FBRCxFQUFRLGFBQVIsRUFBdUIsZUFBdkIsRUFBd0NFLFFBQXhDLENBQWlERixNQUFqRCxDQUFQO0FBQ0Q7O0FBRURHLEVBQUFBLE9BQU8sQ0FBQ0gsTUFBRCxFQUFTO0FBQ2QsUUFBSSxLQUFLcEQsT0FBTCxJQUFnQixJQUFwQixFQUEwQjtBQUN4QixhQUFPSCxHQUFHLENBQUMsS0FBS0csT0FBTixFQUFnQixVQUFTb0QsTUFBTyxFQUFoQyxDQUFWO0FBQ0Q7O0FBQ0QsV0FBTyxDQUFDLEVBQUQsQ0FBUDtBQUNEOztBQUVESSxFQUFBQSxXQUFXLENBQUN2RCxJQUFELEVBQU87QUFDaEIsUUFBSUEsSUFBSixFQUFVO0FBQ1IsWUFBTXdELFNBQVMsR0FBR3hELElBQUksQ0FBQ3lELFdBQUwsRUFBbEI7O0FBQ0EsVUFBSUQsU0FBUyxLQUFLLFFBQWxCLEVBQTRCO0FBQzFCLGVBQU8sTUFBUDtBQUNELE9BRkQsTUFFTyxJQUFJQSxTQUFTLEtBQUssYUFBZCxJQUErQkEsU0FBUyxLQUFLLGVBQWpELEVBQWtFO0FBQ3ZFLGVBQU8sTUFBUDtBQUNELE9BRk0sTUFFQSxJQUFJQSxTQUFTLEtBQUssS0FBZCxJQUF1QkEsU0FBUyxLQUFLLE1BQXpDLEVBQWlEO0FBQ3RELGVBQU8sVUFBUDtBQUNELE9BRk0sTUFFQSxJQUFJQSxTQUFTLENBQUNILFFBQVYsQ0FBbUIsSUFBbkIsQ0FBSixFQUE4QjtBQUNuQyxlQUFPLE1BQVA7QUFDRDtBQUNGOztBQUNELFdBQU8sVUFBUDtBQUNEOztBQUV1QyxNQUFwQ1Ysb0NBQW9DLEdBQUc7QUFDekMsV0FBTyxDQUNMO0FBQ0VLLE1BQUFBLElBQUksRUFBRSxVQURSO0FBRUVGLE1BQUFBLFNBQVMsRUFBRSxJQUZiOztBQUdFcEMsTUFBQUEsR0FBRyxDQUFDZ0MsaUJBQUQsRUFBb0JLLEtBQXBCLEVBQTJCO0FBQzVCLGNBQU1XLE1BQU0sR0FBR1gsS0FBSyxDQUFDWSxJQUFOLENBQVdDLFVBQVgsQ0FBc0IsSUFBdEIsRUFBNEIsRUFBNUIsQ0FBZjtBQUNBLGNBQU0zQyxJQUFJLEdBQUd5QixpQkFBaUIsQ0FBQ21CLEdBQWxCLEdBQXdCSCxNQUFNLENBQUNyQixNQUE1QztBQUNBLGNBQU15QixPQUFPLEdBQUc3RCxNQUFNLENBQUM4RCxJQUFQLENBQVksS0FBS2hFLE9BQWpCLEVBQ2I2QyxNQURhLENBQ0xoQixPQUFELElBQWEsQ0FBQ0EsT0FBTyxDQUFDb0MsVUFBUixDQUFtQixHQUFuQixDQUFELElBQTRCcEMsT0FBTyxDQUFDb0MsVUFBUixDQUFtQk4sTUFBbkIsQ0FEbkMsRUFFYmxDLEdBRmEsQ0FFUkksT0FBRCxJQUFhO0FBQ2hCLGlCQUFPO0FBQ0w1QixZQUFBQSxJQUFJLEVBQUUsVUFERDtBQUVMNEIsWUFBQUEsT0FGSztBQUdMTSxZQUFBQSxLQUFLLEVBQUVOLE9BSEY7QUFJTEcsWUFBQUEsS0FBSyxFQUFFSDtBQUpGLFdBQVA7QUFNRCxTQVRhLENBQWhCO0FBVUEsZUFBTztBQUFFWCxVQUFBQSxJQUFGO0FBQVE2QyxVQUFBQTtBQUFSLFNBQVA7QUFDRDs7QUFqQkgsS0FESyxFQW9CTDtBQUNFZCxNQUFBQSxJQUFJLEVBQUUsb0JBRFI7QUFFRUYsTUFBQUEsU0FBUyxFQUFFLElBRmI7O0FBR0VwQyxNQUFBQSxHQUFHLENBQUNnQyxpQkFBRCxFQUFvQkssS0FBcEIsRUFBMkI7QUFDNUIsY0FBTWtCLE1BQU0sR0FBR2xCLEtBQUssQ0FBQ1ksSUFBTixDQUFXTyxLQUFYLENBQWlCLEdBQWpCLENBQWY7QUFDQSxjQUFNMUQsR0FBRyxHQUFHeUQsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVTCxVQUFWLENBQXFCLElBQXJCLEVBQTJCLEVBQTNCLENBQVo7QUFDQSxjQUFNRixNQUFNLEdBQUdPLE1BQU0sQ0FBQyxDQUFELENBQXJCO0FBQ0EsWUFBSUUsU0FBUyxHQUFHLEtBQUtwRSxPQUFMLENBQWFTLEdBQWIsRUFBa0JrRCxNQUFsQixDQUFoQjtBQUNBLFlBQUlJLE9BQU8sR0FBRyxFQUFkO0FBQ0EsWUFBSTdDLElBQUksR0FBR3lCLGlCQUFpQixDQUFDbUIsR0FBN0I7O0FBQ0EsWUFBSU0sU0FBSixFQUFlO0FBQ2IsY0FBSSxLQUFLZixLQUFMLENBQVdlLFNBQVMsQ0FBQ0MsS0FBckIsQ0FBSixFQUFpQztBQUMvQk4sWUFBQUEsT0FBTyxHQUFHLEtBQUtSLE9BQUwsQ0FBYWEsU0FBUyxDQUFDQyxLQUF2QixFQUE4QjVDLEdBQTlCLENBQW1DNkMsS0FBRCxJQUFXO0FBQ3JELG9CQUFNckUsSUFBSSxHQUFHLEtBQUt1RCxXQUFMLENBQWlCWSxTQUFTLENBQUNDLEtBQTNCLENBQWI7QUFDQSxvQkFBTXhDLE9BQU8sR0FBSSxLQUFJeUMsS0FBTSxPQUEzQjtBQUNBLHFCQUFPO0FBQ0xyRSxnQkFBQUEsSUFESztBQUVMNEIsZ0JBQUFBLE9BRks7QUFHTE0sZ0JBQUFBLEtBQUssRUFBRU4sT0FIRjtBQUlMRyxnQkFBQUEsS0FBSyxFQUFFc0M7QUFKRixlQUFQO0FBTUQsYUFUUyxDQUFWO0FBVUQ7QUFDRixTQWJELE1BYU87QUFDTHBELFVBQUFBLElBQUksSUFBSXlDLE1BQU0sQ0FBQ3JCLE1BQWY7QUFDQThCLFVBQUFBLFNBQVMsR0FBRyxLQUFLcEUsT0FBTCxDQUFhUyxHQUFiLENBQVo7O0FBQ0EsY0FBSTJELFNBQVMsQ0FBQ0MsS0FBZCxFQUFxQjtBQUNuQk4sWUFBQUEsT0FBTyxHQUFHLEtBQUsxQyxZQUFMLENBQWtCK0MsU0FBUyxDQUFDQyxLQUE1QixDQUFWO0FBQ0QsV0FGRCxNQUVPO0FBQ0xOLFlBQUFBLE9BQU8sR0FBRzdELE1BQU0sQ0FBQzhELElBQVAsQ0FBWUksU0FBWixFQUNQdkIsTUFETyxDQUNDaEIsT0FBRCxJQUFhLENBQUNBLE9BQU8sQ0FBQ29DLFVBQVIsQ0FBbUIsR0FBbkIsQ0FBRCxJQUE0QnBDLE9BQU8sQ0FBQ29DLFVBQVIsQ0FBbUJOLE1BQW5CLENBRHpDLEVBRVBsQyxHQUZPLENBRUZJLE9BQUQsS0FBYztBQUNqQjVCLGNBQUFBLElBQUksRUFBRSxLQUFLdUQsV0FBTCxDQUFpQlksU0FBUyxDQUFDdkMsT0FBRCxDQUFULENBQW1Cd0MsS0FBcEMsQ0FEVztBQUVqQnhDLGNBQUFBLE9BRmlCO0FBR2pCTSxjQUFBQSxLQUFLLEVBQUVOLE9BSFU7QUFJakJHLGNBQUFBLEtBQUssRUFBRUg7QUFKVSxhQUFkLENBRkcsQ0FBVjtBQVFEO0FBQ0Y7O0FBQ0QsZUFBTztBQUFFWCxVQUFBQSxJQUFGO0FBQVE2QyxVQUFBQTtBQUFSLFNBQVA7QUFDRDs7QUF4Q0gsS0FwQkssRUE4REw7QUFDRWQsTUFBQUEsSUFBSSxFQUFFLDhCQURSO0FBRUVGLE1BQUFBLFNBQVMsRUFBRSxJQUZiOztBQUdFcEMsTUFBQUEsR0FBRyxDQUFDZ0MsaUJBQUQsRUFBb0JLLEtBQXBCLEVBQTJCO0FBQzVCLGNBQU1rQixNQUFNLEdBQUdsQixLQUFLLENBQUNZLElBQU4sQ0FBV08sS0FBWCxDQUFpQixHQUFqQixDQUFmO0FBQ0EsY0FBTTFELEdBQUcsR0FBR3lELE1BQU0sQ0FBQyxDQUFELENBQU4sQ0FBVUwsVUFBVixDQUFxQixJQUFyQixFQUEyQixFQUEzQixDQUFaO0FBQ0EsY0FBTVUsSUFBSSxHQUFHTCxNQUFNLENBQUMsQ0FBRCxDQUFuQjtBQUNBLGNBQU1QLE1BQU0sR0FBR08sTUFBTSxDQUFDLENBQUQsQ0FBckI7QUFDQSxjQUFNRSxTQUFTLEdBQUcsS0FBS3BFLE9BQUwsQ0FBYVMsR0FBYixFQUFrQjhELElBQWxCLENBQWxCO0FBQ0EsWUFBSVIsT0FBTyxHQUFHLEVBQWQ7QUFDQSxZQUFJN0MsSUFBSSxHQUFHeUIsaUJBQWlCLENBQUNtQixHQUE3Qjs7QUFDQSxZQUFJTSxTQUFKLEVBQWU7QUFDYixjQUFJLEtBQUtmLEtBQUwsQ0FBV2UsU0FBUyxDQUFDQyxLQUFyQixDQUFKLEVBQWlDO0FBQy9CTixZQUFBQSxPQUFPLEdBQUcsS0FBS1IsT0FBTCxDQUFhYSxTQUFTLENBQUNDLEtBQXZCLEVBQ1B4QixNQURPLENBQ0NoQixPQUFELElBQWEsQ0FBQ0EsT0FBTyxDQUFDb0MsVUFBUixDQUFtQixHQUFuQixDQUFELElBQTRCcEMsT0FBTyxDQUFDb0MsVUFBUixDQUFtQk4sTUFBbkIsQ0FEekMsRUFFUGxDLEdBRk8sQ0FFRk8sS0FBRCxJQUFXO0FBQ2Qsb0JBQU0vQixJQUFJLEdBQUcsS0FBS3VELFdBQUwsQ0FBaUJZLFNBQVMsQ0FBQ0MsS0FBM0IsQ0FBYjtBQUNBLHFCQUFPO0FBQ0xwRSxnQkFBQUEsSUFESztBQUVMNEIsZ0JBQUFBLE9BQU8sRUFBRyxLQUFJRyxLQUFNLE9BRmY7O0FBR0xHLGdCQUFBQSxLQUFLLENBQUN2QixJQUFELEVBQU93QixVQUFQLEVBQW1Cb0MsS0FBbkIsRUFBMEJyRCxFQUExQixFQUE4QjtBQUNqQ0Qsa0JBQUFBLElBQUksR0FBR3NELEtBQUssR0FBR2IsTUFBTSxDQUFDckIsTUFBZixHQUF3QixDQUEvQjtBQUNBMUIsa0JBQUFBLElBQUksQ0FBQ0MsUUFBTCxDQUFjO0FBQ1pJLG9CQUFBQSxPQUFPLEVBQUU7QUFBRUMsc0JBQUFBLElBQUY7QUFBUUMsc0JBQUFBLEVBQVI7QUFBWUMsc0JBQUFBLE1BQU0sRUFBRWdCLFVBQVUsQ0FBQ1A7QUFBL0IscUJBREc7QUFFWlUsb0JBQUFBLFNBQVMsRUFBRTtBQUFFRixzQkFBQUEsTUFBTSxFQUFFbkIsSUFBSSxHQUFHa0IsVUFBVSxDQUFDUCxPQUFYLENBQW1CUztBQUFwQyxxQkFGQztBQUdaRSxvQkFBQUEsU0FBUyxFQUFFLGdCQUhDO0FBSVpDLG9CQUFBQSxXQUFXLEVBQUVqRCxnQkFBZ0IsQ0FBQ2dCLEVBQWpCLENBQW9CSSxJQUFwQjtBQUpELG1CQUFkO0FBTUQsaUJBWEk7O0FBWUxvQixnQkFBQUE7QUFaSyxlQUFQO0FBY0QsYUFsQk8sQ0FBVjtBQW1CRCxXQXBCRCxNQW9CTztBQUNMLGdCQUFJb0MsU0FBUyxDQUFDQyxLQUFkLEVBQXFCO0FBQ25CTixjQUFBQSxPQUFPLEdBQUcsS0FBSzFDLFlBQUwsQ0FBa0IrQyxTQUFTLENBQUNDLEtBQTVCLENBQVY7QUFDRCxhQUZELE1BRU87QUFDTG5ELGNBQUFBLElBQUksSUFBSXlDLE1BQU0sQ0FBQ3JCLE1BQWY7QUFDQXlCLGNBQUFBLE9BQU8sR0FBRzdELE1BQU0sQ0FBQzhELElBQVAsQ0FBWUksU0FBWixFQUNQdkIsTUFETyxDQUNDaEIsT0FBRCxJQUFhQSxPQUFPLENBQUNvQyxVQUFSLENBQW1CTixNQUFuQixDQURiLEVBRVBsQyxHQUZPLENBRUZJLE9BQUQsSUFBYTtBQUNoQix1QkFBTztBQUNMNUIsa0JBQUFBLElBQUksRUFBRSxLQUFLdUQsV0FBTCxDQUFpQlksU0FBUyxDQUFDdkMsT0FBRCxDQUFULENBQW1Cd0MsS0FBcEMsQ0FERDtBQUVMeEMsa0JBQUFBLE9BRks7QUFHTE0sa0JBQUFBLEtBQUssRUFBRU4sT0FIRjtBQUlMRyxrQkFBQUEsS0FBSyxFQUFFSDtBQUpGLGlCQUFQO0FBTUQsZUFUTyxDQUFWO0FBVUQ7QUFDRjtBQUNGOztBQUNELGVBQU87QUFBRVgsVUFBQUEsSUFBRjtBQUFRNkMsVUFBQUE7QUFBUixTQUFQO0FBQ0Q7O0FBbkRILEtBOURLLEVBbUhMLEtBQUtVLHdCQW5IQSxDQUFQO0FBcUhEOztBQS9OOEM7QUFrT2pEQyxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLENBQTZCLHdCQUE3QixFQUF1RDlFLG9CQUF2RCIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBHdkNvZGUgfSBmcm9tICcuLi9tb2xlY3VsZXMvZ3YtY29kZSc7XG5pbXBvcnQgeyBkaXNwYXRjaEN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vbGliL2V2ZW50cyc7XG5pbXBvcnQgeyBwaWNrZWRDb21wbGV0aW9uLCBzdGFydENvbXBsZXRpb24gfSBmcm9tICdAY29kZW1pcnJvci9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsga2V5bWFwIH0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XG5pbXBvcnQgeyBFZGl0b3JTZWxlY3Rpb24sIFByZWMgfSBmcm9tICdAY29kZW1pcnJvci9zdGF0ZSc7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICdvYmplY3QtcGF0aCc7XG5cbi8qKlxuICogRXhwcmVzc2lvbiBMYW5ndWFnZSBjb21wb25lbnRcbiAqXG4gKiBAZmlyZXMgZ3YtZXhwcmVzc2lvbi1sYW5ndWFnZTppbnB1dCAtIGlucHV0IGV2ZW50cyB3aXRoIHRoZSBgdmFsdWVgIG9uIGBkZXRhaWxgXG4gKiBAZmlyZXMgZ3YtZXhwcmVzc2lvbi1sYW5ndWFnZTpyZWFkeSAtIGV2ZW50IGRpc3BhdGNoIHdoZW4gY29tcG9uZW50IGlzIHJlYWR5XG4gKiBAZmlyZXMgZ3YtZXhwcmVzc2lvbi1sYW5ndWFnZTpjbGlwYm9hcmQtY29weSAtIGV2ZW50IGRpc3BhdGNoIHdoZW4gY29tcG9uZW50IHRoZSBgdmFsdWVgIGhhcyBiZWVuIGNvcGllZCB0byBjbGlwYm9hcmRcbiAqXG4gKiBAYXR0ciB7U3RyaW5nfSBsYWJlbCAtIGNvZGUgbGFuZ3VhZ2VcbiAqIEBhdHRyIHtTdHJpbmd9IHZhbHVlIC0gY29kZSBjb250ZW50IHRvIGJlIGhpZ2hsaWdodGVkXG4gKiBAYXR0ciB7b3B0aW9uc30gT2JqZWN0IC0gb3B0aW9ucyBiYXNlZCBvbiBjb2RlbWlycm9yXG4gKiBAYXR0ciB7U3RyaW5nfSBwbGFjZWhvbGRlciAtIGFuIGV4YW1wbGUgdmFsdWUgdG8gZGlzcGxheSBpbiB0aGUgaW5wdXQgd2hlbiBlbXB0eVxuICogQGF0dHIge051bWJlcn0gcm93cyAtIG51bWJlciBvZiByb3dzIG9mIHRoZSB0ZXh0IGVsZW1lbnRcbiAqIEBhdHRyIHtCb29sZWFufSBsYXJnZSAtIGZvciBhIGxhcmdlIGlucHV0IChvbmx5IGlmIHRoZSBmaWVsZCBoYXMgb25lIHJvdylcbiAqIEBhdHRyIHtCb29sZWFufSBtZWRpdW0gLSBmb3IgYSBtZWRpdW0gaW5wdXQgKG9ubHkgaWYgdGhlIGZpZWxkIGhhcyBvbmUgcm93KSAoRGVmYXVsdClcbiAqIEBhdHRyIHtCb29sZWFufSBzbWFsbCAtIGZvciBhIHNtYWxsIGlucHV0IChvbmx5IGlmIHRoZSBmaWVsZCBoYXMgb25lIHJvdylcbiAqIEBhdHRyIHtPYmplY3R9IGdyYW1tYXIgLSBUaGUgZ3JhbW1hciBmb3IgRXhwcmVzc2lvbiBMYW5ndWFnZSBzdXBwb3J0XG4gKlxuICogQGF0dHIge0Jvb2xlYW59IFtjbGlwYm9hcmQ9ZmFsc2VdLSB0cnVlIGlmIGZpZWxkIGhhcyBjbGlwYm9hcmQgYnV0dG9uXG4gKiBAYXR0ciB7Qm9vbGVhbn0gW2F1dG9mb2N1cz1mYWxzZV0gLSB0cnVlIHRvIHB1dCB0aGUgZm9jdXMgb24gdGhlIGlucHV0XG4gKiBAYXR0ciB7Qm9vbGVhbn0gW3JlYWRvbmx5PWZhbHNlXSAtIHRydWUgaWYgZmllbGQgaXMgcmVhZG9ubHkgbW9kZVxuICovXG5leHBvcnQgY2xhc3MgR3ZFeHByZXNzaW9uTGFuZ3VhZ2UgZXh0ZW5kcyBHdkNvZGUge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN1cGVyLnByb3BlcnRpZXMsXG4gICAgICBncmFtbWFyOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgIH07XG4gIH1cblxuICBmaXJzdFVwZGF0ZWQoKSB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKCk7XG4gICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAncmVhZHknLCB7IGN1cnJlbnRUYXJnZXQ6IHRoaXMgfSk7XG4gIH1cblxuICBnZXRFeHRlbnNpb25zKCkge1xuICAgIHJldHVybiBbUHJlYy5oaWdoKHRoaXMuaW5zZXJ0RUxLZXltYXAoKSldO1xuICB9XG5cbiAgaW5zZXJ0RUxLZXltYXAoKSB7XG4gICAgcmV0dXJuIGtleW1hcC5vZihbXG4gICAgICB7XG4gICAgICAgIGtleTogJ0N0cmwtU2hpZnQtZScsXG4gICAgICAgIG1hYzogJ0NtZC1TaGlmdC1lJyxcbiAgICAgICAgcnVuKHZpZXcpIHtcbiAgICAgICAgICB2aWV3LmRpc3BhdGNoKFxuICAgICAgICAgICAgdmlldy5zdGF0ZS5jaGFuZ2VCeVJhbmdlKChyYW5nZSkgPT4gKHtcbiAgICAgICAgICAgICAgY2hhbmdlczogW3sgZnJvbTogcmFuZ2UuZnJvbSwgdG86IHJhbmdlLnRvLCBpbnNlcnQ6ICd7I30nIH1dLFxuICAgICAgICAgICAgICByYW5nZTogRWRpdG9yU2VsZWN0aW9uLnJhbmdlKHJhbmdlLmZyb20gKyAyLCByYW5nZS5mcm9tICsgMiksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzdGFydENvbXBsZXRpb24odmlldyk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgYnVpbGRNZXRob2RzKHR5cGUpIHtcbiAgICBjb25zdCBtb2RlbFR5cGUgPSB0aGlzLmdldE1vZGVsVHlwZSh0eXBlKTtcbiAgICByZXR1cm4gbW9kZWxUeXBlLm1ldGhvZHMubWFwKCh7IG5hbWUsIHBhcmFtcyA9IFtdLCByZXR1cm5UeXBlIH0pID0+IHtcbiAgICAgIGNvbnN0IGNvbW1hbmQgPSBgJHtuYW1lfSgpYDtcbiAgICAgIGNvbnN0IGRpc3BsYXlQYXJhbXMgPSBwYXJhbXMubWFwKChwKSA9PiBgJHtwLnR5cGV9ICR7cC5uYW1lfWApO1xuICAgICAgY29uc3QgbGFiZWwgPSBgJHtuYW1lfSgke2Rpc3BsYXlQYXJhbXMuam9pbignLCAnKX0pYDtcbiAgICAgIGNvbnN0IGRldGFpbCA9IGByZXR1cm4gJHtyZXR1cm5UeXBlfWA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnbWV0aG9kJyxcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgYXBwbHk6ICh2aWV3LCBjb21wbGV0aW9uLCBmcm9tLCB0bykgPT4ge1xuICAgICAgICAgIGNvbnN0IGFuY2hvciA9IGZyb20gKyBuYW1lLmxlbmd0aCArIDE7XG4gICAgICAgICAgdmlldy5kaXNwYXRjaCh7XG4gICAgICAgICAgICBjaGFuZ2VzOiB7IGZyb20sIHRvLCBpbnNlcnQ6IGNvbXBsZXRpb24uY29tbWFuZCB9LFxuICAgICAgICAgICAgc2VsZWN0aW9uOiB7IGFuY2hvciB9LFxuICAgICAgICAgICAgdXNlckV2ZW50OiAnaW5wdXQuY29tcGxldGUnLFxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6IHBpY2tlZENvbXBsZXRpb24ub2YodmlldyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBkZXRhaWwsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZmluZEJlc3RBdXRvY29tcGxldGVIYW5kbGVyKGNvbXBsZXRpb25Db250ZXh0KSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbkxhbmd1YWdlQ29tcGxldGlvbkhhbmRsZXJzXG4gICAgICAuZmlsdGVyKChoYW5kbGVyKSA9PiAodGhpcy5ncmFtbWFyICE9IG51bGwgJiYgaGFuZGxlci5zdXBwb3J0RUwgPT09IHRydWUpIHx8IGhhbmRsZXIuc3VwcG9ydEVMICE9PSB0cnVlKVxuICAgICAgLm1hcCgoaGFuZGxlcikgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGhhbmRsZXIuZXhwciA/IGNvbXBsZXRpb25Db250ZXh0Lm1hdGNoQmVmb3JlKGhhbmRsZXIuZXhwcikgOiB0cnVlO1xuICAgICAgICByZXR1cm4geyBoYW5kbGVyLCBtYXRjaCB9O1xuICAgICAgfSlcbiAgICAgIC5maW5kKCh7IG1hdGNoLCBleHByIH0pID0+IG1hdGNoKTtcbiAgfVxuXG4gIGdldE1vZGVsVHlwZSh0eXBlSWQpIHtcbiAgICBpZiAodGhpcy5ncmFtbWFyICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcy5ncmFtbWFyLCBgX3R5cGVzLiR7dHlwZUlkfWApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlzTWFwKHR5cGVJZCkge1xuICAgIHJldHVybiBbJ01hcCcsICdIdHRwSGVhZGVycycsICdNdWx0aVZhbHVlTWFwJ10uaW5jbHVkZXModHlwZUlkKTtcbiAgfVxuXG4gIGdldEVudW0odHlwZUlkKSB7XG4gICAgaWYgKHRoaXMuZ3JhbW1hciAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMuZ3JhbW1hciwgYF9lbnVtcy4ke3R5cGVJZH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIFsnJ107XG4gIH1cblxuICBjb252ZXJ0VHlwZSh0eXBlKSB7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIGNvbnN0IGxvd2VyVHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChsb3dlclR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiAndGV4dCc7XG4gICAgICB9IGVsc2UgaWYgKGxvd2VyVHlwZSA9PT0gJ2h0dHBoZWFkZXJzJyB8fCBsb3dlclR5cGUgPT09ICdtdWx0aXZhbHVlbWFwJykge1xuICAgICAgICByZXR1cm4gJ3R5cGUnO1xuICAgICAgfSBlbHNlIGlmIChsb3dlclR5cGUgPT09ICdpbnQnIHx8IGxvd2VyVHlwZSA9PT0gJ2xvbmcnKSB7XG4gICAgICAgIHJldHVybiAndmFyaWFibGUnO1xuICAgICAgfSBlbHNlIGlmIChsb3dlclR5cGUuaW5jbHVkZXMoJ1tdJykpIHtcbiAgICAgICAgcmV0dXJuICdlbnVtJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICd2YXJpYWJsZSc7XG4gIH1cblxuICBnZXQgZXhwcmVzc2lvbkxhbmd1YWdlQ29tcGxldGlvbkhhbmRsZXJzKCkge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGV4cHI6IC97I1thLXpdKi8sXG4gICAgICAgIHN1cHBvcnRFTDogdHJ1ZSxcbiAgICAgICAgcnVuKGNvbXBsZXRpb25Db250ZXh0LCBtYXRjaCkge1xuICAgICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLnRleHQucmVwbGFjZUFsbCgneyMnLCAnJyk7XG4gICAgICAgICAgY29uc3QgZnJvbSA9IGNvbXBsZXRpb25Db250ZXh0LnBvcyAtIHByZWZpeC5sZW5ndGg7XG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5rZXlzKHRoaXMuZ3JhbW1hcilcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbW1hbmQpID0+ICFjb21tYW5kLnN0YXJ0c1dpdGgoJ18nKSAmJiBjb21tYW5kLnN0YXJ0c1dpdGgocHJlZml4KSlcbiAgICAgICAgICAgIC5tYXAoKGNvbW1hbmQpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAndmFyaWFibGUnLFxuICAgICAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgYXBwbHk6IGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGNvbW1hbmQsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4geyBmcm9tLCBvcHRpb25zIH07XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBleHByOiAveyNbYS16XSouW2EtekEtWl0qLyxcbiAgICAgICAgc3VwcG9ydEVMOiB0cnVlLFxuICAgICAgICBydW4oY29tcGxldGlvbkNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgICAgY29uc3QgdG9rZW5zID0gbWF0Y2gudGV4dC5zcGxpdCgnLicpO1xuICAgICAgICAgIGNvbnN0IGtleSA9IHRva2Vuc1swXS5yZXBsYWNlQWxsKCd7IycsICcnKTtcbiAgICAgICAgICBjb25zdCBwcmVmaXggPSB0b2tlbnNbMV07XG4gICAgICAgICAgbGV0IGNhbmRpZGF0ZSA9IHRoaXMuZ3JhbW1hcltrZXldW3ByZWZpeF07XG4gICAgICAgICAgbGV0IG9wdGlvbnMgPSBbXTtcbiAgICAgICAgICBsZXQgZnJvbSA9IGNvbXBsZXRpb25Db250ZXh0LnBvcztcbiAgICAgICAgICBpZiAoY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc01hcChjYW5kaWRhdGUuX3R5cGUpKSB7XG4gICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmdldEVudW0oY2FuZGlkYXRlLl90eXBlKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMuY29udmVydFR5cGUoY2FuZGlkYXRlLl90eXBlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kID0gYFsnJHt2YWx1ZX0nXVswXWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgICAgICAgYXBwbHk6IGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyb20gLT0gcHJlZml4Lmxlbmd0aDtcbiAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHRoaXMuZ3JhbW1hcltrZXldO1xuICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5fdHlwZSkge1xuICAgICAgICAgICAgICBvcHRpb25zID0gdGhpcy5idWlsZE1ldGhvZHMoY2FuZGlkYXRlLl90eXBlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9wdGlvbnMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY29tbWFuZCkgPT4gIWNvbW1hbmQuc3RhcnRzV2l0aCgnXycpICYmIGNvbW1hbmQuc3RhcnRzV2l0aChwcmVmaXgpKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNvbW1hbmQpID0+ICh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLmNvbnZlcnRUeXBlKGNhbmRpZGF0ZVtjb21tYW5kXS5fdHlwZSksXG4gICAgICAgICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgICAgICAgYXBwbHk6IGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgICBsYWJlbDogY29tbWFuZCxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGZyb20sIG9wdGlvbnMgfTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGV4cHI6IC97I1thLXpdKi5bYS16QS1aXSouW2EtekEtWl0qLyxcbiAgICAgICAgc3VwcG9ydEVMOiB0cnVlLFxuICAgICAgICBydW4oY29tcGxldGlvbkNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgICAgY29uc3QgdG9rZW5zID0gbWF0Y2gudGV4dC5zcGxpdCgnLicpO1xuICAgICAgICAgIGNvbnN0IGtleSA9IHRva2Vuc1swXS5yZXBsYWNlQWxsKCd7IycsICcnKTtcbiAgICAgICAgICBjb25zdCB3b3JkID0gdG9rZW5zWzFdO1xuICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHRva2Vuc1syXTtcbiAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0aGlzLmdyYW1tYXJba2V5XVt3b3JkXTtcbiAgICAgICAgICBsZXQgb3B0aW9ucyA9IFtdO1xuICAgICAgICAgIGxldCBmcm9tID0gY29tcGxldGlvbkNvbnRleHQucG9zO1xuICAgICAgICAgIGlmIChjYW5kaWRhdGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTWFwKGNhbmRpZGF0ZS5fdHlwZSkpIHtcbiAgICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMuZ2V0RW51bShjYW5kaWRhdGUuX3R5cGUpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY29tbWFuZCkgPT4gIWNvbW1hbmQuc3RhcnRzV2l0aCgnXycpICYmIGNvbW1hbmQuc3RhcnRzV2l0aChwcmVmaXgpKVxuICAgICAgICAgICAgICAgIC5tYXAoKGxhYmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5jb252ZXJ0VHlwZShjYW5kaWRhdGUuX3R5cGUpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogYFsnJHtsYWJlbH0nXVswXWAsXG4gICAgICAgICAgICAgICAgICAgIGFwcGx5KHZpZXcsIGNvbXBsZXRpb24sIF9mcm9tLCB0bykge1xuICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBfZnJvbSAtIHByZWZpeC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICAgIHZpZXcuZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlczogeyBmcm9tLCB0bywgaW5zZXJ0OiBjb21wbGV0aW9uLmNvbW1hbmQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogeyBhbmNob3I6IGZyb20gKyBjb21wbGV0aW9uLmNvbW1hbmQubGVuZ3RoIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyRXZlbnQ6ICdpbnB1dC5jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczogcGlja2VkQ29tcGxldGlvbi5vZih2aWV3KSxcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5fdHlwZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmJ1aWxkTWV0aG9kcyhjYW5kaWRhdGUuX3R5cGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZyb20gLT0gcHJlZml4Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKVxuICAgICAgICAgICAgICAgICAgLmZpbHRlcigoY29tbWFuZCkgPT4gY29tbWFuZC5zdGFydHNXaXRoKHByZWZpeCkpXG4gICAgICAgICAgICAgICAgICAubWFwKChjb21tYW5kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogdGhpcy5jb252ZXJ0VHlwZShjYW5kaWRhdGVbY29tbWFuZF0uX3R5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgICAgICAgYXBwbHk6IGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBmcm9tLCBvcHRpb25zIH07XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdGhpcy5kZWZhdWx0Q29tcGxldGlvbkhhbmRsZXIsXG4gICAgXTtcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1leHByZXNzaW9uLWxhbmd1YWdlJywgR3ZFeHByZXNzaW9uTGFuZ3VhZ2UpO1xuIl19
|
|
@@ -18,7 +18,6 @@ import { toSvg } from 'jdenticon';
|
|
|
18
18
|
import { skeleton } from '../styles/skeleton';
|
|
19
19
|
import { styleMap } from 'lit/directives/style-map';
|
|
20
20
|
import '../atoms/gv-image';
|
|
21
|
-
|
|
22
21
|
/**
|
|
23
22
|
* Identity picture component
|
|
24
23
|
*
|
|
@@ -32,64 +31,36 @@ import '../atoms/gv-image';
|
|
|
32
31
|
*
|
|
33
32
|
* @cssprop {Color} [--gv-identity-picture-notification--bgc=var(--gv-theme-color-light, #86c3d0)] - Notification background color
|
|
34
33
|
*/
|
|
34
|
+
|
|
35
35
|
export class GvIdentityPicture extends LitElement {
|
|
36
36
|
static get properties() {
|
|
37
37
|
return {
|
|
38
|
-
picture: {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
picture: {
|
|
39
|
+
type: String
|
|
40
|
+
},
|
|
41
|
+
display_name: {
|
|
42
|
+
type: String
|
|
43
|
+
},
|
|
44
|
+
_error: {
|
|
45
|
+
type: Boolean,
|
|
46
|
+
attribute: false
|
|
47
|
+
},
|
|
48
|
+
notification: {
|
|
49
|
+
type: Boolean
|
|
50
|
+
},
|
|
51
|
+
rounded: {
|
|
52
|
+
type: Boolean,
|
|
53
|
+
reflect: true
|
|
54
|
+
},
|
|
55
|
+
skeleton: {
|
|
56
|
+
type: Boolean
|
|
57
|
+
}
|
|
44
58
|
};
|
|
45
59
|
}
|
|
46
60
|
|
|
47
61
|
static get styles() {
|
|
48
|
-
return [
|
|
49
|
-
|
|
50
|
-
// language=CSS
|
|
51
|
-
css`
|
|
52
|
-
:host {
|
|
53
|
-
display: block;
|
|
54
|
-
position: relative;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
div {
|
|
58
|
-
text-align: center;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
svg,
|
|
62
|
-
.skeleton {
|
|
63
|
-
width: auto;
|
|
64
|
-
height: auto;
|
|
65
|
-
max-width: 100%;
|
|
66
|
-
max-height: 100%;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
gv-image {
|
|
70
|
-
width: 100%;
|
|
71
|
-
height: 100%;
|
|
72
|
-
--gv-image--of: contain;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
:host([rounded]) gv-image,
|
|
76
|
-
:host([rounded]) svg {
|
|
77
|
-
border: 2px solid var(--gv-theme-neutral-color-lighter, #fafafa);
|
|
78
|
-
border-radius: 50%;
|
|
79
|
-
box-sizing: border-box;
|
|
80
|
-
--gv-image--of: cover;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.notification {
|
|
84
|
-
position: absolute;
|
|
85
|
-
width: 8px;
|
|
86
|
-
height: 8px;
|
|
87
|
-
background-clip: padding-box;
|
|
88
|
-
border-radius: 50%;
|
|
89
|
-
background-color: var(--gv-identity-picture-notification--bgc, var(--gv-theme-color-light, #86c3d0));
|
|
90
|
-
}
|
|
91
|
-
`,
|
|
92
|
-
];
|
|
62
|
+
return [skeleton, // language=CSS
|
|
63
|
+
css`:host{display:block;position:relative}div{text-align:center}.skeleton,svg{width:auto;height:auto;max-width:100%;max-height:100%}gv-image{width:100%;height:100%;--gv-image--of:contain}:host([rounded]) gv-image,:host([rounded]) svg{border:2px solid var(--gv-theme-neutral-color-lighter,#fafafa);border-radius:50%;box-sizing:border-box;--gv-image--of:cover}.notification{position:absolute;width:8px;height:8px;background-clip:padding-box;border-radius:50%;background-color:var(--gv-identity-picture-notification--bgc,var(--gv-theme-color-light,#86c3d0))}`];
|
|
93
64
|
}
|
|
94
65
|
|
|
95
66
|
_onError() {
|
|
@@ -115,34 +86,40 @@ export class GvIdentityPicture extends LitElement {
|
|
|
115
86
|
}
|
|
116
87
|
|
|
117
88
|
render() {
|
|
118
|
-
const {
|
|
89
|
+
const {
|
|
90
|
+
width,
|
|
91
|
+
height
|
|
92
|
+
} = window.getComputedStyle(this);
|
|
93
|
+
|
|
119
94
|
if ((!this.picture || this._error) && width && height) {
|
|
120
95
|
const size = this._getMaxSize(width, height);
|
|
96
|
+
|
|
121
97
|
const container = document.createElement('div');
|
|
98
|
+
|
|
122
99
|
if (this.skeleton) {
|
|
123
100
|
container.classList.add('skeleton');
|
|
124
101
|
}
|
|
102
|
+
|
|
125
103
|
container.title = this.display_name;
|
|
126
|
-
container.innerHTML = toSvg(this.display_name, size, {
|
|
104
|
+
container.innerHTML = toSvg(this.display_name, size, {
|
|
105
|
+
backColor: '#FFF'
|
|
106
|
+
});
|
|
107
|
+
|
|
127
108
|
if (this.notification) {
|
|
128
109
|
const notification = document.createElement('span');
|
|
129
110
|
notification.className = 'notification';
|
|
130
111
|
notification.style.left = width;
|
|
131
112
|
container.appendChild(notification);
|
|
132
113
|
}
|
|
114
|
+
|
|
133
115
|
return html`${container}`;
|
|
134
116
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
title="${this.display_name}"
|
|
140
|
-
@error="${this._onError}"
|
|
141
|
-
@gv-image:loaded="${this._onLoaded}"
|
|
142
|
-
></gv-image>
|
|
143
|
-
${this.notification ? html`<span class="notification" style="${styleMap({ left: width })}"></span>` : ''}
|
|
144
|
-
`;
|
|
117
|
+
|
|
118
|
+
return html` <gv-image src="${this.picture}" alt="${this.display_name}" title="${this.display_name}" @error="${this._onError}" @gv-image:loaded="${this._onLoaded}"></gv-image> ${this.notification ? html`<span class="notification" style="${styleMap({
|
|
119
|
+
left: width
|
|
120
|
+
})}"></span>` : ''} `;
|
|
145
121
|
}
|
|
146
|
-
}
|
|
147
122
|
|
|
123
|
+
}
|
|
148
124
|
window.customElements.define('gv-identity-picture', GvIdentityPicture);
|
|
125
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1pZGVudGl0eS1waWN0dXJlLmpzIl0sIm5hbWVzIjpbImNzcyIsIkxpdEVsZW1lbnQiLCJodG1sIiwidG9TdmciLCJza2VsZXRvbiIsInN0eWxlTWFwIiwiR3ZJZGVudGl0eVBpY3R1cmUiLCJwcm9wZXJ0aWVzIiwicGljdHVyZSIsInR5cGUiLCJTdHJpbmciLCJkaXNwbGF5X25hbWUiLCJfZXJyb3IiLCJCb29sZWFuIiwiYXR0cmlidXRlIiwibm90aWZpY2F0aW9uIiwicm91bmRlZCIsInJlZmxlY3QiLCJzdHlsZXMiLCJfb25FcnJvciIsIl90b051bWJlciIsInNpemUiLCJwYXJzZUludCIsInJlcGxhY2UiLCJfb25Mb2FkZWQiLCJfZ2V0TWF4U2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwiTWF0aCIsIm1pbiIsInVwZGF0ZWQiLCJoYXMiLCJyZW5kZXIiLCJ3aW5kb3ciLCJnZXRDb21wdXRlZFN0eWxlIiwiY29udGFpbmVyIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwidGl0bGUiLCJpbm5lckhUTUwiLCJiYWNrQ29sb3IiLCJjbGFzc05hbWUiLCJzdHlsZSIsImxlZnQiLCJhcHBlbmRDaGlsZCIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxHQUFULEVBQWNDLFVBQWQsRUFBMEJDLElBQTFCLFFBQXNDLEtBQXRDO0FBQ0EsU0FBU0MsS0FBVCxRQUFzQixXQUF0QjtBQUNBLFNBQVNDLFFBQVQsUUFBeUIsb0JBQXpCO0FBQ0EsU0FBU0MsUUFBVCxRQUF5QiwwQkFBekI7QUFDQSxPQUFPLG1CQUFQO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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LFFBQUFBLFlBQVksQ0FBQzZCLEtBQWIsQ0FBbUJDLElBQW5CLEdBQTBCbkIsS0FBMUI7QUFDQVMsUUFBQUEsU0FBUyxDQUFDVyxXQUFWLENBQXNCL0IsWUFBdEI7QUFDRDs7QUFDRCxhQUFPYixJQUFJLEdBQUdpQyxTQUFILEVBQVg7QUFDRDs7QUFDRCxXQUFPakMsSUFBSSxtQkFFQSxLQUFLTSxPQUZMLFVBR0EsS0FBS0csWUFITCxZQUlFLEtBQUtBLFlBSlAsYUFLRyxLQUFLUSxRQUxSLHVCQU1hLEtBQUtLLFNBTmxCLGlCQVFQLEtBQUtULFlBQUwsR0FBb0JiLElBQUkscUNBQXFDRyxRQUFRLENBQUM7QUFBRXdDLE1BQUFBLElBQUksRUFBRW5CO0FBQVIsS0FBRCxDQUE3QyxXQUF4QixHQUFvRyxFQVI3RixHQUFYO0FBVUQ7O0FBOUcrQztBQWlIbERPLE1BQU0sQ0FBQ2MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIscUJBQTdCLEVBQW9EMUMsaUJBQXBEIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGNzcywgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyB0b1N2ZyB9IGZyb20gJ2pkZW50aWNvbic7XG5pbXBvcnQgeyBza2VsZXRvbiB9IGZyb20gJy4uL3N0eWxlcy9za2VsZXRvbic7XG5pbXBvcnQgeyBzdHlsZU1hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3N0eWxlLW1hcCc7XG5pbXBvcnQgJy4uL2F0b21zL2d2LWltYWdlJztcblxuLyoqXG4gKiBJZGVudGl0eSBwaWN0dXJlIGNvbXBvbmVudFxuICpcbiAqICMjIERldGFpbHNcbiAqICogaGFzIEB0aGVtZSBmYWNldFxuICpcbiAqIEBhdHRyIHtTdHJpbmd9IHBpY3R1cmUgLSB0aGUgcGljdHVyZVxuICogQGF0dHIge1N0cmluZ30gZGlzcGxheV9uYW1lIC0gdGhlIGRpc3BsYXlfbmFtZSBvZiB0aGUgcGljdHVyZVxuICogQGF0dHIge0Jvb2xlYW59IG5vdGlmaWNhdGlvbiAtIHRydWUgdG8gZGlzcGxheSBhIG5vdGlmaWNhdGlvbiBpbmZvXG4gKiBAYXR0ciB7Qm9vbGVhbn0gcm91bmRlZCAtIHRydWUgZm9yIHJvdW5kZWQgaW1hZ2UvaWNvblxuICpcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3YtaWRlbnRpdHktcGljdHVyZS1ub3RpZmljYXRpb24tLWJnYz12YXIoLS1ndi10aGVtZS1jb2xvci1saWdodCwgIzg2YzNkMCldIC0gTm90aWZpY2F0aW9uIGJhY2tncm91bmQgY29sb3JcbiAqL1xuZXhwb3J0IGNsYXNzIEd2SWRlbnRpdHlQaWN0dXJlIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGljdHVyZTogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIGRpc3BsYXlfbmFtZTogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIF9lcnJvcjogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBub3RpZmljYXRpb246IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgICAgcm91bmRlZDogeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBza2VsZXRvbjogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBza2VsZXRvbixcbiAgICAgIC8vIGxhbmd1YWdlPUNTU1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB9XG5cbiAgICAgICAgZGl2IHtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBzdmcsXG4gICAgICAgIC5za2VsZXRvbiB7XG4gICAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtaW1hZ2Uge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAtLWd2LWltYWdlLS1vZjogY29udGFpbjtcbiAgICAgICAgfVxuXG4gICAgICAgIDpob3N0KFtyb3VuZGVkXSkgZ3YtaW1hZ2UsXG4gICAgICAgIDpob3N0KFtyb3VuZGVkXSkgc3ZnIHtcbiAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWxpZ2h0ZXIsICNmYWZhZmEpO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIC0tZ3YtaW1hZ2UtLW9mOiBjb3ZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5ub3RpZmljYXRpb24ge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB3aWR0aDogOHB4O1xuICAgICAgICAgIGhlaWdodDogOHB4O1xuICAgICAgICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWd2LWlkZW50aXR5LXBpY3R1cmUtbm90aWZpY2F0aW9uLS1iZ2MsIHZhcigtLWd2LXRoZW1lLWNvbG9yLWxpZ2h0LCAjODZjM2QwKSk7XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgXTtcbiAgfVxuXG4gIF9vbkVycm9yKCkge1xuICAgIHRoaXMuX2Vycm9yID0gdHJ1ZTtcbiAgfVxuXG4gIF90b051bWJlcihzaXplKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHNpemUucmVwbGFjZSgncHgnLCAnJyksIDEwKTtcbiAgfVxuXG4gIF9vbkxvYWRlZCgpIHtcbiAgICB0aGlzLl9lcnJvciA9IGZhbHNlO1xuICB9XG5cbiAgX2dldE1heFNpemUod2lkdGgsIGhlaWdodCkge1xuICAgIHJldHVybiBNYXRoLm1pbih0aGlzLl90b051bWJlcih3aWR0aCksIHRoaXMuX3RvTnVtYmVyKGhlaWdodCkpO1xuICB9XG5cbiAgdXBkYXRlZChwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKHByb3BlcnRpZXMuaGFzKCdwaWN0dXJlJykpIHtcbiAgICAgIHRoaXMuX2Vycm9yID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyk7XG4gICAgaWYgKCghdGhpcy5waWN0dXJlIHx8IHRoaXMuX2Vycm9yKSAmJiB3aWR0aCAmJiBoZWlnaHQpIHtcbiAgICAgIGNvbnN0IHNpemUgPSB0aGlzLl9nZXRNYXhTaXplKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBpZiAodGhpcy5za2VsZXRvbikge1xuICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnc2tlbGV0b24nKTtcbiAgICAgIH1cbiAgICAgIGNvbnRhaW5lci50aXRsZSA9IHRoaXMuZGlzcGxheV9uYW1lO1xuICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IHRvU3ZnKHRoaXMuZGlzcGxheV9uYW1lLCBzaXplLCB7IGJhY2tDb2xvcjogJyNGRkYnIH0pO1xuICAgICAgaWYgKHRoaXMubm90aWZpY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgbm90aWZpY2F0aW9uLmNsYXNzTmFtZSA9ICdub3RpZmljYXRpb24nO1xuICAgICAgICBub3RpZmljYXRpb24uc3R5bGUubGVmdCA9IHdpZHRoO1xuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobm90aWZpY2F0aW9uKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBodG1sYCR7Y29udGFpbmVyfWA7XG4gICAgfVxuICAgIHJldHVybiBodG1sYFxuICAgICAgPGd2LWltYWdlXG4gICAgICAgIHNyYz1cIiR7dGhpcy5waWN0dXJlfVwiXG4gICAgICAgIGFsdD1cIiR7dGhpcy5kaXNwbGF5X25hbWV9XCJcbiAgICAgICAgdGl0bGU9XCIke3RoaXMuZGlzcGxheV9uYW1lfVwiXG4gICAgICAgIEBlcnJvcj1cIiR7dGhpcy5fb25FcnJvcn1cIlxuICAgICAgICBAZ3YtaW1hZ2U6bG9hZGVkPVwiJHt0aGlzLl9vbkxvYWRlZH1cIlxuICAgICAgPjwvZ3YtaW1hZ2U+XG4gICAgICAke3RoaXMubm90aWZpY2F0aW9uID8gaHRtbGA8c3BhbiBjbGFzcz1cIm5vdGlmaWNhdGlvblwiIHN0eWxlPVwiJHtzdHlsZU1hcCh7IGxlZnQ6IHdpZHRoIH0pfVwiPjwvc3Bhbj5gIDogJyd9XG4gICAgYDtcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1pZGVudGl0eS1waWN0dXJlJywgR3ZJZGVudGl0eVBpY3R1cmUpO1xuIl19
|