valtech-components 4.0.982 → 4.0.983
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/esm2022/lib/components/atoms/button/button.component.mjs +3 -1
- package/esm2022/lib/components/organisms/field-schema-editor/field-schema-editor.component.mjs +332 -0
- package/esm2022/lib/components/organisms/field-schema-editor/field-schema-editor.i18n.mjs +71 -0
- package/esm2022/lib/components/organisms/field-schema-editor/types.mjs +2 -0
- package/esm2022/lib/components/organisms/survey-builder/survey-builder.component.mjs +265 -136
- package/esm2022/lib/components/organisms/survey-builder/survey-builder.i18n.mjs +19 -7
- package/esm2022/lib/components/organisms/survey-builder/types.mjs +31 -2
- package/esm2022/lib/components/organisms/survey-response/survey-response.component.mjs +294 -26
- package/esm2022/lib/components/types.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/valtech-components.mjs +1052 -231
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/article/article.component.d.ts +1 -0
- package/lib/components/organisms/field-schema-editor/field-schema-editor.component.d.ts +90 -0
- package/lib/components/organisms/field-schema-editor/field-schema-editor.i18n.d.ts +2 -0
- package/lib/components/organisms/field-schema-editor/types.d.ts +60 -0
- package/lib/components/organisms/survey-builder/survey-builder.component.d.ts +26 -14
- package/lib/components/organisms/survey-builder/types.d.ts +23 -5
- package/lib/components/organisms/survey-response/survey-response.component.d.ts +42 -1
- package/lib/components/types.d.ts +6 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -5,14 +5,18 @@ import { firstValueFrom } from 'rxjs';
|
|
|
5
5
|
import { I18nService } from '../../../services/i18n';
|
|
6
6
|
import { RequestService } from '../../../services/requests/request.service';
|
|
7
7
|
import { RequestFormBuilderService } from '../../../services/requests/request-form-builder.service';
|
|
8
|
-
import {
|
|
8
|
+
import { ComponentStates } from '../../types';
|
|
9
9
|
import { ValtechErrorService } from '../../../services/errors/valtech-error.service';
|
|
10
10
|
import { TextInputComponent } from '../../molecules/text-input/text-input.component';
|
|
11
11
|
import { ButtonComponent } from '../../atoms/button/button.component';
|
|
12
|
-
import {
|
|
12
|
+
import { FormFieldComponent } from '../../molecules/form-field/form-field.component';
|
|
13
|
+
import { FIELD_TYPES_WITH_OPTIONS, FieldSchemaEditorComponent, } from '../field-schema-editor/field-schema-editor.component';
|
|
14
|
+
import { FIELD_SCHEMA_EDITOR_I18N } from '../field-schema-editor/field-schema-editor.i18n';
|
|
15
|
+
import { SURVEY_QUESTION_TYPES } from './types';
|
|
13
16
|
import { SURVEY_BUILDER_I18N } from './survey-builder.i18n';
|
|
14
17
|
import * as i0 from "@angular/core";
|
|
15
18
|
const NAMESPACE = 'SurveyBuilder';
|
|
19
|
+
const EDITOR_NAMESPACE = 'FieldSchemaEditor';
|
|
16
20
|
const DEFAULT_TYPE_PREFIX = 'survey';
|
|
17
21
|
let rowUid = 0;
|
|
18
22
|
/**
|
|
@@ -23,11 +27,14 @@ let rowUid = 0;
|
|
|
23
27
|
* true` (cada respuesta se agrega, no se revisa una por una) y el `EntityRef`
|
|
24
28
|
* que le pasa el consumer (ej. el evento de bingo dueño de la encuesta).
|
|
25
29
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
30
|
+
* Cada pregunta se edita con `val-field-schema-editor`, el mismo editor que usa
|
|
31
|
+
* el checkout de bingo — de ahí que una pregunta tenga tipo, placeholder, nota
|
|
32
|
+
* y opciones, no solo texto. La v1 de este componente tenía su propio editor
|
|
33
|
+
* pobre (dos tipos, sin opciones); la Fase 5 del ADR-092 lo reemplazó por el
|
|
34
|
+
* organism compartido en vez de mejorarlo por duplicado.
|
|
35
|
+
*
|
|
36
|
+
* El catálogo que ofrece sale de `SURVEY_QUESTION_TYPES` — acotado a lo que
|
|
37
|
+
* `val-survey-response` sabe renderizar, no a lo que el editor sabe editar.
|
|
31
38
|
*/
|
|
32
39
|
export class SurveyBuilderComponent {
|
|
33
40
|
constructor() {
|
|
@@ -37,15 +44,21 @@ export class SurveyBuilderComponent {
|
|
|
37
44
|
this.requests = inject(RequestService);
|
|
38
45
|
this.formBuilder = inject(RequestFormBuilderService);
|
|
39
46
|
this.errors = inject(ValtechErrorService);
|
|
40
|
-
this.emojiType = FIELD_TYPE_EMOJI_RATING;
|
|
41
47
|
this.titleControl = new FormControl('', { nonNullable: true });
|
|
42
48
|
this.subtitleControl = new FormControl('', { nonNullable: true });
|
|
43
49
|
this.questions = signal([]);
|
|
50
|
+
this.editingId = signal('');
|
|
51
|
+
this.validationError = signal('');
|
|
44
52
|
this.saving = signal(false);
|
|
45
|
-
this.rowControls = new Map();
|
|
46
53
|
if (!this.i18n.hasNamespace(NAMESPACE)) {
|
|
47
54
|
this.i18n.registerDefaults(NAMESPACE, SURVEY_BUILDER_I18N);
|
|
48
55
|
}
|
|
56
|
+
// El nombre del tipo de cada pregunta se muestra en la fila colapsada, que
|
|
57
|
+
// dibuja este componente y no el editor — si nadie montó un editor todavía,
|
|
58
|
+
// el namespace no existiría y la fila mostraría la clave cruda.
|
|
59
|
+
if (!this.i18n.hasNamespace(EDITOR_NAMESPACE)) {
|
|
60
|
+
this.i18n.registerDefaults(EDITOR_NAMESPACE, FIELD_SCHEMA_EDITOR_I18N);
|
|
61
|
+
}
|
|
49
62
|
}
|
|
50
63
|
async ngOnInit() {
|
|
51
64
|
if (!this.props.typeId)
|
|
@@ -64,53 +77,129 @@ export class SurveyBuilderComponent {
|
|
|
64
77
|
});
|
|
65
78
|
}
|
|
66
79
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
this.
|
|
80
|
+
t(key) {
|
|
81
|
+
this.i18n.lang();
|
|
82
|
+
return this.i18n.t(key, NAMESPACE);
|
|
83
|
+
}
|
|
84
|
+
typeLabel(type) {
|
|
85
|
+
this.i18n.lang();
|
|
86
|
+
return this.i18n.t(`type${type}`, EDITOR_NAMESPACE);
|
|
87
|
+
}
|
|
88
|
+
questionTypes() {
|
|
89
|
+
return this.props.questionTypes?.length ? this.props.questionTypes : SURVEY_QUESTION_TYPES;
|
|
90
|
+
}
|
|
91
|
+
editorProps(row) {
|
|
92
|
+
return { mode: 'edit', field: row, allowedTypes: this.questionTypes() };
|
|
93
|
+
}
|
|
94
|
+
iconAction(token, icon, label, disabled = false, color = 'dark') {
|
|
70
95
|
return {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
96
|
+
token,
|
|
97
|
+
text: '',
|
|
98
|
+
ariaLabel: label,
|
|
99
|
+
color,
|
|
100
|
+
fill: 'clear',
|
|
101
|
+
shape: 'round',
|
|
102
|
+
size: 'small',
|
|
103
|
+
type: 'button',
|
|
104
|
+
state: disabled ? ComponentStates.DISABLED : ComponentStates.ENABLED,
|
|
105
|
+
icon: { name: icon, slot: 'icon-only' },
|
|
75
106
|
};
|
|
76
107
|
}
|
|
77
|
-
rowLabelControl(row) {
|
|
78
|
-
let control = this.rowControls.get(row.id);
|
|
79
|
-
if (!control) {
|
|
80
|
-
control = new FormControl(row.label, { nonNullable: true });
|
|
81
|
-
this.rowControls.set(row.id, control);
|
|
82
|
-
}
|
|
83
|
-
return control;
|
|
84
|
-
}
|
|
85
108
|
addQuestion() {
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
109
|
+
const row = {
|
|
110
|
+
id: `row-${rowUid++}`,
|
|
111
|
+
name: '',
|
|
112
|
+
label: '',
|
|
113
|
+
placeholderText: '',
|
|
114
|
+
hintText: '',
|
|
115
|
+
type: this.questionTypes()[0],
|
|
116
|
+
required: true,
|
|
117
|
+
};
|
|
118
|
+
this.questions.update(rows => [...rows, row]);
|
|
119
|
+
// Una pregunta recién agregada está vacía: abrirla es el único paso
|
|
120
|
+
// siguiente posible, y dejarla cerrada la haría ver como una fila rota.
|
|
121
|
+
this.editingId.set(row.id);
|
|
122
|
+
}
|
|
123
|
+
toggleEdit(row) {
|
|
124
|
+
this.editingId.update(current => (current === row.id ? '' : row.id));
|
|
89
125
|
}
|
|
90
126
|
removeQuestion(row) {
|
|
91
|
-
this.rowControls.delete(row.id);
|
|
92
127
|
this.questions.update(rows => rows.filter(r => r.id !== row.id));
|
|
128
|
+
if (this.editingId() === row.id)
|
|
129
|
+
this.editingId.set('');
|
|
93
130
|
}
|
|
94
|
-
|
|
95
|
-
|
|
131
|
+
duplicate(row) {
|
|
132
|
+
const copy = {
|
|
133
|
+
...row,
|
|
134
|
+
id: `row-${rowUid++}`,
|
|
135
|
+
// Sin token propio la copia pisaría las respuestas del original: dos
|
|
136
|
+
// campos con el mismo `name` son el mismo campo para el backend.
|
|
137
|
+
name: this.formBuilder.uniqueFieldName(row.name || row.label, this.questions()),
|
|
138
|
+
options: row.options ? row.options.map(o => ({ ...o })) : undefined,
|
|
139
|
+
};
|
|
140
|
+
this.questions.update(rows => {
|
|
141
|
+
const index = rows.findIndex(r => r.id === row.id);
|
|
142
|
+
return [...rows.slice(0, index + 1), copy, ...rows.slice(index + 1)];
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
move(index, delta) {
|
|
146
|
+
const target = index + delta;
|
|
147
|
+
this.questions.update(rows => {
|
|
148
|
+
if (target < 0 || target >= rows.length)
|
|
149
|
+
return rows;
|
|
150
|
+
const next = [...rows];
|
|
151
|
+
[next[index], next[target]] = [next[target], next[index]];
|
|
152
|
+
return next;
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
applyQuestion(field) {
|
|
156
|
+
this.questions.update(rows => rows.map(r => r.id === field.id
|
|
157
|
+
? {
|
|
158
|
+
...field,
|
|
159
|
+
name: this.formBuilder.uniqueFieldName(field.name || field.label, rows.filter(o => o.id !== r.id)),
|
|
160
|
+
}
|
|
161
|
+
: r));
|
|
162
|
+
this.editingId.set('');
|
|
163
|
+
this.validationError.set('');
|
|
96
164
|
}
|
|
97
165
|
async save() {
|
|
98
166
|
if (this.saving())
|
|
99
167
|
return;
|
|
168
|
+
this.validationError.set('');
|
|
100
169
|
const title = this.titleControl.value.trim();
|
|
101
170
|
if (!title) {
|
|
102
171
|
this.titleControl.markAsTouched();
|
|
172
|
+
this.validationError.set(this.t('noTitle'));
|
|
103
173
|
return;
|
|
104
174
|
}
|
|
105
175
|
const rows = this.questions();
|
|
106
|
-
|
|
107
|
-
|
|
176
|
+
if (!rows.length) {
|
|
177
|
+
this.validationError.set(this.t('noQuestions'));
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (rows.some(r => !r.label.trim())) {
|
|
181
|
+
this.validationError.set(this.t('emptyQuestionLabel'));
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
// El editor ya lo valida al cerrar cada pregunta, pero una pregunta abierta
|
|
185
|
+
// (o cargada de una encuesta vieja) puede llegar acá sin opciones.
|
|
186
|
+
if (rows.some(r => FIELD_TYPES_WITH_OPTIONS.includes(r.type) && !r.options?.length)) {
|
|
187
|
+
this.validationError.set(this.t('missingOptions'));
|
|
108
188
|
return;
|
|
189
|
+
}
|
|
109
190
|
this.saving.set(true);
|
|
110
191
|
const fieldSchema = [];
|
|
111
192
|
rows.forEach((row, index) => {
|
|
112
|
-
const name = this.formBuilder.uniqueFieldName(
|
|
113
|
-
fieldSchema.push(this.formBuilder.createFieldSchema({
|
|
193
|
+
const name = this.formBuilder.uniqueFieldName(row.name || row.label, fieldSchema);
|
|
194
|
+
fieldSchema.push(this.formBuilder.createFieldSchema({
|
|
195
|
+
name,
|
|
196
|
+
label: row.label.trim(),
|
|
197
|
+
type: row.type,
|
|
198
|
+
required: row.required,
|
|
199
|
+
placeholderText: row.placeholderText,
|
|
200
|
+
hintText: row.hintText,
|
|
201
|
+
options: row.options,
|
|
202
|
+
}, index));
|
|
114
203
|
});
|
|
115
204
|
const typeId = this.props.typeId ?? `${this.props.typePrefix ?? DEFAULT_TYPE_PREFIX}:${this.formBuilder.toToken(title)}`;
|
|
116
205
|
const subtitle = this.subtitleControl.value.trim();
|
|
@@ -140,68 +229,84 @@ export class SurveyBuilderComponent {
|
|
|
140
229
|
});
|
|
141
230
|
}
|
|
142
231
|
}
|
|
143
|
-
|
|
144
|
-
return
|
|
232
|
+
rowFromField(f) {
|
|
233
|
+
return {
|
|
234
|
+
id: `row-${rowUid++}`,
|
|
235
|
+
name: f.name,
|
|
236
|
+
label: f.label ?? '',
|
|
237
|
+
placeholderText: f.placeholderText ?? '',
|
|
238
|
+
hintText: f.hintText ?? '',
|
|
239
|
+
type: f.type,
|
|
240
|
+
required: !!f.required,
|
|
241
|
+
options: f.options,
|
|
242
|
+
};
|
|
145
243
|
}
|
|
146
244
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SurveyBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
147
245
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SurveyBuilderComponent, isStandalone: true, selector: "val-survey-builder", inputs: { props: "props" }, outputs: { saved: "saved" }, ngImport: i0, template: `
|
|
148
246
|
<div class="survey-builder">
|
|
149
|
-
<
|
|
150
|
-
<val-title [props]="{ content: t('titleLabel'), size: 'small', color: 'dark', bold: false }" />
|
|
247
|
+
<val-form-field [label]="t('titleLabel')">
|
|
151
248
|
<val-text-input [props]="{ control: titleControl, placeholder: t('titlePlaceholder') }" />
|
|
152
|
-
</
|
|
153
|
-
<
|
|
154
|
-
<val-title [props]="{ content: t('subtitleLabel'), size: 'small', color: 'dark', bold: false }" />
|
|
249
|
+
</val-form-field>
|
|
250
|
+
<val-form-field [label]="t('subtitleLabel')">
|
|
155
251
|
<val-text-input [props]="{ control: subtitleControl, placeholder: t('subtitlePlaceholder') }" />
|
|
156
|
-
</
|
|
252
|
+
</val-form-field>
|
|
157
253
|
|
|
158
254
|
<div class="survey-builder__questions">
|
|
159
255
|
<span class="survey-builder__questions-label">{{ t('questionsLabel') }}</span>
|
|
160
256
|
|
|
161
|
-
@
|
|
257
|
+
@if (!questions().length) {
|
|
258
|
+
<p class="survey-builder__empty">{{ t('noQuestions') }}</p>
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
@for (row of questions(); track row.id; let i = $index; let first = $first; let last = $last) {
|
|
162
262
|
<div class="survey-builder__row">
|
|
163
|
-
<
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
/>
|
|
191
|
-
<val-button
|
|
192
|
-
[props]="{
|
|
193
|
-
token: 'q-remove-' + row.id,
|
|
194
|
-
text: t('removeQuestion'),
|
|
195
|
-
color: 'danger',
|
|
196
|
-
fill: 'clear',
|
|
197
|
-
shape: 'round',
|
|
198
|
-
size: 'small',
|
|
199
|
-
type: 'button',
|
|
200
|
-
state: 'ENABLED',
|
|
201
|
-
}"
|
|
202
|
-
(onClick)="removeQuestion(row)"
|
|
203
|
-
/>
|
|
263
|
+
<div class="survey-builder__row-head">
|
|
264
|
+
<div class="survey-builder__row-text">
|
|
265
|
+
<strong>{{ row.label || t('untitledQuestion') }}</strong>
|
|
266
|
+
<span>{{ typeLabel(row.type) }}{{ row.required ? ' · ' + t('requiredTag') : '' }}</span>
|
|
267
|
+
</div>
|
|
268
|
+
<div class="survey-builder__row-actions">
|
|
269
|
+
<val-button
|
|
270
|
+
[props]="iconAction('q-up-' + row.id, 'arrow-up-outline', t('moveUp'), first)"
|
|
271
|
+
(onClick)="move(i, -1)"
|
|
272
|
+
/>
|
|
273
|
+
<val-button
|
|
274
|
+
[props]="iconAction('q-down-' + row.id, 'arrow-down-outline', t('moveDown'), last)"
|
|
275
|
+
(onClick)="move(i, 1)"
|
|
276
|
+
/>
|
|
277
|
+
<val-button
|
|
278
|
+
[props]="iconAction('q-copy-' + row.id, 'copy-outline', t('duplicateQuestion'))"
|
|
279
|
+
(onClick)="duplicate(row)"
|
|
280
|
+
/>
|
|
281
|
+
<val-button
|
|
282
|
+
[props]="iconAction('q-edit-' + row.id, 'create-outline', t('editQuestion'))"
|
|
283
|
+
(onClick)="toggleEdit(row)"
|
|
284
|
+
/>
|
|
285
|
+
<val-button
|
|
286
|
+
[props]="iconAction('q-remove-' + row.id, 'trash-outline', t('removeQuestion'), false, 'danger')"
|
|
287
|
+
(onClick)="removeQuestion(row)"
|
|
288
|
+
/>
|
|
289
|
+
</div>
|
|
204
290
|
</div>
|
|
291
|
+
|
|
292
|
+
@if (editingId() === row.id) {
|
|
293
|
+
<div class="survey-builder__row-editor">
|
|
294
|
+
<val-field-schema-editor #editor [props]="editorProps(row)" (save)="applyQuestion($event)" />
|
|
295
|
+
<val-button
|
|
296
|
+
[props]="{
|
|
297
|
+
token: 'q-done-' + row.id,
|
|
298
|
+
text: t('doneEditing'),
|
|
299
|
+
color: 'dark',
|
|
300
|
+
fill: 'solid',
|
|
301
|
+
shape: 'round',
|
|
302
|
+
size: 'default',
|
|
303
|
+
type: 'button',
|
|
304
|
+
state: 'ENABLED',
|
|
305
|
+
}"
|
|
306
|
+
(onClick)="editor.submit()"
|
|
307
|
+
/>
|
|
308
|
+
</div>
|
|
309
|
+
}
|
|
205
310
|
</div>
|
|
206
311
|
}
|
|
207
312
|
|
|
@@ -221,6 +326,10 @@ export class SurveyBuilderComponent {
|
|
|
221
326
|
/>
|
|
222
327
|
</div>
|
|
223
328
|
|
|
329
|
+
@if (validationError()) {
|
|
330
|
+
<p class="survey-builder__error">{{ validationError() }}</p>
|
|
331
|
+
}
|
|
332
|
+
|
|
224
333
|
<val-button
|
|
225
334
|
[props]="{
|
|
226
335
|
token: 'survey-builder-save',
|
|
@@ -228,6 +337,7 @@ export class SurveyBuilderComponent {
|
|
|
228
337
|
color: 'dark',
|
|
229
338
|
fill: 'solid',
|
|
230
339
|
shape: 'round',
|
|
340
|
+
size: 'large',
|
|
231
341
|
expand: 'block',
|
|
232
342
|
type: 'button',
|
|
233
343
|
state: saving() ? 'WORKING' : 'ENABLED',
|
|
@@ -235,68 +345,82 @@ export class SurveyBuilderComponent {
|
|
|
235
345
|
(onClick)="save()"
|
|
236
346
|
/>
|
|
237
347
|
</div>
|
|
238
|
-
`, isInline: true, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-
|
|
348
|
+
`, isInline: true, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-builder__questions{display:flex;flex-direction:column;gap:12px}.survey-builder__questions-label{font-size:.8125rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ion-color-medium, #92949c)}.survey-builder__empty{margin:0;font-size:.875rem;color:var(--ion-color-medium, #92949c)}.survey-builder__row{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__row-head{display:flex;flex-direction:column;gap:8px}.survey-builder__row-text{display:flex;flex-direction:column;gap:2px;min-width:0}.survey-builder__row-text strong{color:var(--ion-text-color, #000);font-size:.9375rem}.survey-builder__row-text span{color:var(--ion-color-medium, #92949c);font-size:.8125rem}.survey-builder__row-actions{display:flex;gap:4px;flex-wrap:wrap}.survey-builder__row-editor{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .1))}.survey-builder__error{margin:0;color:var(--ion-color-danger);font-size:.875rem;font-weight:700}@media (min-width: 576px){.survey-builder__row-head{flex-direction:row;align-items:flex-start;justify-content:space-between}.survey-builder__row-text{flex:1}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["preset", "props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: FormFieldComponent, selector: "val-form-field", inputs: ["label"] }, { kind: "component", type: FieldSchemaEditorComponent, selector: "val-field-schema-editor", inputs: ["props"], outputs: ["save"] }] }); }
|
|
239
349
|
}
|
|
240
350
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SurveyBuilderComponent, decorators: [{
|
|
241
351
|
type: Component,
|
|
242
|
-
args: [{ selector: 'val-survey-builder', standalone: true, imports: [
|
|
352
|
+
args: [{ selector: 'val-survey-builder', standalone: true, imports: [
|
|
353
|
+
CommonModule,
|
|
354
|
+
ReactiveFormsModule,
|
|
355
|
+
TextInputComponent,
|
|
356
|
+
ButtonComponent,
|
|
357
|
+
FormFieldComponent,
|
|
358
|
+
FieldSchemaEditorComponent,
|
|
359
|
+
], template: `
|
|
243
360
|
<div class="survey-builder">
|
|
244
|
-
<
|
|
245
|
-
<val-title [props]="{ content: t('titleLabel'), size: 'small', color: 'dark', bold: false }" />
|
|
361
|
+
<val-form-field [label]="t('titleLabel')">
|
|
246
362
|
<val-text-input [props]="{ control: titleControl, placeholder: t('titlePlaceholder') }" />
|
|
247
|
-
</
|
|
248
|
-
<
|
|
249
|
-
<val-title [props]="{ content: t('subtitleLabel'), size: 'small', color: 'dark', bold: false }" />
|
|
363
|
+
</val-form-field>
|
|
364
|
+
<val-form-field [label]="t('subtitleLabel')">
|
|
250
365
|
<val-text-input [props]="{ control: subtitleControl, placeholder: t('subtitlePlaceholder') }" />
|
|
251
|
-
</
|
|
366
|
+
</val-form-field>
|
|
252
367
|
|
|
253
368
|
<div class="survey-builder__questions">
|
|
254
369
|
<span class="survey-builder__questions-label">{{ t('questionsLabel') }}</span>
|
|
255
370
|
|
|
256
|
-
@
|
|
371
|
+
@if (!questions().length) {
|
|
372
|
+
<p class="survey-builder__empty">{{ t('noQuestions') }}</p>
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
@for (row of questions(); track row.id; let i = $index; let first = $first; let last = $last) {
|
|
257
376
|
<div class="survey-builder__row">
|
|
258
|
-
<
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
/>
|
|
286
|
-
<val-button
|
|
287
|
-
[props]="{
|
|
288
|
-
token: 'q-remove-' + row.id,
|
|
289
|
-
text: t('removeQuestion'),
|
|
290
|
-
color: 'danger',
|
|
291
|
-
fill: 'clear',
|
|
292
|
-
shape: 'round',
|
|
293
|
-
size: 'small',
|
|
294
|
-
type: 'button',
|
|
295
|
-
state: 'ENABLED',
|
|
296
|
-
}"
|
|
297
|
-
(onClick)="removeQuestion(row)"
|
|
298
|
-
/>
|
|
377
|
+
<div class="survey-builder__row-head">
|
|
378
|
+
<div class="survey-builder__row-text">
|
|
379
|
+
<strong>{{ row.label || t('untitledQuestion') }}</strong>
|
|
380
|
+
<span>{{ typeLabel(row.type) }}{{ row.required ? ' · ' + t('requiredTag') : '' }}</span>
|
|
381
|
+
</div>
|
|
382
|
+
<div class="survey-builder__row-actions">
|
|
383
|
+
<val-button
|
|
384
|
+
[props]="iconAction('q-up-' + row.id, 'arrow-up-outline', t('moveUp'), first)"
|
|
385
|
+
(onClick)="move(i, -1)"
|
|
386
|
+
/>
|
|
387
|
+
<val-button
|
|
388
|
+
[props]="iconAction('q-down-' + row.id, 'arrow-down-outline', t('moveDown'), last)"
|
|
389
|
+
(onClick)="move(i, 1)"
|
|
390
|
+
/>
|
|
391
|
+
<val-button
|
|
392
|
+
[props]="iconAction('q-copy-' + row.id, 'copy-outline', t('duplicateQuestion'))"
|
|
393
|
+
(onClick)="duplicate(row)"
|
|
394
|
+
/>
|
|
395
|
+
<val-button
|
|
396
|
+
[props]="iconAction('q-edit-' + row.id, 'create-outline', t('editQuestion'))"
|
|
397
|
+
(onClick)="toggleEdit(row)"
|
|
398
|
+
/>
|
|
399
|
+
<val-button
|
|
400
|
+
[props]="iconAction('q-remove-' + row.id, 'trash-outline', t('removeQuestion'), false, 'danger')"
|
|
401
|
+
(onClick)="removeQuestion(row)"
|
|
402
|
+
/>
|
|
403
|
+
</div>
|
|
299
404
|
</div>
|
|
405
|
+
|
|
406
|
+
@if (editingId() === row.id) {
|
|
407
|
+
<div class="survey-builder__row-editor">
|
|
408
|
+
<val-field-schema-editor #editor [props]="editorProps(row)" (save)="applyQuestion($event)" />
|
|
409
|
+
<val-button
|
|
410
|
+
[props]="{
|
|
411
|
+
token: 'q-done-' + row.id,
|
|
412
|
+
text: t('doneEditing'),
|
|
413
|
+
color: 'dark',
|
|
414
|
+
fill: 'solid',
|
|
415
|
+
shape: 'round',
|
|
416
|
+
size: 'default',
|
|
417
|
+
type: 'button',
|
|
418
|
+
state: 'ENABLED',
|
|
419
|
+
}"
|
|
420
|
+
(onClick)="editor.submit()"
|
|
421
|
+
/>
|
|
422
|
+
</div>
|
|
423
|
+
}
|
|
300
424
|
</div>
|
|
301
425
|
}
|
|
302
426
|
|
|
@@ -316,6 +440,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
316
440
|
/>
|
|
317
441
|
</div>
|
|
318
442
|
|
|
443
|
+
@if (validationError()) {
|
|
444
|
+
<p class="survey-builder__error">{{ validationError() }}</p>
|
|
445
|
+
}
|
|
446
|
+
|
|
319
447
|
<val-button
|
|
320
448
|
[props]="{
|
|
321
449
|
token: 'survey-builder-save',
|
|
@@ -323,6 +451,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
323
451
|
color: 'dark',
|
|
324
452
|
fill: 'solid',
|
|
325
453
|
shape: 'round',
|
|
454
|
+
size: 'large',
|
|
326
455
|
expand: 'block',
|
|
327
456
|
type: 'button',
|
|
328
457
|
state: saving() ? 'WORKING' : 'ENABLED',
|
|
@@ -330,10 +459,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
330
459
|
(onClick)="save()"
|
|
331
460
|
/>
|
|
332
461
|
</div>
|
|
333
|
-
`, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-
|
|
462
|
+
`, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-builder__questions{display:flex;flex-direction:column;gap:12px}.survey-builder__questions-label{font-size:.8125rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ion-color-medium, #92949c)}.survey-builder__empty{margin:0;font-size:.875rem;color:var(--ion-color-medium, #92949c)}.survey-builder__row{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__row-head{display:flex;flex-direction:column;gap:8px}.survey-builder__row-text{display:flex;flex-direction:column;gap:2px;min-width:0}.survey-builder__row-text strong{color:var(--ion-text-color, #000);font-size:.9375rem}.survey-builder__row-text span{color:var(--ion-color-medium, #92949c);font-size:.8125rem}.survey-builder__row-actions{display:flex;gap:4px;flex-wrap:wrap}.survey-builder__row-editor{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .1))}.survey-builder__error{margin:0;color:var(--ion-color-danger);font-size:.875rem;font-weight:700}@media (min-width: 576px){.survey-builder__row-head{flex-direction:row;align-items:flex-start;justify-content:space-between}.survey-builder__row-text{flex:1}}\n"] }]
|
|
334
463
|
}], ctorParameters: () => [], propDecorators: { props: [{
|
|
335
464
|
type: Input
|
|
336
465
|
}], saved: [{
|
|
337
466
|
type: Output
|
|
338
467
|
}] } });
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9zdXJ2ZXktYnVpbGRlci9zdXJ2ZXktYnVpbGRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ3BHLE9BQU8sRUFBa0IsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMzRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUU1RCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUM7QUFDbEMsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQUM7QUFFckMsSUFBSSxN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RSxrQkFBa0Isd0ZBQUUsZUFBZSwwR0FBRSxjQUFjOzs0RkF5SXJGLHNCQUFzQjtrQkE1SWxDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDLFlBQ3ZGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkZUO3dEQThDUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ2EsS0FBSztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXF1ZXN0cy9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdEZvcm1CdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3JlcXVlc3RzL3JlcXVlc3QtZm9ybS1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmllbGRTY2hlbWFEZWYsIEZJRUxEX1RZUEVfRU1PSklfUkFUSU5HIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVxdWVzdHMvdHlwZXMnO1xuaW1wb3J0IHsgVmFsdGVjaEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy92YWx0ZWNoLWVycm9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV4dElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3RleHQtaW5wdXQvdGV4dC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90aXRsZS90aXRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3VydmV5QnVpbGRlck1ldGFkYXRhLCBTdXJ2ZXlCdWlsZGVyU2F2ZUV2ZW50LCBTdXJ2ZXlRdWVzdGlvblJvdyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgU1VSVkVZX0JVSUxERVJfSTE4TiB9IGZyb20gJy4vc3VydmV5LWJ1aWxkZXIuaTE4bic7XG5cbmNvbnN0IE5BTUVTUEFDRSA9ICdTdXJ2ZXlCdWlsZGVyJztcbmNvbnN0IERFRkFVTFRfVFlQRV9QUkVGSVggPSAnc3VydmV5JztcblxubGV0IHJvd1VpZCA9IDA7XG5cbi8qKlxuICogdmFsLXN1cnZleS1idWlsZGVyXG4gKlxuICogQXV0b3LDrWEgZGUgdW5hIGVuY3Vlc3RhOiB0w610dWxvLCBzdWJ0w610dWxvLCBwcmVndW50YXMg4oCUIGFybWEgbyBhY3R1YWxpemEgdW5cbiAqIGBSZXF1ZXN0VHlwZUNvbmZpZ2AgY29uIGBUeXBlOiBcIjxwcmVmaXg+OjxzbHVnPlwiYCAoQURSLTA5MiksIGBza2lwUmV2aWV3OlxuICogdHJ1ZWAgKGNhZGEgcmVzcHVlc3RhIHNlIGFncmVnYSwgbm8gc2UgcmV2aXNhIHVuYSBwb3IgdW5hKSB5IGVsIGBFbnRpdHlSZWZgXG4gKiBxdWUgbGUgcGFzYSBlbCBjb25zdW1lciAoZWouIGVsIGV2ZW50byBkZSBiaW5nbyBkdWXDsW8gZGUgbGEgZW5jdWVzdGEpLlxuICpcbiAqIHYxIHNvbG8gb2ZyZWNlIGxvcyBkb3MgdGlwb3MgZGUgcHJlZ3VudGEgcXVlIGB2YWwtc3VydmV5LXJlc3BvbnNlYCBzYWJlXG4gKiByZW5kZXJpemFyOiBlbW9qaS1yYXRpbmcgeSB0ZXh0byBsaWJyZS4gUmV1c2EgYFJlcXVlc3RGb3JtQnVpbGRlclNlcnZpY2VgXG4gKiAoYHRvVG9rZW5gL2B1bmlxdWVGaWVsZE5hbWVgL2BjcmVhdGVGaWVsZFNjaGVtYWApIHBhcmEgZWwgbm9tYnJlIGRlIGNhbXBvIOKAlFxuICogZXMgbGEgbWlzbWEgcHJpbWl0aXZhIHF1ZSB5YSBhcm1hIGVsIGZvcm11bGFyaW8gZGluw6FtaWNvIGRlIGByZXF1ZXN0YCwgbm9cbiAqIHVuYSByZWltcGxlbWVudGFjacOzbi5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXN1cnZleS1idWlsZGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVGV4dElucHV0Q29tcG9uZW50LCBCdXR0b25Db21wb25lbnQsIFRpdGxlQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fZmllbGRcIj5cbiAgICAgICAgPHZhbC10aXRsZSBbcHJvcHNdPVwieyBjb250ZW50OiB0KCd0aXRsZUxhYmVsJyksIHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycsIGJvbGQ6IGZhbHNlIH1cIiAvPlxuICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogdGl0bGVDb250cm9sLCBwbGFjZWhvbGRlcjogdCgndGl0bGVQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ZpZWxkXCI+XG4gICAgICAgIDx2YWwtdGl0bGUgW3Byb3BzXT1cInsgY29udGVudDogdCgnc3VidGl0bGVMYWJlbCcpLCBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBib2xkOiBmYWxzZSB9XCIgLz5cbiAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IHN1YnRpdGxlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ3N1YnRpdGxlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9uc1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMtbGFiZWxcIj57eyB0KCdxdWVzdGlvbnNMYWJlbCcpIH19PC9zcGFuPlxuXG4gICAgICAgIEBmb3IgKHJvdyBvZiBxdWVzdGlvbnMoKTsgdHJhY2sgcm93LmlkKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19yb3dcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiByb3dMYWJlbENvbnRyb2wocm93KSwgcGxhY2Vob2xkZXI6IHQoJ3F1ZXN0aW9uTGFiZWxQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICB0b2tlbjogJ3EtdHlwZS1lbW9qaS0nICsgcm93LmlkLFxuICAgICAgICAgICAgICAgICAgdGV4dDogdCgndHlwZUVtb2ppJyksXG4gICAgICAgICAgICAgICAgICBjb2xvcjogcm93LnR5cGUgPT09IGVtb2ppVHlwZSA/ICdwcmltYXJ5JyA6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgZmlsbDogcm93LnR5cGUgPT09IGVtb2ppVHlwZSA/ICdzb2xpZCcgOiAnb3V0bGluZScsXG4gICAgICAgICAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwic2V0VHlwZShyb3csIGVtb2ppVHlwZSlcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICB0b2tlbjogJ3EtdHlwZS10ZXh0LScgKyByb3cuaWQsXG4gICAgICAgICAgICAgICAgICB0ZXh0OiB0KCd0eXBlVGV4dCcpLFxuICAgICAgICAgICAgICAgICAgY29sb3I6IHJvdy50eXBlID09PSAnVEVYVEFSRUEnID8gJ3ByaW1hcnknIDogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBmaWxsOiByb3cudHlwZSA9PT0gJ1RFWFRBUkVBJyA/ICdzb2xpZCcgOiAnb3V0bGluZScsXG4gICAgICAgICAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwic2V0VHlwZShyb3csICdURVhUQVJFQScpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgdG9rZW46ICdxLXJlbW92ZS0nICsgcm93LmlkLFxuICAgICAgICAgICAgICAgICAgdGV4dDogdCgncmVtb3ZlUXVlc3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFuZ2VyJyxcbiAgICAgICAgICAgICAgICAgIGZpbGw6ICdjbGVhcicsXG4gICAgICAgICAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwicmVtb3ZlUXVlc3Rpb24ocm93KVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgIHRva2VuOiAnc3VydmV5LWJ1aWxkZXItYWRkLXF1ZXN0aW9uJyxcbiAgICAgICAgICAgIHRleHQ6IHQoJ2FkZFF1ZXN0aW9uJyksXG4gICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICAgICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgICBpY29uOiB7IG5hbWU6ICdhZGQtb3V0bGluZScsIHNsb3Q6ICdzdGFydCcgfSxcbiAgICAgICAgICB9XCJcbiAgICAgICAgICAob25DbGljayk9XCJhZGRRdWVzdGlvbigpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8dmFsLWJ1dHRvblxuICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgIHRva2VuOiAnc3VydmV5LWJ1aWxkZXItc2F2ZScsXG4gICAgICAgICAgdGV4dDogdCgnc2F2ZScpLFxuICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgZmlsbDogJ3NvbGlkJyxcbiAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgICBleHBhbmQ6ICdibG9jaycsXG4gICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgc3RhdGU6IHNhdmluZygpID8gJ1dPUktJTkcnIDogJ0VOQUJMRUQnLFxuICAgICAgICB9XCJcbiAgICAgICAgKG9uQ2xpY2spPVwic2F2ZSgpXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDE2cHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2ZpZWxkIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb25zLWxhYmVsIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjOTI5NDljKTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlvbi1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jYXJkLWJhY2tncm91bmQsIHZhcigtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKSk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy1hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlCdWlsZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcHJvcHM6IFN1cnZleUJ1aWxkZXJNZXRhZGF0YSA9IHt9O1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFN1cnZleUJ1aWxkZXJTYXZlRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0cyA9IGluamVjdChSZXF1ZXN0U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXIgPSBpbmplY3QoUmVxdWVzdEZvcm1CdWlsZGVyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JzID0gaW5qZWN0KFZhbHRlY2hFcnJvclNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IGVtb2ppVHlwZSA9IEZJRUxEX1RZUEVfRU1PSklfUkFUSU5HO1xuICByZWFkb25seSB0aXRsZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHJlYWRvbmx5IHN1YnRpdGxlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgcXVlc3Rpb25zID0gc2lnbmFsPFN1cnZleVF1ZXN0aW9uUm93W10+KFtdKTtcbiAgcmVhZG9ubHkgc2F2aW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJvd0NvbnRyb2xzID0gbmV3IE1hcDxzdHJpbmcsIEZvcm1Db250cm9sPHN0cmluZz4+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmkxOG4uaGFzTmFtZXNwYWNlKE5BTUVTUEFDRSkpIHtcbiAgICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKE5BTUVTUEFDRSwgU1VSVkVZX0JVSUxERVJfSTE4Tik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnR5cGVJZCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjZmcgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnJlcXVlc3RzLmdldFJlcXVlc3RUeXBlKHRoaXMucHJvcHMudHlwZUlkKSk7XG4gICAgICB0aGlzLnRpdGxlQ29udHJvbC5zZXRWYWx1ZShjZmcubGFiZWwpO1xuICAgICAgdGhpcy5zdWJ0aXRsZUNvbnRyb2wuc2V0VmFsdWUoY2ZnLnN1YnRpdGxlID8/ICcnKTtcbiAgICAgIHRoaXMucXVlc3Rpb25zLnNldChbLi4uY2ZnLmZpZWxkU2NoZW1hXS5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcikubWFwKGYgPT4gdGhpcy5yb3dGcm9tRmllbGQoZikpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgY29udGV4dDogJ3N1cnZleUJ1aWxkZXIubG9hZCcsXG4gICAgICAgIGZhbGxiYWNrS2V5OiAnbG9hZEVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogTkFNRVNQQUNFLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByb3dGcm9tRmllbGQoZjogRmllbGRTY2hlbWFEZWYpOiBTdXJ2ZXlRdWVzdGlvblJvdyB7XG4gICAgY29uc3QgaWQgPSBgcm93LSR7cm93VWlkKyt9YDtcbiAgICB0aGlzLnJvd0NvbnRyb2xzLnNldChpZCwgbmV3IEZvcm1Db250cm9sKGYubGFiZWwgPz8gJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSkpO1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIGxhYmVsOiBmLmxhYmVsID8/ICcnLFxuICAgICAgdHlwZTogZi50eXBlID09PSBGSUVMRF9UWVBFX0VNT0pJX1JBVElORyA/ICdFTU9KSV9SQVRJTkcnIDogJ1RFWFRBUkVBJyxcbiAgICAgIHJlcXVpcmVkOiAhIWYucmVxdWlyZWQsXG4gICAgfTtcbiAgfVxuXG4gIHJvd0xhYmVsQ29udHJvbChyb3c6IFN1cnZleVF1ZXN0aW9uUm93KTogRm9ybUNvbnRyb2w8c3RyaW5nPiB7XG4gICAgbGV0IGNvbnRyb2wgPSB0aGlzLnJvd0NvbnRyb2xzLmdldChyb3cuaWQpO1xuICAgIGlmICghY29udHJvbCkge1xuICAgICAgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChyb3cubGFiZWwsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gICAgICB0aGlzLnJvd0NvbnRyb2xzLnNldChyb3cuaWQsIGNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gY29udHJvbDtcbiAgfVxuXG4gIGFkZFF1ZXN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gYHJvdy0ke3Jvd1VpZCsrfWA7XG4gICAgdGhpcy5yb3dDb250cm9scy5zZXQoaWQsIG5ldyBGb3JtQ29udHJvbCgnJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSk7XG4gICAgdGhpcy5xdWVzdGlvbnMudXBkYXRlKHJvd3MgPT4gWy4uLnJvd3MsIHsgaWQsIGxhYmVsOiAnJywgdHlwZTogJ1RFWFRBUkVBJywgcmVxdWlyZWQ6IHRydWUgfV0pO1xuICB9XG5cbiAgcmVtb3ZlUXVlc3Rpb24ocm93OiBTdXJ2ZXlRdWVzdGlvblJvdyk6IHZvaWQge1xuICAgIHRoaXMucm93Q29udHJvbHMuZGVsZXRlKHJvdy5pZCk7XG4gICAgdGhpcy5xdWVzdGlvbnMudXBkYXRlKHJvd3MgPT4gcm93cy5maWx0ZXIociA9PiByLmlkICE9PSByb3cuaWQpKTtcbiAgfVxuXG4gIHNldFR5cGUocm93OiBTdXJ2ZXlRdWVzdGlvblJvdywgdHlwZTogU3VydmV5UXVlc3Rpb25Sb3dbJ3R5cGUnXSk6IHZvaWQge1xuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+IHJvd3MubWFwKHIgPT4gKHIuaWQgPT09IHJvdy5pZCA/IHsgLi4uciwgdHlwZSB9IDogcikpKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc2F2aW5nKCkpIHJldHVybjtcblxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy50aXRsZUNvbnRyb2wudmFsdWUudHJpbSgpO1xuICAgIGlmICghdGl0bGUpIHtcbiAgICAgIHRoaXMudGl0bGVDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByb3dzID0gdGhpcy5xdWVzdGlvbnMoKTtcbiAgICBjb25zdCBsYWJlbHMgPSByb3dzLm1hcChyID0+ICh0aGlzLnJvd0NvbnRyb2xzLmdldChyLmlkKT8udmFsdWUgPz8gJycpLnRyaW0oKSk7XG4gICAgaWYgKHJvd3MubGVuZ3RoID09PSAwIHx8IGxhYmVscy5zb21lKGwgPT4gIWwpKSByZXR1cm47XG5cbiAgICB0aGlzLnNhdmluZy5zZXQodHJ1ZSk7XG5cbiAgICBjb25zdCBmaWVsZFNjaGVtYTogRmllbGRTY2hlbWFEZWZbXSA9IFtdO1xuICAgIHJvd3MuZm9yRWFjaCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZm9ybUJ1aWxkZXIudW5pcXVlRmllbGROYW1lKGxhYmVsc1tpbmRleF0sIGZpZWxkU2NoZW1hKTtcbiAgICAgIGZpZWxkU2NoZW1hLnB1c2goXG4gICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY3JlYXRlRmllbGRTY2hlbWEoXG4gICAgICAgICAgeyBuYW1lLCBsYWJlbDogbGFiZWxzW2luZGV4XSwgdHlwZTogcm93LnR5cGUsIHJlcXVpcmVkOiByb3cucmVxdWlyZWQgfSxcbiAgICAgICAgICBpbmRleFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdHlwZUlkID1cbiAgICAgIHRoaXMucHJvcHMudHlwZUlkID8/IGAke3RoaXMucHJvcHMudHlwZVByZWZpeCA/PyBERUZBVUxUX1RZUEVfUFJFRklYfToke3RoaXMuZm9ybUJ1aWxkZXIudG9Ub2tlbih0aXRsZSl9YDtcbiAgICBjb25zdCBzdWJ0aXRsZSA9IHRoaXMuc3VidGl0bGVDb250cm9sLnZhbHVlLnRyaW0oKTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBsYWJlbDogdGl0bGUsXG4gICAgICBzdWJ0aXRsZSxcbiAgICAgIGVudGl0eVJlZjogdGhpcy5wcm9wcy5lbnRpdHlSZWYsXG4gICAgICBza2lwUmV2aWV3OiB0cnVlLFxuICAgICAgZmllbGRTY2hlbWEsXG4gICAgICBhbGxvd0Fub255bW91czogdGhpcy5wcm9wcy5hbGxvd0Fub255bW91cyA/PyB0cnVlLFxuICAgICAgdmlzaWJpbGl0eTogdGhpcy5wcm9wcy52aXNpYmlsaXR5ID8/ICgnUFVCTElDJyBhcyBjb25zdCksXG4gICAgfTtcblxuICAgIGNvbnN0IGNhbGwkID0gdGhpcy5wcm9wcy50eXBlSWRcbiAgICAgID8gdGhpcy5yZXF1ZXN0cy51cGRhdGVSZXF1ZXN0VHlwZSh0aGlzLnByb3BzLnR5cGVJZCwgcGF5bG9hZClcbiAgICAgIDogdGhpcy5yZXF1ZXN0cy5jcmVhdGVSZXF1ZXN0VHlwZSh7IC4uLnBheWxvYWQsIHR5cGVJZCB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0eXBlQ29uZmlnID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oY2FsbCQpO1xuICAgICAgdGhpcy5zYXZpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuc2F2ZWQuZW1pdCh7IHR5cGVDb25maWcgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNhdmluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnc3VydmV5QnVpbGRlci5zYXZlJyxcbiAgICAgICAgZmFsbGJhY2tLZXk6ICdzYXZlRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiBOQU1FU1BBQ0UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCBOQU1FU1BBQ0UpO1xuICB9XG59XG4iXX0=
|
|
468
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9zdXJ2ZXktYnVpbGRlci9zdXJ2ZXktYnVpbGRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBRXBHLE9BQU8sRUFBa0IsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLDBCQUEwQixHQUMzQixNQUFNLHNEQUFzRCxDQUFDO0FBQzlELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRTNGLE9BQU8sRUFBaUQscUJB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Q0FBQyxJQUFJO1lBQ1osS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNwQixlQUFlLEVBQUUsQ0FBQyxDQUFDLGVBQWUsSUFBSSxFQUFFO1lBQ3hDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLEVBQUU7WUFDMUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1lBQ1osUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtZQUN0QixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87U0FDbkIsQ0FBQztJQUNKLENBQUM7K0dBbFBVLHNCQUFzQjttR0FBdEIsc0JBQXNCLHVJQWpNdkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1R1QsNitDQTlHQyxZQUFZLDhCQUNaLG1CQUFtQiwrQkFDbkIsa0JBQWtCLHdGQUNsQixlQUFlLDBHQUNmLGtCQUFrQiw4RUFDbEIsMEJBQTBCOzs0RkFtTWpCLHNCQUFzQjtrQkE1TWxDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsMEJBQTBCO3FCQUMzQixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUdUO3dEQTJGUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ2EsS0FBSztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXF1ZXN0cy9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdEZvcm1CdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3JlcXVlc3RzL3JlcXVlc3QtZm9ybS1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmllbGRTY2hlbWFEZWYgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXF1ZXN0cy90eXBlcyc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSwgQ29tcG9uZW50U3RhdGVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDb2xvciB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IFZhbHRlY2hFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lcnJvcnMvdmFsdGVjaC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IFRleHRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy90ZXh0LWlucHV0L3RleHQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEZJRUxEX1RZUEVTX1dJVEhfT1BUSU9OUyxcbiAgRmllbGRTY2hlbWFFZGl0b3JDb21wb25lbnQsXG59IGZyb20gJy4uL2ZpZWxkLXNjaGVtYS1lZGl0b3IvZmllbGQtc2NoZW1hLWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRklFTERfU0NIRU1BX0VESVRPUl9JMThOIH0gZnJvbSAnLi4vZmllbGQtc2NoZW1hLWVkaXRvci9maWVsZC1zY2hlbWEtZWRpdG9yLmkxOG4nO1xuaW1wb3J0IHsgRWRpdGFibGVGaWVsZERlZiwgRmllbGRTY2hlbWFFZGl0b3JNZXRhZGF0YSB9IGZyb20gJy4uL2ZpZWxkLXNjaGVtYS1lZGl0b3IvdHlwZXMnO1xuaW1wb3J0IHsgU3VydmV5QnVpbGRlck1ldGFkYXRhLCBTdXJ2ZXlCdWlsZGVyU2F2ZUV2ZW50LCBTVVJWRVlfUVVFU1RJT05fVFlQRVMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFNVUlZFWV9CVUlMREVSX0kxOE4gfSBmcm9tICcuL3N1cnZleS1idWlsZGVyLmkxOG4nO1xuXG5jb25zdCBOQU1FU1BBQ0UgPSAnU3VydmV5QnVpbGRlcic7XG5jb25zdCBFRElUT1JfTkFNRVNQQUNFID0gJ0ZpZWxkU2NoZW1hRWRpdG9yJztcbmNvbnN0IERFRkFVTFRfVFlQRV9QUkVGSVggPSAnc3VydmV5JztcblxubGV0IHJvd1VpZCA9IDA7XG5cbi8qKlxuICogdmFsLXN1cnZleS1idWlsZGVyXG4gKlxuICogQXV0b3LDrWEgZGUgdW5hIGVuY3Vlc3RhOiB0w610dWxvLCBzdWJ0w610dWxvLCBwcmVndW50YXMg4oCUIGFybWEgbyBhY3R1YWxpemEgdW5cbiAqIGBSZXF1ZXN0VHlwZUNvbmZpZ2AgY29uIGBUeXBlOiBcIjxwcmVmaXg+OjxzbHVnPlwiYCAoQURSLTA5MiksIGBza2lwUmV2aWV3OlxuICogdHJ1ZWAgKGNhZGEgcmVzcHVlc3RhIHNlIGFncmVnYSwgbm8gc2UgcmV2aXNhIHVuYSBwb3IgdW5hKSB5IGVsIGBFbnRpdHlSZWZgXG4gKiBxdWUgbGUgcGFzYSBlbCBjb25zdW1lciAoZWouIGVsIGV2ZW50byBkZSBiaW5nbyBkdWXDsW8gZGUgbGEgZW5jdWVzdGEpLlxuICpcbiAqIENhZGEgcHJlZ3VudGEgc2UgZWRpdGEgY29uIGB2YWwtZmllbGQtc2NoZW1hLWVkaXRvcmAsIGVsIG1pc21vIGVkaXRvciBxdWUgdXNhXG4gKiBlbCBjaGVja291dCBkZSBiaW5nbyDigJQgZGUgYWjDrSBxdWUgdW5hIHByZWd1bnRhIHRlbmdhIHRpcG8sIHBsYWNlaG9sZGVyLCBub3RhXG4gKiB5IG9wY2lvbmVzLCBubyBzb2xvIHRleHRvLiBMYSB2MSBkZSBlc3RlIGNvbXBvbmVudGUgdGVuw61hIHN1IHByb3BpbyBlZGl0b3JcbiAqIHBvYnJlIChkb3MgdGlwb3MsIHNpbiBvcGNpb25lcyk7IGxhIEZhc2UgNSBkZWwgQURSLTA5MiBsbyByZWVtcGxhesOzIHBvciBlbFxuICogb3JnYW5pc20gY29tcGFydGlkbyBlbiB2ZXogZGUgbWVqb3JhcmxvIHBvciBkdXBsaWNhZG8uXG4gKlxuICogRWwgY2F0w6Fsb2dvIHF1ZSBvZnJlY2Ugc2FsZSBkZSBgU1VSVkVZX1FVRVNUSU9OX1RZUEVTYCDigJQgYWNvdGFkbyBhIGxvIHF1ZVxuICogYHZhbC1zdXJ2ZXktcmVzcG9uc2VgIHNhYmUgcmVuZGVyaXphciwgbm8gYSBsbyBxdWUgZWwgZWRpdG9yIHNhYmUgZWRpdGFyLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtc3VydmV5LWJ1aWxkZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVGV4dElucHV0Q29tcG9uZW50LFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBGb3JtRmllbGRDb21wb25lbnQsXG4gICAgRmllbGRTY2hlbWFFZGl0b3JDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyXCI+XG4gICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3RpdGxlTGFiZWwnKVwiPlxuICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogdGl0bGVDb250cm9sLCBwbGFjZWhvbGRlcjogdCgndGl0bGVQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnc3VidGl0bGVMYWJlbCcpXCI+XG4gICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBzdWJ0aXRsZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdzdWJ0aXRsZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9uc1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMtbGFiZWxcIj57eyB0KCdxdWVzdGlvbnNMYWJlbCcpIH19PC9zcGFuPlxuXG4gICAgICAgIEBpZiAoIXF1ZXN0aW9ucygpLmxlbmd0aCkge1xuICAgICAgICAgIDxwIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2VtcHR5XCI+e3sgdCgnbm9RdWVzdGlvbnMnKSB9fTwvcD5cbiAgICAgICAgfVxuXG4gICAgICAgIEBmb3IgKHJvdyBvZiBxdWVzdGlvbnMoKTsgdHJhY2sgcm93LmlkOyBsZXQgaSA9ICRpbmRleDsgbGV0IGZpcnN0ID0gJGZpcnN0OyBsZXQgbGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcm93LWhlYWRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19yb3ctdGV4dFwiPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcm93LmxhYmVsIHx8IHQoJ3VudGl0bGVkUXVlc3Rpb24nKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHR5cGVMYWJlbChyb3cudHlwZSkgfX17eyByb3cucmVxdWlyZWQgPyAnIMK3ICcgKyB0KCdyZXF1aXJlZFRhZycpIDogJycgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3Jvdy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJpY29uQWN0aW9uKCdxLXVwLScgKyByb3cuaWQsICdhcnJvdy11cC1vdXRsaW5lJywgdCgnbW92ZVVwJyksIGZpcnN0KVwiXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJtb3ZlKGksIC0xKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cImljb25BY3Rpb24oJ3EtZG93bi0nICsgcm93LmlkLCAnYXJyb3ctZG93bi1vdXRsaW5lJywgdCgnbW92ZURvd24nKSwgbGFzdClcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwibW92ZShpLCAxKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cImljb25BY3Rpb24oJ3EtY29weS0nICsgcm93LmlkLCAnY29weS1vdXRsaW5lJywgdCgnZHVwbGljYXRlUXVlc3Rpb24nKSlcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZHVwbGljYXRlKHJvdylcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJpY29uQWN0aW9uKCdxLWVkaXQtJyArIHJvdy5pZCwgJ2NyZWF0ZS1vdXRsaW5lJywgdCgnZWRpdFF1ZXN0aW9uJykpXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInRvZ2dsZUVkaXQocm93KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cImljb25BY3Rpb24oJ3EtcmVtb3ZlLScgKyByb3cuaWQsICd0cmFzaC1vdXRsaW5lJywgdCgncmVtb3ZlUXVlc3Rpb24nKSwgZmFsc2UsICdkYW5nZXInKVwiXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJyZW1vdmVRdWVzdGlvbihyb3cpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICBAaWYgKGVkaXRpbmdJZCgpID09PSByb3cuaWQpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19yb3ctZWRpdG9yXCI+XG4gICAgICAgICAgICAgICAgPHZhbC1maWVsZC1zY2hlbWEtZWRpdG9yICNlZGl0b3IgW3Byb3BzXT1cImVkaXRvclByb3BzKHJvdylcIiAoc2F2ZSk9XCJhcHBseVF1ZXN0aW9uKCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICB0b2tlbjogJ3EtZG9uZS0nICsgcm93LmlkLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0KCdkb25lRWRpdGluZycpLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiAnc29saWQnLFxuICAgICAgICAgICAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGU6ICdFTkFCTEVEJyxcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZWRpdG9yLnN1Ym1pdCgpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgIHRva2VuOiAnc3VydmV5LWJ1aWxkZXItYWRkLXF1ZXN0aW9uJyxcbiAgICAgICAgICAgIHRleHQ6IHQoJ2FkZFF1ZXN0aW9uJyksXG4gICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICAgICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgICBpY29uOiB7IG5hbWU6ICdhZGQtb3V0bGluZScsIHNsb3Q6ICdzdGFydCcgfSxcbiAgICAgICAgICB9XCJcbiAgICAgICAgICAob25DbGljayk9XCJhZGRRdWVzdGlvbigpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKHZhbGlkYXRpb25FcnJvcigpKSB7XG4gICAgICAgIDxwIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2Vycm9yXCI+e3sgdmFsaWRhdGlvbkVycm9yKCkgfX08L3A+XG4gICAgICB9XG5cbiAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgdG9rZW46ICdzdXJ2ZXktYnVpbGRlci1zYXZlJyxcbiAgICAgICAgICB0ZXh0OiB0KCdzYXZlJyksXG4gICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICBmaWxsOiAnc29saWQnLFxuICAgICAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICAgICAgZXhwYW5kOiAnYmxvY2snLFxuICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgIHN0YXRlOiBzYXZpbmcoKSA/ICdXT1JLSU5HJyA6ICdFTkFCTEVEJyxcbiAgICAgICAgfVwiXG4gICAgICAgIChvbkNsaWNrKT1cInNhdmUoKVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxNnB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9ucy1sYWJlbCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNGVtO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2VtcHR5IHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3JvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdmFsLXJhZGl1cy1tZCwgMTJweCk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jYXJkLWJhY2tncm91bmQsIHZhcigtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKSk7XG4gICAgICB9XG4gICAgICAvKiBNb2JpbGUtZmlyc3Q6IGVsIHRleHRvIGRlIGxhIHByZWd1bnRhIHkgc3VzIGFjY2lvbmVzIGFwaWxhZG9zLiBFbiBmaWxhXG4gICAgICAgICBmaWphLCBjaW5jbyBib3RvbmVzIGxlIGNvbWVuIGVsIGFuY2hvIGFsIHRleHRvIHkgbG8gcGFydGVuIGVuIG11Y2hhc1xuICAgICAgICAgbMOtbmVhcyBhbmdvc3RhcyDigJQganVzdG8gZW4gZWwgdmlld3BvcnQgZG9uZGUgbcOhcyBzZSB1c2EuICovXG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy1oZWFkIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy10ZXh0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAycHg7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcm93LXRleHQgc3Ryb25nIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy10ZXh0IHNwYW4ge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSwgIzkyOTQ5Yyk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yb3ctYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy1lZGl0b3Ige1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxMnB4O1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fZXJyb3Ige1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cbiAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xuICAgICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy1oZWFkIHtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgfVxuICAgICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy10ZXh0IHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU3VydmV5QnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHByb3BzOiBTdXJ2ZXlCdWlsZGVyTWV0YWRhdGEgPSB7fTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNhdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxTdXJ2ZXlCdWlsZGVyU2F2ZUV2ZW50PigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdHMgPSBpbmplY3QoUmVxdWVzdFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyID0gaW5qZWN0KFJlcXVlc3RGb3JtQnVpbGRlclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9ycyA9IGluamVjdChWYWx0ZWNoRXJyb3JTZXJ2aWNlKTtcblxuICByZWFkb25seSB0aXRsZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHJlYWRvbmx5IHN1YnRpdGxlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgcXVlc3Rpb25zID0gc2lnbmFsPEVkaXRhYmxlRmllbGREZWZbXT4oW10pO1xuICByZWFkb25seSBlZGl0aW5nSWQgPSBzaWduYWwoJycpO1xuICByZWFkb25seSB2YWxpZGF0aW9uRXJyb3IgPSBzaWduYWwoJycpO1xuICByZWFkb25seSBzYXZpbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pMThuLmhhc05hbWVzcGFjZShOQU1FU1BBQ0UpKSB7XG4gICAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhOQU1FU1BBQ0UsIFNVUlZFWV9CVUlMREVSX0kxOE4pO1xuICAgIH1cbiAgICAvLyBFbCBub21icmUgZGVsIHRpcG8gZGUgY2FkYSBwcmVndW50YSBzZSBtdWVzdHJhIGVuIGxhIGZpbGEgY29sYXBzYWRhLCBxdWVcbiAgICAvLyBkaWJ1amEgZXN0ZSBjb21wb25lbnRlIHkgbm8gZWwgZWRpdG9yIOKAlCBzaSBuYWRpZSBtb250w7MgdW4gZWRpdG9yIHRvZGF2w61hLFxuICAgIC8vIGVsIG5hbWVzcGFjZSBubyBleGlzdGlyw61hIHkgbGEgZmlsYSBtb3N0cmFyw61hIGxhIGNsYXZlIGNydWRhLlxuICAgIGlmICghdGhpcy5pMThuLmhhc05hbWVzcGFjZShFRElUT1JfTkFNRVNQQUNFKSkge1xuICAgICAgdGhpcy5pMThuLnJlZ2lzdGVyRGVmYXVsdHMoRURJVE9SX05BTUVTUEFDRSwgRklFTERfU0NIRU1BX0VESVRPUl9JMThOKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMucHJvcHMudHlwZUlkKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNmZyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMucmVxdWVzdHMuZ2V0UmVxdWVzdFR5cGUodGhpcy5wcm9wcy50eXBlSWQpKTtcbiAgICAgIHRoaXMudGl0bGVDb250cm9sLnNldFZhbHVlKGNmZy5sYWJlbCk7XG4gICAgICB0aGlzLnN1YnRpdGxlQ29udHJvbC5zZXRWYWx1ZShjZmcuc3VidGl0bGUgPz8gJycpO1xuICAgICAgdGhpcy5xdWVzdGlvbnMuc2V0KFsuLi5jZmcuZmllbGRTY2hlbWFdLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKS5tYXAoZiA9PiB0aGlzLnJvd0Zyb21GaWVsZChmKSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnc3VydmV5QnVpbGRlci5sb2FkJyxcbiAgICAgICAgZmFsbGJhY2tLZXk6ICdsb2FkRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiBOQU1FU1BBQ0UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIE5BTUVTUEFDRSk7XG4gIH1cblxuICB0eXBlTGFiZWwodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIHJldHVybiB0aGlzLmkxOG4udChgdHlwZSR7dHlwZX1gLCBFRElUT1JfTkFNRVNQQUNFKTtcbiAgfVxuXG4gIHF1ZXN0aW9uVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uVHlwZXM/Lmxlbmd0aCA/IHRoaXMucHJvcHMucXVlc3Rpb25UeXBlcyA6IFNVUlZFWV9RVUVTVElPTl9UWVBFUztcbiAgfVxuXG4gIGVkaXRvclByb3BzKHJvdzogRWRpdGFibGVGaWVsZERlZik6IEZpZWxkU2NoZW1hRWRpdG9yTWV0YWRhdGEge1xuICAgIHJldHVybiB7IG1vZGU6ICdlZGl0JywgZmllbGQ6IHJvdywgYWxsb3dlZFR5cGVzOiB0aGlzLnF1ZXN0aW9uVHlwZXMoKSB9O1xuICB9XG5cbiAgaWNvbkFjdGlvbihcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIGljb246IHN0cmluZyxcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgY29sb3I6IENvbG9yID0gJ2RhcmsnXG4gICk6IEJ1dHRvbk1ldGFkYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICB0ZXh0OiAnJyxcbiAgICAgIGFyaWFMYWJlbDogbGFiZWwsXG4gICAgICBjb2xvcixcbiAgICAgIGZpbGw6ICdjbGVhcicsXG4gICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIHN0YXRlOiBkaXNhYmxlZCA/IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgaWNvbjogeyBuYW1lOiBpY29uLCBzbG90OiAnaWNvbi1vbmx5JyB9LFxuICAgIH07XG4gIH1cblxuICBhZGRRdWVzdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCByb3c6IEVkaXRhYmxlRmllbGREZWYgPSB7XG4gICAgICBpZDogYHJvdy0ke3Jvd1VpZCsrfWAsXG4gICAgICBuYW1lOiAnJyxcbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIHBsYWNlaG9sZGVyVGV4dDogJycsXG4gICAgICBoaW50VGV4dDogJycsXG4gICAgICB0eXBlOiB0aGlzLnF1ZXN0aW9uVHlwZXMoKVswXSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbnMudXBkYXRlKHJvd3MgPT4gWy4uLnJvd3MsIHJvd10pO1xuICAgIC8vIFVuYSBwcmVndW50YSByZWNpw6luIGFncmVnYWRhIGVzdMOhIHZhY8OtYTogYWJyaXJsYSBlcyBlbCDDum5pY28gcGFzb1xuICAgIC8vIHNpZ3VpZW50ZSBwb3NpYmxlLCB5IGRlamFybGEgY2VycmFkYSBsYSBoYXLDrWEgdmVyIGNvbW8gdW5hIGZpbGEgcm90YS5cbiAgICB0aGlzLmVkaXRpbmdJZC5zZXQocm93LmlkKTtcbiAgfVxuXG4gIHRvZ2dsZUVkaXQocm93OiBFZGl0YWJsZUZpZWxkRGVmKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0aW5nSWQudXBkYXRlKGN1cnJlbnQgPT4gKGN1cnJlbnQgPT09IHJvdy5pZCA/ICcnIDogcm93LmlkKSk7XG4gIH1cblxuICByZW1vdmVRdWVzdGlvbihyb3c6IEVkaXRhYmxlRmllbGREZWYpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXN0aW9ucy51cGRhdGUocm93cyA9PiByb3dzLmZpbHRlcihyID0+IHIuaWQgIT09IHJvdy5pZCkpO1xuICAgIGlmICh0aGlzLmVkaXRpbmdJZCgpID09PSByb3cuaWQpIHRoaXMuZWRpdGluZ0lkLnNldCgnJyk7XG4gIH1cblxuICBkdXBsaWNhdGUocm93OiBFZGl0YWJsZUZpZWxkRGVmKTogdm9pZCB7XG4gICAgY29uc3QgY29weTogRWRpdGFibGVGaWVsZERlZiA9IHtcbiAgICAgIC4uLnJvdyxcbiAgICAgIGlkOiBgcm93LSR7cm93VWlkKyt9YCxcbiAgICAgIC8vIFNpbiB0b2tlbiBwcm9waW8gbGEgY29waWEgcGlzYXLDrWEgbGFzIHJlc3B1ZXN0YXMgZGVsIG9yaWdpbmFsOiBkb3NcbiAgICAgIC8vIGNhbXBvcyBjb24gZWwgbWlzbW8gYG5hbWVgIHNvbiBlbCBtaXNtbyBjYW1wbyBwYXJhIGVsIGJhY2tlbmQuXG4gICAgICBuYW1lOiB0aGlzLmZvcm1CdWlsZGVyLnVuaXF1ZUZpZWxkTmFtZShyb3cubmFtZSB8fCByb3cubGFiZWwsIHRoaXMucXVlc3Rpb25zKCkpLFxuICAgICAgb3B0aW9uczogcm93Lm9wdGlvbnMgPyByb3cub3B0aW9ucy5tYXAobyA9PiAoeyAuLi5vIH0pKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gcm93cy5maW5kSW5kZXgociA9PiByLmlkID09PSByb3cuaWQpO1xuICAgICAgcmV0dXJuIFsuLi5yb3dzLnNsaWNlKDAsIGluZGV4ICsgMSksIGNvcHksIC4uLnJvd3Muc2xpY2UoaW5kZXggKyAxKV07XG4gICAgfSk7XG4gIH1cblxuICBtb3ZlKGluZGV4OiBudW1iZXIsIGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBpbmRleCArIGRlbHRhO1xuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+IHtcbiAgICAgIGlmICh0YXJnZXQgPCAwIHx8IHRhcmdldCA+PSByb3dzLmxlbmd0aCkgcmV0dXJuIHJvd3M7XG4gICAgICBjb25zdCBuZXh0ID0gWy4uLnJvd3NdO1xuICAgICAgW25leHRbaW5kZXhdLCBuZXh0W3RhcmdldF1dID0gW25leHRbdGFyZ2V0XSwgbmV4dFtpbmRleF1dO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gIH1cblxuICBhcHBseVF1ZXN0aW9uKGZpZWxkOiBFZGl0YWJsZUZpZWxkRGVmKTogdm9pZCB7XG4gICAgdGhpcy5xdWVzdGlvbnMudXBkYXRlKHJvd3MgPT5cbiAgICAgIHJvd3MubWFwKHIgPT5cbiAgICAgICAgci5pZCA9PT0gZmllbGQuaWRcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uZmllbGQsXG4gICAgICAgICAgICAgIG5hbWU6IHRoaXMuZm9ybUJ1aWxkZXIudW5pcXVlRmllbGROYW1lKFxuICAgICAgICAgICAgICAgIGZpZWxkLm5hbWUgfHwgZmllbGQubGFiZWwsXG4gICAgICAgICAgICAgICAgcm93cy5maWx0ZXIobyA9PiBvLmlkICE9PSByLmlkKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogclxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5lZGl0aW5nSWQuc2V0KCcnKTtcbiAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQoJycpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5zYXZpbmcoKSkgcmV0dXJuO1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG5cbiAgICBjb25zdCB0aXRsZSA9IHRoaXMudGl0bGVDb250cm9sLnZhbHVlLnRyaW0oKTtcbiAgICBpZiAoIXRpdGxlKSB7XG4gICAgICB0aGlzLnRpdGxlQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQodGhpcy50KCdub1RpdGxlJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJvd3MgPSB0aGlzLnF1ZXN0aW9ucygpO1xuICAgIGlmICghcm93cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCh0aGlzLnQoJ25vUXVlc3Rpb25zJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocm93cy5zb21lKHIgPT4gIXIubGFiZWwudHJpbSgpKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KHRoaXMudCgnZW1wdHlRdWVzdGlvbkxhYmVsJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBFbCBlZGl0b3IgeWEgbG8gdmFsaWRhIGFsIGNlcnJhciBjYWRhIHByZWd1bnRhLCBwZXJvIHVuYSBwcmVndW50YSBhYmllcnRhXG4gICAgLy8gKG8gY2FyZ2FkYSBkZSB1bmEgZW5jdWVzdGEgdmllamEpIHB1ZWRlIGxsZWdhciBhY8OhIHNpbiBvcGNpb25lcy5cbiAgICBpZiAocm93cy5zb21lKHIgPT4gRklFTERfVFlQRVNfV0lUSF9PUFRJT05TLmluY2x1ZGVzKHIudHlwZSkgJiYgIXIub3B0aW9ucz8ubGVuZ3RoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KHRoaXMudCgnbWlzc2luZ09wdGlvbnMnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zYXZpbmcuc2V0KHRydWUpO1xuXG4gICAgY29uc3QgZmllbGRTY2hlbWE6IEZpZWxkU2NoZW1hRGVmW10gPSBbXTtcbiAgICByb3dzLmZvckVhY2goKHJvdywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmZvcm1CdWlsZGVyLnVuaXF1ZUZpZWxkTmFtZShyb3cubmFtZSB8fCByb3cubGFiZWwsIGZpZWxkU2NoZW1hKTtcbiAgICAgIGZpZWxkU2NoZW1hLnB1c2goXG4gICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY3JlYXRlRmllbGRTY2hlbWEoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGxhYmVsOiByb3cubGFiZWwudHJpbSgpLFxuICAgICAgICAgICAgdHlwZTogcm93LnR5cGUsXG4gICAgICAgICAgICByZXF1aXJlZDogcm93LnJlcXVpcmVkLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXJUZXh0OiByb3cucGxhY2Vob2xkZXJUZXh0LFxuICAgICAgICAgICAgaGludFRleHQ6IHJvdy5oaW50VGV4dCxcbiAgICAgICAgICAgIG9wdGlvbnM6IHJvdy5vcHRpb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5kZXhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHR5cGVJZCA9XG4gICAgICB0aGlzLnByb3BzLnR5cGVJZCA/PyBgJHt0aGlzLnByb3BzLnR5cGVQcmVmaXggPz8gREVGQVVMVF9UWVBFX1BSRUZJWH06JHt0aGlzLmZvcm1CdWlsZGVyLnRvVG9rZW4odGl0bGUpfWA7XG4gICAgY29uc3Qgc3VidGl0bGUgPSB0aGlzLnN1YnRpdGxlQ29udHJvbC52YWx1ZS50cmltKCk7XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgbGFiZWw6IHRpdGxlLFxuICAgICAgc3VidGl0bGUsXG4gICAgICBlbnRpdHlSZWY6IHRoaXMucHJvcHMuZW50aXR5UmVmLFxuICAgICAgc2tpcFJldmlldzogdHJ1ZSxcbiAgICAgIGZpZWxkU2NoZW1hLFxuICAgICAgYWxsb3dBbm9ueW1vdXM6IHRoaXMucHJvcHMuYWxsb3dBbm9ueW1vdXMgPz8gdHJ1ZSxcbiAgICAgIHZpc2liaWxpdHk6IHRoaXMucHJvcHMudmlzaWJpbGl0eSA/PyAoJ1BVQkxJQycgYXMgY29uc3QpLFxuICAgIH07XG5cbiAgICBjb25zdCBjYWxsJCA9IHRoaXMucHJvcHMudHlwZUlkXG4gICAgICA/IHRoaXMucmVxdWVzdHMudXBkYXRlUmVxdWVzdFR5cGUodGhpcy5wcm9wcy50eXBlSWQsIHBheWxvYWQpXG4gICAgICA6IHRoaXMucmVxdWVzdHMuY3JlYXRlUmVxdWVzdFR5cGUoeyAuLi5wYXlsb2FkLCB0eXBlSWQgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdHlwZUNvbmZpZyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKGNhbGwkKTtcbiAgICAgIHRoaXMuc2F2aW5nLnNldChmYWxzZSk7XG4gICAgICB0aGlzLnNhdmVkLmVtaXQoeyB0eXBlQ29uZmlnIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zYXZpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgY29udGV4dDogJ3N1cnZleUJ1aWxkZXIuc2F2ZScsXG4gICAgICAgIGZhbGxiYWNrS2V5OiAnc2F2ZUVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogTkFNRVNQQUNFLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByb3dGcm9tRmllbGQoZjogRmllbGRTY2hlbWFEZWYpOiBFZGl0YWJsZUZpZWxkRGVmIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGByb3ctJHtyb3dVaWQrK31gLFxuICAgICAgbmFtZTogZi5uYW1lLFxuICAgICAgbGFiZWw6IGYubGFiZWwgPz8gJycsXG4gICAgICBwbGFjZWhvbGRlclRleHQ6IGYucGxhY2Vob2xkZXJUZXh0ID8/ICcnLFxuICAgICAgaGludFRleHQ6IGYuaGludFRleHQgPz8gJycsXG4gICAgICB0eXBlOiBmLnR5cGUsXG4gICAgICByZXF1aXJlZDogISFmLnJlcXVpcmVkLFxuICAgICAgb3B0aW9uczogZi5vcHRpb25zLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|