kwikid-forms 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/bundles/kwikid-forms.umd.js +1396 -393
  2. package/bundles/kwikid-forms.umd.js.map +1 -1
  3. package/esm2015/lib/builder/builder.component.js +86 -67
  4. package/esm2015/lib/builder/builder.module.js +52 -7
  5. package/esm2015/lib/builder/element-config-editor/editors/basic/checkbox-config.editor.component.js +72 -0
  6. package/esm2015/lib/builder/element-config-editor/editors/basic/date-config.editor.component.js +72 -0
  7. package/esm2015/lib/builder/element-config-editor/editors/basic/number-config.editor.component.js +72 -0
  8. package/esm2015/lib/builder/element-config-editor/editors/basic/otp-config.editor.component.js +130 -0
  9. package/esm2015/lib/builder/element-config-editor/editors/basic/phone-config.editor.component.js +130 -0
  10. package/esm2015/lib/builder/element-config-editor/editors/basic/radio-config.editor.component.js +241 -147
  11. package/esm2015/lib/builder/element-config-editor/editors/basic/text-config.editor.component.js +48 -51
  12. package/esm2015/lib/builder/element-config-editor/editors/basic-element-config.editor.component.js +475 -333
  13. package/esm2015/lib/builder/element-config-editor/editors/document/aadhaar-number-config.editor.component.js +130 -0
  14. package/esm2015/lib/builder/element-config-editor/editors/document/pan-number-config.editor.component.js +135 -0
  15. package/esm2015/lib/builder/element-config-editor/editors/document-element-config.editor.component.js +610 -0
  16. package/esm2015/lib/builder/element-config-editor/editors/other/html-config.editor.component.js +120 -0
  17. package/esm2015/lib/builder/element-config-editor/editors/other/title-config.editor.component.js +121 -0
  18. package/esm2015/lib/builder/element-config-editor/editors/other-element-config.editor.component.js +214 -0
  19. package/esm2015/lib/builder/element-config-editor/element-config-editor.component.js +6 -3
  20. package/esm2015/lib/builder/shared/elements.js +33 -8
  21. package/esm2015/lib/renderer/config-converter.helper.js +2 -2
  22. package/esm2015/lib/renderer/form-view/definitions/form-view.fields.definition.js +1 -1
  23. package/esm2015/lib/renderer/form-view/form-view.component.js +29 -14
  24. package/esm2015/lib/renderer/form-view/helpers/form-view.apis.helper.js +17 -15
  25. package/esm2015/lib/renderer/renderer.component.js +1 -2
  26. package/fesm2015/kwikid-forms.js +2787 -738
  27. package/fesm2015/kwikid-forms.js.map +1 -1
  28. package/lib/builder/builder.component.d.ts +4 -0
  29. package/lib/builder/builder.module.d.ts +16 -5
  30. package/lib/builder/element-config-editor/editors/basic/checkbox-config.editor.component.d.ts +16 -0
  31. package/lib/builder/element-config-editor/editors/basic/date-config.editor.component.d.ts +16 -0
  32. package/lib/builder/element-config-editor/editors/basic/number-config.editor.component.d.ts +16 -0
  33. package/lib/builder/element-config-editor/editors/basic/otp-config.editor.component.d.ts +16 -0
  34. package/lib/builder/element-config-editor/editors/basic/phone-config.editor.component.d.ts +16 -0
  35. package/lib/builder/element-config-editor/editors/document/aadhaar-number-config.editor.component.d.ts +16 -0
  36. package/lib/builder/element-config-editor/editors/document/pan-number-config.editor.component.d.ts +16 -0
  37. package/lib/builder/element-config-editor/editors/document-element-config.editor.component.d.ts +20 -0
  38. package/lib/builder/element-config-editor/editors/other/html-config.editor.component.d.ts +16 -0
  39. package/lib/builder/element-config-editor/editors/other/title-config.editor.component.d.ts +16 -0
  40. package/lib/builder/element-config-editor/editors/other-element-config.editor.component.d.ts +20 -0
  41. package/lib/builder/shared/elements.d.ts +3 -1
  42. package/lib/renderer/form-view/definitions/form-view.fields.definition.d.ts +3 -1
  43. package/package.json +1 -1
@@ -3,10 +3,15 @@ import { Component, EventEmitter, Input, Output } from "@angular/core";
3
3
  import { FormControl, FormGroup } from "@angular/forms";
4
4
  import { logMethod, mergeObjects } from "kwikid-toolkit";
5
5
  import * as i0 from "@angular/core";
6
- import * as i1 from "./basic/text-config.editor.component";
7
- import * as i2 from "./basic/radio-config.editor.component";
8
- import * as i3 from "@angular/common";
9
- import * as i4 from "@angular/forms";
6
+ import * as i1 from "kwikui";
7
+ import * as i2 from "./basic/text-config.editor.component";
8
+ import * as i3 from "./basic/number-config.editor.component";
9
+ import * as i4 from "./basic/radio-config.editor.component";
10
+ import * as i5 from "./basic/checkbox-config.editor.component";
11
+ import * as i6 from "./basic/otp-config.editor.component";
12
+ import * as i7 from "./basic/phone-config.editor.component";
13
+ import * as i8 from "@angular/common";
14
+ import * as i9 from "@angular/forms";
10
15
  export class BasicElementConfigEditor {
11
16
  constructor() {
12
17
  this.saveClickCounter = 0;
@@ -39,13 +44,14 @@ export class BasicElementConfigEditor {
39
44
  this.createBasicFormGroup();
40
45
  }
41
46
  ngOnChanges(changes) {
47
+ var _a;
42
48
  const verifyChange = (key) => {
43
49
  return changes.hasOwnProperty(key) && !changes[key].firstChange;
44
50
  };
45
51
  if (verifyChange("elementConfig")) {
46
52
  this.elementConfig = changes.elementConfig.currentValue;
47
53
  this.assignVariables();
48
- this.createBasicFormGroup();
54
+ (_a = this.basicFormGroup) === null || _a === void 0 ? void 0 : _a.reset(this.elementConfig);
49
55
  }
50
56
  if (verifyChange("saveClickCounter")) {
51
57
  if (changes.saveClickCounter.previousValue !==
@@ -112,179 +118,212 @@ export class BasicElementConfigEditor {
112
118
  /** @nocollapse */ BasicElementConfigEditor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BasicElementConfigEditor, deps: [], target: i0.ɵɵFactoryTarget.Component });
113
119
  /** @nocollapse */ BasicElementConfigEditor.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: BasicElementConfigEditor, selector: "basic-element-config-editor", inputs: { saveClickCounter: "saveClickCounter", elementConfig: "elementConfig" }, outputs: { updateElement: "updateElement" }, usesOnChanges: true, ngImport: i0, template: `
114
120
  <ng-container *ngIf="elementConfig !== undefined">
115
- <table>
116
- <tr>
117
- <td>Id</td>
118
- <td>{{ elementConfig.elementId }}</td>
119
- </tr>
120
- <tr>
121
- <td>Type</td>
122
- <td>{{ elementConfig.elementType }}</td>
123
- </tr>
124
- <tr>
125
- <td>Category</td>
126
- <td>{{ elementConfig.elementCategory }}</td>
127
- </tr>
128
- </table>
121
+ <kwikui-table
122
+ style="width: 100%; height: 100%; overflow: auto; box-shadow: 0px 0px 10px -6px #000; border: 0px solid gray; border-radius: 1rem;"
123
+ [columns]="['id', 'type', 'category']"
124
+ [headers]="{ id: 'ID', type: 'Type', category: 'Category' }"
125
+ [data]="[
126
+ {
127
+ id: elementConfig.elementId,
128
+ type: elementConfig.elementType,
129
+ category: elementConfig.elementCategory
130
+ }
131
+ ]"
132
+ (onClick)="(undefined)"
133
+ ></kwikui-table>
129
134
  </ng-container>
130
135
  <form [formGroup]="basicFormGroup">
131
136
  <fieldset>
132
- <legend>Standard</legend>
137
+ <legend class="form-group-title">Standard</legend>
133
138
  <div class="form-group">
134
- <label for="basic-field-label">Label</label>
135
- <input
136
- type="text"
137
- class="form-control"
138
- id="basic-field-label"
139
- formControlName="label"
140
- required
141
- />
139
+ <kwikui-input
140
+ [label]="'Label'"
141
+ [id]="'basic-field-label'"
142
+ [type]="'text'"
143
+ [formControlName]="'label'"
144
+ [formControl]="basicFormGroup.controls['label']"
145
+ [disabled]="false"
146
+ [placeholder]="'Please enter your Label'"
147
+ [focus]="false"
148
+ [invalid]="false"
149
+ [case]="'default'"
150
+ size="m"
151
+ ></kwikui-input>
142
152
  </div>
143
153
  <div class="form-group">
144
- <label for="basic-field-key">Key</label>
145
- <input
146
- type="text"
147
- class="form-control"
148
- id="basic-field-key"
149
- formControlName="key"
150
- required
151
- />
154
+ <kwikui-input
155
+ [label]="'Key'"
156
+ [id]="'basic-field-key'"
157
+ [type]="'text'"
158
+ [formControlName]="'key'"
159
+ [formControl]="basicFormGroup.controls['key']"
160
+ [disabled]="false"
161
+ [placeholder]="'Please enter your Key'"
162
+ [focus]="false"
163
+ [invalid]="false"
164
+ [case]="'default'"
165
+ size="m"
166
+ ></kwikui-input>
152
167
  </div>
153
168
  <div class="form-group">
154
- <label for="basic-input-property-disabled">disabled</label>
155
- <select
156
- class="form-control"
157
- formControlName="disabled"
158
- id="basic-input-property-disabled"
159
- >
160
- <option
161
- [ngValue]="null"
162
- disabled
163
- >Select either true or false</option
164
- >
165
- <option
166
- *ngFor="let disabled of [true, false]"
167
- [ngValue]="disabled"
168
- >
169
- {{ disabled }}
170
- </option>
171
- </select>
172
- </div>
173
- </fieldset>
174
- <fieldset formGroupName="default">
175
- <legend>Default</legend>
176
- <div class="form-group">
177
- <label for="basic-input-property-value">value</label>
178
- <select
179
- class="form-control"
180
- formControlName="value"
181
- id="basic-input-property-value"
182
- >
183
- <option
184
- [ngValue]="null"
185
- value
186
- >Select either true or false</option
187
- >
188
- <option
189
- *ngFor="let value of [true, false]"
190
- [ngValue]="value"
191
- >
192
- {{ value }}
193
- </option>
194
- </select>
195
- </div>
196
- </fieldset>
197
- <fieldset formGroupName="validators">
198
- <legend>Validators</legend>
199
- <div class="form-group">
200
- <label for="basic-input-validators-min">min</label>
201
- <input
202
- class="form-control"
203
- formControlName="min"
204
- id="basic-input-validators-min"
205
- type="number"
206
- />
207
- </div>
208
- <div class="form-group">
209
- <label for="basic-input-validators-max">max</label>
210
- <input
211
- class="form-control"
212
- formControlName="max"
213
- id="basic-input-validators-max"
214
- type="number"
215
- />
216
- </div>
217
- <div class="form-group">
218
- <label for="basic-input-validators-minLength">minLength</label>
219
- <input
220
- class="form-control"
221
- formControlName="minLength"
222
- id="basic-input-validators-minLength"
223
- type="number"
224
- />
225
- </div>
226
- <div class="form-group">
227
- <label for="basic-input-validators-maxLength">maxLength</label>
228
- <input
229
- class="form-control"
230
- formControlName="maxLength"
231
- id="basic-input-validators-maxLength"
232
- type="number"
233
- />
234
- </div>
235
- <div class="form-group">
236
- <label for="basic-input-property-required">required</label>
237
- <select
238
- class="form-control"
239
- formControlName="required"
240
- id="basic-input-property-required"
241
- >
242
- <option
243
- [ngValue]="null"
244
- disabled
245
- >Select either true or false</option
246
- >
247
- <option
248
- *ngFor="let required of [true, false]"
249
- [ngValue]="required"
250
- >
251
- {{ required }}
252
- </option>
253
- </select>
254
- </div>
255
- </fieldset>
256
- <fieldset formGroupName="properties">
257
- <legend>Properties</legend>
258
- <div class="form-group">
259
- <label for="basic-input-property-placeholder">Placeholder</label>
260
- <input
261
- class="form-control"
262
- formControlName="placeholder"
263
- id="basic-input-property-placeholder"
264
- type="text"
265
- />
266
- </div>
267
- <div class="form-group">
268
- <label for="basic-input-property-readonly">readOnly</label>
269
- <select
270
- class="form-control"
271
- formControlName="readOnly"
272
- id="basic-input-property-readonly"
273
- >
274
- <option
275
- [ngValue]="null"
276
- disabled
277
- >Select either true or false</option
278
- >
279
- <option
280
- *ngFor="let readonly of [true, false]"
281
- [ngValue]="readonly"
282
- >
283
- {{ readonly }}
284
- </option>
285
- </select>
169
+ <kwikui-select-combobox
170
+ [options]="[true, false]"
171
+ [label]="'Disabled'"
172
+ [id]="'basic-input-property-disabled'"
173
+ size="m"
174
+ [formControlName]="'disabled'"
175
+ [formControl]="basicFormGroup.controls['disabled']"
176
+ [focus]="false"
177
+ [disabled]="false"
178
+ [invalid]="false"
179
+ [placeholder]="'Please select either true or false'"
180
+ ></kwikui-select-combobox>
286
181
  </div>
287
182
  </fieldset>
183
+
184
+ <div formGroupName="default">
185
+ <fieldset>
186
+ <legend class="form-group-title">Default</legend>
187
+ <div class="form-group">
188
+ <kwikui-select-combobox
189
+ [options]="[true, false]"
190
+ [label]="'value'"
191
+ [id]="'basic-input-property-value'"
192
+ size="m"
193
+ [formControlName]="'value'"
194
+ [formControl]="
195
+ basicFormGroup['controls'].default['controls'].value
196
+ "
197
+ [focus]="false"
198
+ [disabled]="false"
199
+ [invalid]="false"
200
+ [placeholder]="'Please select either true or false'"
201
+ ></kwikui-select-combobox>
202
+ </div>
203
+ </fieldset>
204
+ </div>
205
+
206
+ <div formGroupName="validators">
207
+ <fieldset>
208
+ <legend class="form-group-title">Validators</legend>
209
+ <div class="form-group">
210
+ <kwikui-input-number
211
+ [label]="'min'"
212
+ [id]="'basic-input-validators-min'"
213
+ [formControlName]="'min'"
214
+ [formControl]="
215
+ basicFormGroup['controls'].validators['controls'].min
216
+ "
217
+ [disabled]="false"
218
+ [placeholder]="'Please enter your minimum value'"
219
+ [focus]="false"
220
+ [invalid]="false"
221
+ size="m"
222
+ ></kwikui-input-number>
223
+ </div>
224
+ <div class="form-group">
225
+ <kwikui-input-number
226
+ [label]="'max'"
227
+ [id]="'basic-input-validators-max'"
228
+ [formControlName]="'max'"
229
+ [formControl]="
230
+ basicFormGroup['controls'].validators['controls'].max
231
+ "
232
+ [disabled]="false"
233
+ [placeholder]="'Please enter your maximum value'"
234
+ [focus]="false"
235
+ [invalid]="false"
236
+ size="m"
237
+ ></kwikui-input-number>
238
+ </div>
239
+ <div class="form-group">
240
+ <kwikui-input-number
241
+ [label]="'minLength'"
242
+ [id]="'basic-input-validators-minLength'"
243
+ [formControlName]="'minLength'"
244
+ [formControl]="
245
+ basicFormGroup['controls'].validators['controls'].minLength
246
+ "
247
+ [disabled]="false"
248
+ [placeholder]="'Please enter your minimum length value'"
249
+ [focus]="false"
250
+ [invalid]="false"
251
+ size="m"
252
+ ></kwikui-input-number>
253
+ </div>
254
+ <div class="form-group">
255
+ <kwikui-input-number
256
+ [label]="'maxLength'"
257
+ [id]="'basic-input-validators-maxLength'"
258
+ [formControlName]="'maxLength'"
259
+ [formControl]="
260
+ basicFormGroup['controls'].validators['controls'].maxLength
261
+ "
262
+ [disabled]="false"
263
+ [placeholder]="'Please enter your maximum length value'"
264
+ [focus]="false"
265
+ [invalid]="false"
266
+ size="m"
267
+ ></kwikui-input-number>
268
+ </div>
269
+ <div class="form-group">
270
+ <kwikui-select-combobox
271
+ [options]="[true, false]"
272
+ [label]="'required'"
273
+ [id]="'basic-input-property-required'"
274
+ size="m"
275
+ [formControlName]="'required'"
276
+ [formControl]="
277
+ basicFormGroup['controls'].validators['controls'].required
278
+ "
279
+ [focus]="false"
280
+ [disabled]="false"
281
+ [invalid]="false"
282
+ [placeholder]="'Please select either true or false'"
283
+ ></kwikui-select-combobox>
284
+ </div>
285
+ </fieldset>
286
+ </div>
287
+
288
+ <div formGroupName="properties">
289
+ <fieldset>
290
+ <legend class="form-group-title">Properties</legend>
291
+ <div class="form-group">
292
+ <kwikui-input
293
+ [label]="'Placeholder'"
294
+ [id]="'basic-field-placeholder'"
295
+ [type]="'text'"
296
+ [formControlName]="'placeholder'"
297
+ [formControl]="
298
+ basicFormGroup.controls.properties['controls'].placeholder
299
+ "
300
+ [disabled]="false"
301
+ [placeholder]="'Please enter your placeholder'"
302
+ [focus]="false"
303
+ [invalid]="false"
304
+ [case]="'default'"
305
+ size="m"
306
+ ></kwikui-input>
307
+ </div>
308
+ <div class="form-group">
309
+ <kwikui-select-combobox
310
+ [options]="[true, false]"
311
+ [label]="'readOnly'"
312
+ [id]="'basic-input-property-readOnly'"
313
+ size="m"
314
+ [formControlName]="'readOnly'"
315
+ [formControl]="
316
+ basicFormGroup['controls'].properties['controls'].readOnly
317
+ "
318
+ [focus]="false"
319
+ [disabled]="false"
320
+ [invalid]="false"
321
+ [placeholder]="'Please select either true or false'"
322
+ ></kwikui-select-combobox>
323
+ </div>
324
+ </fieldset>
325
+ </div>
326
+
288
327
  <ng-container [ngSwitch]="elementType">
289
328
  <ng-container *ngSwitchCase="'text'">
290
329
  <basic-text-config-editor
@@ -293,6 +332,13 @@ export class BasicElementConfigEditor {
293
332
  (updateElement)="handleOnSaveUpdateElement($event)"
294
333
  ></basic-text-config-editor>
295
334
  </ng-container>
335
+ <ng-container *ngSwitchCase="'number'">
336
+ <basic-number-config-editor
337
+ [saveBasicClickCounter]="saveBasicClickCounter"
338
+ [elementConfig]="elementConfig"
339
+ (updateElement)="handleOnSaveUpdateElement($event)"
340
+ ></basic-number-config-editor>
341
+ </ng-container>
296
342
  <ng-container *ngSwitchCase="'radio'">
297
343
  <basic-radio-config-editor
298
344
  [saveBasicClickCounter]="saveBasicClickCounter"
@@ -300,9 +346,37 @@ export class BasicElementConfigEditor {
300
346
  (updateElement)="handleOnSaveUpdateElement($event)"
301
347
  ></basic-radio-config-editor>
302
348
  </ng-container>
349
+ <ng-container *ngSwitchCase="'checkbox'">
350
+ <basic-checkbox-config-editor
351
+ [saveBasicClickCounter]="saveBasicClickCounter"
352
+ [elementConfig]="elementConfig"
353
+ (updateElement)="handleOnSaveUpdateElement($event)"
354
+ ></basic-checkbox-config-editor>
355
+ </ng-container>
356
+ <ng-container *ngSwitchCase="'date'">
357
+ <basic-checkbox-config-editor
358
+ [saveBasicClickCounter]="saveBasicClickCounter"
359
+ [elementConfig]="elementConfig"
360
+ (updateElement)="handleOnSaveUpdateElement($event)"
361
+ ></basic-checkbox-config-editor>
362
+ </ng-container>
363
+ <ng-container *ngSwitchCase="'otp'">
364
+ <basic-otp-config-editor
365
+ [saveBasicClickCounter]="saveBasicClickCounter"
366
+ [elementConfig]="elementConfig"
367
+ (updateElement)="handleOnSaveUpdateElement($event)"
368
+ ></basic-otp-config-editor>
369
+ </ng-container>
370
+ <ng-container *ngSwitchCase="'phone'">
371
+ <basic-phone-config-editor
372
+ [saveBasicClickCounter]="saveBasicClickCounter"
373
+ [elementConfig]="elementConfig"
374
+ (updateElement)="handleOnSaveUpdateElement($event)"
375
+ ></basic-phone-config-editor>
376
+ </ng-container>
303
377
  </ng-container>
304
378
  </form>
305
- `, isInline: true, styles: ["\n :host {\n display: flex;\n flex-direction: column;\n align-content: center;\n justify-content: flex-start;\n align-items: stretch;\n gap: 1rem;\n }\n "], components: [{ type: i1.BasicTextConfigEditor, selector: "basic-text-config-editor", inputs: ["saveBasicClickCounter", "elementConfig"], outputs: ["updateElement"] }, { type: i2.BasicRadioConfigEditor, selector: "basic-radio-config-editor", inputs: ["saveBasicClickCounter", "elementConfig"], outputs: ["updateElement"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }] });
379
+ `, isInline: true, styles: ["\n :host {\n display: flex;\n flex-direction: column;\n align-content: center;\n justify-content: flex-start;\n align-items: stretch;\n gap: 1rem;\n }\n "], components: [{ type: i1.KwikUITableComponent, selector: "kwikui-table", inputs: ["id", "columns", "headers", "data"], outputs: ["onClick"] }, { type: i1.KwikUIInputComponent, selector: "kwikui-input", inputs: ["label", "id", "type", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "validators", "case", "size", "icon", "properties"], outputs: ["getKeyValue"] }, { type: i1.KwikUISelectComboboxComponent, selector: "kwikui-select-combobox", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "options", "size", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i1.KwikUIInputNumberComponent, selector: "kwikui-input-number", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "min", "max", "prefix", "postfix", "precision", "decimal", "size", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i2.BasicTextConfigEditor, selector: "basic-text-config-editor", inputs: ["saveBasicClickCounter", "elementConfig"], outputs: ["updateElement"] }, { type: i3.BasicNumberConfigEditor, selector: "basic-number-config-editor", inputs: ["saveBasicClickCounter", "elementConfig"], outputs: ["updateElement"] }, { type: i4.BasicRadioConfigEditor, selector: "basic-radio-config-editor", inputs: ["saveBasicClickCounter", "elementConfig"], outputs: ["updateElement"] }, { type: i5.BasicCheckboxConfigEditor, selector: "basic-checkbox-config-editor", inputs: ["saveBasicClickCounter", "elementConfig"], outputs: ["updateElement"] }, { type: i6.BasicOtpConfigEditor, selector: "basic-otp-config-editor", inputs: ["saveBasicClickCounter", "elementConfig"], outputs: ["updateElement"] }, { type: i7.BasicPhoneConfigEditor, selector: "basic-phone-config-editor", inputs: ["saveBasicClickCounter", "elementConfig"], outputs: ["updateElement"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i9.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i9.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }] });
306
380
  __decorate([
307
381
  logMethod
308
382
  ], BasicElementConfigEditor.prototype, "ngOnInit", null);
@@ -327,179 +401,212 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
327
401
  selector: "basic-element-config-editor",
328
402
  template: `
329
403
  <ng-container *ngIf="elementConfig !== undefined">
330
- <table>
331
- <tr>
332
- <td>Id</td>
333
- <td>{{ elementConfig.elementId }}</td>
334
- </tr>
335
- <tr>
336
- <td>Type</td>
337
- <td>{{ elementConfig.elementType }}</td>
338
- </tr>
339
- <tr>
340
- <td>Category</td>
341
- <td>{{ elementConfig.elementCategory }}</td>
342
- </tr>
343
- </table>
404
+ <kwikui-table
405
+ style="width: 100%; height: 100%; overflow: auto; box-shadow: 0px 0px 10px -6px #000; border: 0px solid gray; border-radius: 1rem;"
406
+ [columns]="['id', 'type', 'category']"
407
+ [headers]="{ id: 'ID', type: 'Type', category: 'Category' }"
408
+ [data]="[
409
+ {
410
+ id: elementConfig.elementId,
411
+ type: elementConfig.elementType,
412
+ category: elementConfig.elementCategory
413
+ }
414
+ ]"
415
+ (onClick)="(undefined)"
416
+ ></kwikui-table>
344
417
  </ng-container>
345
418
  <form [formGroup]="basicFormGroup">
346
419
  <fieldset>
347
- <legend>Standard</legend>
420
+ <legend class="form-group-title">Standard</legend>
348
421
  <div class="form-group">
349
- <label for="basic-field-label">Label</label>
350
- <input
351
- type="text"
352
- class="form-control"
353
- id="basic-field-label"
354
- formControlName="label"
355
- required
356
- />
422
+ <kwikui-input
423
+ [label]="'Label'"
424
+ [id]="'basic-field-label'"
425
+ [type]="'text'"
426
+ [formControlName]="'label'"
427
+ [formControl]="basicFormGroup.controls['label']"
428
+ [disabled]="false"
429
+ [placeholder]="'Please enter your Label'"
430
+ [focus]="false"
431
+ [invalid]="false"
432
+ [case]="'default'"
433
+ size="m"
434
+ ></kwikui-input>
357
435
  </div>
358
436
  <div class="form-group">
359
- <label for="basic-field-key">Key</label>
360
- <input
361
- type="text"
362
- class="form-control"
363
- id="basic-field-key"
364
- formControlName="key"
365
- required
366
- />
437
+ <kwikui-input
438
+ [label]="'Key'"
439
+ [id]="'basic-field-key'"
440
+ [type]="'text'"
441
+ [formControlName]="'key'"
442
+ [formControl]="basicFormGroup.controls['key']"
443
+ [disabled]="false"
444
+ [placeholder]="'Please enter your Key'"
445
+ [focus]="false"
446
+ [invalid]="false"
447
+ [case]="'default'"
448
+ size="m"
449
+ ></kwikui-input>
367
450
  </div>
368
451
  <div class="form-group">
369
- <label for="basic-input-property-disabled">disabled</label>
370
- <select
371
- class="form-control"
372
- formControlName="disabled"
373
- id="basic-input-property-disabled"
374
- >
375
- <option
376
- [ngValue]="null"
377
- disabled
378
- >Select either true or false</option
379
- >
380
- <option
381
- *ngFor="let disabled of [true, false]"
382
- [ngValue]="disabled"
383
- >
384
- {{ disabled }}
385
- </option>
386
- </select>
387
- </div>
388
- </fieldset>
389
- <fieldset formGroupName="default">
390
- <legend>Default</legend>
391
- <div class="form-group">
392
- <label for="basic-input-property-value">value</label>
393
- <select
394
- class="form-control"
395
- formControlName="value"
396
- id="basic-input-property-value"
397
- >
398
- <option
399
- [ngValue]="null"
400
- value
401
- >Select either true or false</option
402
- >
403
- <option
404
- *ngFor="let value of [true, false]"
405
- [ngValue]="value"
406
- >
407
- {{ value }}
408
- </option>
409
- </select>
410
- </div>
411
- </fieldset>
412
- <fieldset formGroupName="validators">
413
- <legend>Validators</legend>
414
- <div class="form-group">
415
- <label for="basic-input-validators-min">min</label>
416
- <input
417
- class="form-control"
418
- formControlName="min"
419
- id="basic-input-validators-min"
420
- type="number"
421
- />
422
- </div>
423
- <div class="form-group">
424
- <label for="basic-input-validators-max">max</label>
425
- <input
426
- class="form-control"
427
- formControlName="max"
428
- id="basic-input-validators-max"
429
- type="number"
430
- />
431
- </div>
432
- <div class="form-group">
433
- <label for="basic-input-validators-minLength">minLength</label>
434
- <input
435
- class="form-control"
436
- formControlName="minLength"
437
- id="basic-input-validators-minLength"
438
- type="number"
439
- />
440
- </div>
441
- <div class="form-group">
442
- <label for="basic-input-validators-maxLength">maxLength</label>
443
- <input
444
- class="form-control"
445
- formControlName="maxLength"
446
- id="basic-input-validators-maxLength"
447
- type="number"
448
- />
449
- </div>
450
- <div class="form-group">
451
- <label for="basic-input-property-required">required</label>
452
- <select
453
- class="form-control"
454
- formControlName="required"
455
- id="basic-input-property-required"
456
- >
457
- <option
458
- [ngValue]="null"
459
- disabled
460
- >Select either true or false</option
461
- >
462
- <option
463
- *ngFor="let required of [true, false]"
464
- [ngValue]="required"
465
- >
466
- {{ required }}
467
- </option>
468
- </select>
469
- </div>
470
- </fieldset>
471
- <fieldset formGroupName="properties">
472
- <legend>Properties</legend>
473
- <div class="form-group">
474
- <label for="basic-input-property-placeholder">Placeholder</label>
475
- <input
476
- class="form-control"
477
- formControlName="placeholder"
478
- id="basic-input-property-placeholder"
479
- type="text"
480
- />
481
- </div>
482
- <div class="form-group">
483
- <label for="basic-input-property-readonly">readOnly</label>
484
- <select
485
- class="form-control"
486
- formControlName="readOnly"
487
- id="basic-input-property-readonly"
488
- >
489
- <option
490
- [ngValue]="null"
491
- disabled
492
- >Select either true or false</option
493
- >
494
- <option
495
- *ngFor="let readonly of [true, false]"
496
- [ngValue]="readonly"
497
- >
498
- {{ readonly }}
499
- </option>
500
- </select>
452
+ <kwikui-select-combobox
453
+ [options]="[true, false]"
454
+ [label]="'Disabled'"
455
+ [id]="'basic-input-property-disabled'"
456
+ size="m"
457
+ [formControlName]="'disabled'"
458
+ [formControl]="basicFormGroup.controls['disabled']"
459
+ [focus]="false"
460
+ [disabled]="false"
461
+ [invalid]="false"
462
+ [placeholder]="'Please select either true or false'"
463
+ ></kwikui-select-combobox>
501
464
  </div>
502
465
  </fieldset>
466
+
467
+ <div formGroupName="default">
468
+ <fieldset>
469
+ <legend class="form-group-title">Default</legend>
470
+ <div class="form-group">
471
+ <kwikui-select-combobox
472
+ [options]="[true, false]"
473
+ [label]="'value'"
474
+ [id]="'basic-input-property-value'"
475
+ size="m"
476
+ [formControlName]="'value'"
477
+ [formControl]="
478
+ basicFormGroup['controls'].default['controls'].value
479
+ "
480
+ [focus]="false"
481
+ [disabled]="false"
482
+ [invalid]="false"
483
+ [placeholder]="'Please select either true or false'"
484
+ ></kwikui-select-combobox>
485
+ </div>
486
+ </fieldset>
487
+ </div>
488
+
489
+ <div formGroupName="validators">
490
+ <fieldset>
491
+ <legend class="form-group-title">Validators</legend>
492
+ <div class="form-group">
493
+ <kwikui-input-number
494
+ [label]="'min'"
495
+ [id]="'basic-input-validators-min'"
496
+ [formControlName]="'min'"
497
+ [formControl]="
498
+ basicFormGroup['controls'].validators['controls'].min
499
+ "
500
+ [disabled]="false"
501
+ [placeholder]="'Please enter your minimum value'"
502
+ [focus]="false"
503
+ [invalid]="false"
504
+ size="m"
505
+ ></kwikui-input-number>
506
+ </div>
507
+ <div class="form-group">
508
+ <kwikui-input-number
509
+ [label]="'max'"
510
+ [id]="'basic-input-validators-max'"
511
+ [formControlName]="'max'"
512
+ [formControl]="
513
+ basicFormGroup['controls'].validators['controls'].max
514
+ "
515
+ [disabled]="false"
516
+ [placeholder]="'Please enter your maximum value'"
517
+ [focus]="false"
518
+ [invalid]="false"
519
+ size="m"
520
+ ></kwikui-input-number>
521
+ </div>
522
+ <div class="form-group">
523
+ <kwikui-input-number
524
+ [label]="'minLength'"
525
+ [id]="'basic-input-validators-minLength'"
526
+ [formControlName]="'minLength'"
527
+ [formControl]="
528
+ basicFormGroup['controls'].validators['controls'].minLength
529
+ "
530
+ [disabled]="false"
531
+ [placeholder]="'Please enter your minimum length value'"
532
+ [focus]="false"
533
+ [invalid]="false"
534
+ size="m"
535
+ ></kwikui-input-number>
536
+ </div>
537
+ <div class="form-group">
538
+ <kwikui-input-number
539
+ [label]="'maxLength'"
540
+ [id]="'basic-input-validators-maxLength'"
541
+ [formControlName]="'maxLength'"
542
+ [formControl]="
543
+ basicFormGroup['controls'].validators['controls'].maxLength
544
+ "
545
+ [disabled]="false"
546
+ [placeholder]="'Please enter your maximum length value'"
547
+ [focus]="false"
548
+ [invalid]="false"
549
+ size="m"
550
+ ></kwikui-input-number>
551
+ </div>
552
+ <div class="form-group">
553
+ <kwikui-select-combobox
554
+ [options]="[true, false]"
555
+ [label]="'required'"
556
+ [id]="'basic-input-property-required'"
557
+ size="m"
558
+ [formControlName]="'required'"
559
+ [formControl]="
560
+ basicFormGroup['controls'].validators['controls'].required
561
+ "
562
+ [focus]="false"
563
+ [disabled]="false"
564
+ [invalid]="false"
565
+ [placeholder]="'Please select either true or false'"
566
+ ></kwikui-select-combobox>
567
+ </div>
568
+ </fieldset>
569
+ </div>
570
+
571
+ <div formGroupName="properties">
572
+ <fieldset>
573
+ <legend class="form-group-title">Properties</legend>
574
+ <div class="form-group">
575
+ <kwikui-input
576
+ [label]="'Placeholder'"
577
+ [id]="'basic-field-placeholder'"
578
+ [type]="'text'"
579
+ [formControlName]="'placeholder'"
580
+ [formControl]="
581
+ basicFormGroup.controls.properties['controls'].placeholder
582
+ "
583
+ [disabled]="false"
584
+ [placeholder]="'Please enter your placeholder'"
585
+ [focus]="false"
586
+ [invalid]="false"
587
+ [case]="'default'"
588
+ size="m"
589
+ ></kwikui-input>
590
+ </div>
591
+ <div class="form-group">
592
+ <kwikui-select-combobox
593
+ [options]="[true, false]"
594
+ [label]="'readOnly'"
595
+ [id]="'basic-input-property-readOnly'"
596
+ size="m"
597
+ [formControlName]="'readOnly'"
598
+ [formControl]="
599
+ basicFormGroup['controls'].properties['controls'].readOnly
600
+ "
601
+ [focus]="false"
602
+ [disabled]="false"
603
+ [invalid]="false"
604
+ [placeholder]="'Please select either true or false'"
605
+ ></kwikui-select-combobox>
606
+ </div>
607
+ </fieldset>
608
+ </div>
609
+
503
610
  <ng-container [ngSwitch]="elementType">
504
611
  <ng-container *ngSwitchCase="'text'">
505
612
  <basic-text-config-editor
@@ -508,6 +615,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
508
615
  (updateElement)="handleOnSaveUpdateElement($event)"
509
616
  ></basic-text-config-editor>
510
617
  </ng-container>
618
+ <ng-container *ngSwitchCase="'number'">
619
+ <basic-number-config-editor
620
+ [saveBasicClickCounter]="saveBasicClickCounter"
621
+ [elementConfig]="elementConfig"
622
+ (updateElement)="handleOnSaveUpdateElement($event)"
623
+ ></basic-number-config-editor>
624
+ </ng-container>
511
625
  <ng-container *ngSwitchCase="'radio'">
512
626
  <basic-radio-config-editor
513
627
  [saveBasicClickCounter]="saveBasicClickCounter"
@@ -515,6 +629,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
515
629
  (updateElement)="handleOnSaveUpdateElement($event)"
516
630
  ></basic-radio-config-editor>
517
631
  </ng-container>
632
+ <ng-container *ngSwitchCase="'checkbox'">
633
+ <basic-checkbox-config-editor
634
+ [saveBasicClickCounter]="saveBasicClickCounter"
635
+ [elementConfig]="elementConfig"
636
+ (updateElement)="handleOnSaveUpdateElement($event)"
637
+ ></basic-checkbox-config-editor>
638
+ </ng-container>
639
+ <ng-container *ngSwitchCase="'date'">
640
+ <basic-checkbox-config-editor
641
+ [saveBasicClickCounter]="saveBasicClickCounter"
642
+ [elementConfig]="elementConfig"
643
+ (updateElement)="handleOnSaveUpdateElement($event)"
644
+ ></basic-checkbox-config-editor>
645
+ </ng-container>
646
+ <ng-container *ngSwitchCase="'otp'">
647
+ <basic-otp-config-editor
648
+ [saveBasicClickCounter]="saveBasicClickCounter"
649
+ [elementConfig]="elementConfig"
650
+ (updateElement)="handleOnSaveUpdateElement($event)"
651
+ ></basic-otp-config-editor>
652
+ </ng-container>
653
+ <ng-container *ngSwitchCase="'phone'">
654
+ <basic-phone-config-editor
655
+ [saveBasicClickCounter]="saveBasicClickCounter"
656
+ [elementConfig]="elementConfig"
657
+ (updateElement)="handleOnSaveUpdateElement($event)"
658
+ ></basic-phone-config-editor>
659
+ </ng-container>
518
660
  </ng-container>
519
661
  </form>
520
662
  `,
@@ -538,4 +680,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
538
680
  }], updateElement: [{
539
681
  type: Output
540
682
  }], ngOnInit: [], ngOnChanges: [], assignVariables: [], createBasicFormGroup: [], handleOnSaveUpdateElement: [], handleOnSave: [] } });
541
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZWxlbWVudC1jb25maWcuZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL2J1aWxkZXIvZWxlbWVudC1jb25maWctZWRpdG9yL2VkaXRvcnMvYmFzaWMtZWxlbWVudC1jb25maWcuZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQWtOekQsTUFBTSxPQUFPLHdCQUF3QjtJQWlDbkM7UUEvQkEscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBRzdCLGtCQUFhLEdBQVE7WUFDbkIsS0FBSyxFQUFFLEVBQUU7WUFDVCxHQUFHLEVBQUUsRUFBRTtZQUNQLFFBQVEsRUFBRSxLQUFLO1lBQ2YsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSxJQUFJO2FBQ1o7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsUUFBUSxFQUFFLElBQUk7YUFDZjtZQUNELFVBQVUsRUFBRTtnQkFDVixXQUFXLEVBQUUsRUFBRTtnQkFDZixRQUFRLEVBQUUsS0FBSzthQUNoQjtTQUNGLENBQUM7UUFHRixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFeEMsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsMEJBQXFCLEdBQVcsQ0FBQyxDQUFDO1FBRWxD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Ozs7Ozs7Ozs7Ozs7O0dBZ01UO0FBa0REO0lBREMsU0FBUzt3REFJVDtBQUdEO0lBREMsU0FBUzsyREFzQlQ7QUFHRDtJQURDLFNBQVM7K0RBR1Q7QUFHRDtJQURDLFNBQVM7b0VBeUNUO0FBR0Q7SUFEQyxTQUFTO3lFQW1CVDtBQUdEO0lBREMsU0FBUzs0REFHVDs0RkF6SVUsd0JBQXdCO2tCQWhOcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNkJBQTZCO29CQUN2QyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdNVDtvQkFDRCxNQUFNLEVBQUU7d0JBQ047Ozs7Ozs7OztLQVNDO3FCQUNGO2lCQUNGOzBFQUdDLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFzQk4sYUFBYTtzQkFEWixNQUFNO2dCQVdQLFFBQVEsTUFNUixXQUFXLE1Bd0JYLGVBQWUsTUFLZixvQkFBb0IsTUEyQ3BCLHlCQUF5QixNQXFCekIsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IGxvZ01ldGhvZCwgbWVyZ2VPYmplY3RzIH0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJiYXNpYy1lbGVtZW50LWNvbmZpZy1lZGl0b3JcIixcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWxlbWVudENvbmZpZyAhPT0gdW5kZWZpbmVkXCI+XG4gICAgICA8dGFibGU+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+SWQ8L3RkPlxuICAgICAgICAgIDx0ZD57eyBlbGVtZW50Q29uZmlnLmVsZW1lbnRJZCB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+VHlwZTwvdGQ+XG4gICAgICAgICAgPHRkPnt7IGVsZW1lbnRDb25maWcuZWxlbWVudFR5cGUgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPkNhdGVnb3J5PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgZWxlbWVudENvbmZpZy5lbGVtZW50Q2F0ZWdvcnkgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90YWJsZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImJhc2ljRm9ybUdyb3VwXCI+XG4gICAgICA8ZmllbGRzZXQ+XG4gICAgICAgIDxsZWdlbmQ+U3RhbmRhcmQ8L2xlZ2VuZD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiYmFzaWMtZmllbGQtbGFiZWxcIj5MYWJlbDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBpZD1cImJhc2ljLWZpZWxkLWxhYmVsXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxhYmVsXCJcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImJhc2ljLWZpZWxkLWtleVwiPktleTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBpZD1cImJhc2ljLWZpZWxkLWtleVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJrZXlcIlxuICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiYmFzaWMtaW5wdXQtcHJvcGVydHktZGlzYWJsZWRcIj5kaXNhYmxlZDwvbGFiZWw+XG4gICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgaWQ9XCJiYXNpYy1pbnB1dC1wcm9wZXJ0eS1kaXNhYmxlZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJudWxsXCJcbiAgICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgICAgPlNlbGVjdCBlaXRoZXIgdHJ1ZSBvciBmYWxzZTwvb3B0aW9uXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkaXNhYmxlZCBvZiBbdHJ1ZSwgZmFsc2VdXCJcbiAgICAgICAgICAgICAgW25nVmFsdWVdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBkaXNhYmxlZCB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9maWVsZHNldD5cbiAgICAgIDxmaWVsZHNldCBmb3JtR3JvdXBOYW1lPVwiZGVmYXVsdFwiPlxuICAgICAgICA8bGVnZW5kPkRlZmF1bHQ8L2xlZ2VuZD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiYmFzaWMtaW5wdXQtcHJvcGVydHktdmFsdWVcIj52YWx1ZTwvbGFiZWw+XG4gICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgaWQ9XCJiYXNpYy1pbnB1dC1wcm9wZXJ0eS12YWx1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJudWxsXCJcbiAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgPlNlbGVjdCBlaXRoZXIgdHJ1ZSBvciBmYWxzZTwvb3B0aW9uXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBbdHJ1ZSwgZmFsc2VdXCJcbiAgICAgICAgICAgICAgW25nVmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9maWVsZHNldD5cbiAgICAgIDxmaWVsZHNldCBmb3JtR3JvdXBOYW1lPVwidmFsaWRhdG9yc1wiPlxuICAgICAgICA8bGVnZW5kPlZhbGlkYXRvcnM8L2xlZ2VuZD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiYmFzaWMtaW5wdXQtdmFsaWRhdG9ycy1taW5cIj5taW48L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWluXCJcbiAgICAgICAgICAgIGlkPVwiYmFzaWMtaW5wdXQtdmFsaWRhdG9ycy1taW5cIlxuICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImJhc2ljLWlucHV0LXZhbGlkYXRvcnMtbWF4XCI+bWF4PC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1heFwiXG4gICAgICAgICAgICBpZD1cImJhc2ljLWlucHV0LXZhbGlkYXRvcnMtbWF4XCJcbiAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJiYXNpYy1pbnB1dC12YWxpZGF0b3JzLW1pbkxlbmd0aFwiPm1pbkxlbmd0aDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtaW5MZW5ndGhcIlxuICAgICAgICAgICAgaWQ9XCJiYXNpYy1pbnB1dC12YWxpZGF0b3JzLW1pbkxlbmd0aFwiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiYmFzaWMtaW5wdXQtdmFsaWRhdG9ycy1tYXhMZW5ndGhcIj5tYXhMZW5ndGg8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWF4TGVuZ3RoXCJcbiAgICAgICAgICAgIGlkPVwiYmFzaWMtaW5wdXQtdmFsaWRhdG9ycy1tYXhMZW5ndGhcIlxuICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImJhc2ljLWlucHV0LXByb3BlcnR5LXJlcXVpcmVkXCI+cmVxdWlyZWQ8L2xhYmVsPlxuICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgIGlkPVwiYmFzaWMtaW5wdXQtcHJvcGVydHktcmVxdWlyZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgW25nVmFsdWVdPVwibnVsbFwiXG4gICAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICAgID5TZWxlY3QgZWl0aGVyIHRydWUgb3IgZmFsc2U8L29wdGlvblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmVxdWlyZWQgb2YgW3RydWUsIGZhbHNlXVwiXG4gICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgcmVxdWlyZWQgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8ZmllbGRzZXQgZm9ybUdyb3VwTmFtZT1cInByb3BlcnRpZXNcIj5cbiAgICAgICAgPGxlZ2VuZD5Qcm9wZXJ0aWVzPC9sZWdlbmQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImJhc2ljLWlucHV0LXByb3BlcnR5LXBsYWNlaG9sZGVyXCI+UGxhY2Vob2xkZXI8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgaWQ9XCJiYXNpYy1pbnB1dC1wcm9wZXJ0eS1wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImJhc2ljLWlucHV0LXByb3BlcnR5LXJlYWRvbmx5XCI+cmVhZE9ubHk8L2xhYmVsPlxuICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlYWRPbmx5XCJcbiAgICAgICAgICAgIGlkPVwiYmFzaWMtaW5wdXQtcHJvcGVydHktcmVhZG9ubHlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgW25nVmFsdWVdPVwibnVsbFwiXG4gICAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICAgID5TZWxlY3QgZWl0aGVyIHRydWUgb3IgZmFsc2U8L29wdGlvblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmVhZG9ubHkgb2YgW3RydWUsIGZhbHNlXVwiXG4gICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgcmVhZG9ubHkgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJlbGVtZW50VHlwZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cbiAgICAgICAgICA8YmFzaWMtdGV4dC1jb25maWctZWRpdG9yXG4gICAgICAgICAgICBbc2F2ZUJhc2ljQ2xpY2tDb3VudGVyXT1cInNhdmVCYXNpY0NsaWNrQ291bnRlclwiXG4gICAgICAgICAgICBbZWxlbWVudENvbmZpZ109XCJlbGVtZW50Q29uZmlnXCJcbiAgICAgICAgICAgICh1cGRhdGVFbGVtZW50KT1cImhhbmRsZU9uU2F2ZVVwZGF0ZUVsZW1lbnQoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYmFzaWMtdGV4dC1jb25maWctZWRpdG9yPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JhZGlvJ1wiPlxuICAgICAgICAgIDxiYXNpYy1yYWRpby1jb25maWctZWRpdG9yXG4gICAgICAgICAgICBbc2F2ZUJhc2ljQ2xpY2tDb3VudGVyXT1cInNhdmVCYXNpY0NsaWNrQ291bnRlclwiXG4gICAgICAgICAgICBbZWxlbWVudENvbmZpZ109XCJlbGVtZW50Q29uZmlnXCJcbiAgICAgICAgICAgICh1cGRhdGVFbGVtZW50KT1cImhhbmRsZU9uU2F2ZVVwZGF0ZUVsZW1lbnQoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYmFzaWMtcmFkaW8tY29uZmlnLWVkaXRvcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Zvcm0+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICBnYXA6IDFyZW07XG4gICAgICB9XG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljRWxlbWVudENvbmZpZ0VkaXRvciBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHNhdmVDbGlja0NvdW50ZXI6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KClcbiAgZWxlbWVudENvbmZpZzogYW55ID0ge1xuICAgIGxhYmVsOiBcIlwiLFxuICAgIGtleTogXCJcIixcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgZGVmYXVsdDoge1xuICAgICAgdmFsdWU6IHRydWVcbiAgICB9LFxuICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgIG1pbjogbnVsbCxcbiAgICAgIG1heDogbnVsbCxcbiAgICAgIG1pbkxlbmd0aDogbnVsbCxcbiAgICAgIG1heExlbmd0aDogbnVsbCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBwbGFjZWhvbGRlcjogXCJcIixcbiAgICAgIHJlYWRPbmx5OiBmYWxzZVxuICAgIH1cbiAgfTtcblxuICBAT3V0cHV0KClcbiAgdXBkYXRlRWxlbWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGVsZW1lbnRUeXBlOiBzdHJpbmcgPSBcIlwiO1xuICBzYXZlQmFzaWNDbGlja0NvdW50ZXI6IG51bWJlciA9IDA7XG5cbiAgYmFzaWNGb3JtR3JvdXA6IEZvcm1Hcm91cCA9IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFzc2lnblZhcmlhYmxlcygpO1xuICAgIHRoaXMuY3JlYXRlQmFzaWNGb3JtR3JvdXAoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IHZlcmlmeUNoYW5nZSA9IChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIGNoYW5nZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhY2hhbmdlc1trZXldLmZpcnN0Q2hhbmdlO1xuICAgIH07XG5cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZWxlbWVudENvbmZpZ1wiKSkge1xuICAgICAgdGhpcy5lbGVtZW50Q29uZmlnID0gY2hhbmdlcy5lbGVtZW50Q29uZmlnLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHRoaXMuYXNzaWduVmFyaWFibGVzKCk7XG4gICAgICB0aGlzLmNyZWF0ZUJhc2ljRm9ybUdyb3VwKCk7XG4gICAgfVxuXG4gICAgaWYgKHZlcmlmeUNoYW5nZShcInNhdmVDbGlja0NvdW50ZXJcIikpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hhbmdlcy5zYXZlQ2xpY2tDb3VudGVyLnByZXZpb3VzVmFsdWUgIT09XG4gICAgICAgIGNoYW5nZXMuc2F2ZUNsaWNrQ291bnRlci5jdXJyZW50VmFsdWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNhdmVDbGlja0NvdW50ZXIgPSBjaGFuZ2VzLnNhdmVDbGlja0NvdW50ZXIuY3VycmVudFZhbHVlO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlT25TYXZlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3NpZ25WYXJpYWJsZXMoKSB7XG4gICAgdGhpcy5lbGVtZW50VHlwZSA9IHRoaXMuZWxlbWVudENvbmZpZy5lbGVtZW50VHlwZTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgY3JlYXRlQmFzaWNGb3JtR3JvdXAoKSB7XG4gICAgdGhpcy5iYXNpY0Zvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgbGFiZWw6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcubGFiZWwpLFxuICAgICAga2V5OiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbGVtZW50Q29uZmlnLmtleSksXG4gICAgICBkaXNhYmxlZDogbmV3IEZvcm1Db250cm9sKHRoaXMuZWxlbWVudENvbmZpZy5kaXNhYmxlZCksXG4gICAgICBkZWZhdWx0OiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgdmFsdWU6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcuZGVmYXVsdC52YWx1ZSwge1xuICAgICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICAgIHZhbGlkYXRvcnM6IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBtaW46IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcudmFsaWRhdG9ycy5taW4sIHtcbiAgICAgICAgICB1cGRhdGVPbjogXCJjaGFuZ2VcIlxuICAgICAgICB9KSxcbiAgICAgICAgbWluTGVuZ3RoOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbGVtZW50Q29uZmlnLnZhbGlkYXRvcnMubWluTGVuZ3RoLCB7XG4gICAgICAgICAgdXBkYXRlT246IFwiY2hhbmdlXCJcbiAgICAgICAgfSksXG4gICAgICAgIG1heDogbmV3IEZvcm1Db250cm9sKHRoaXMuZWxlbWVudENvbmZpZy52YWxpZGF0b3JzLm1heCwge1xuICAgICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICAgIH0pLFxuICAgICAgICBtYXhMZW5ndGg6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcudmFsaWRhdG9ycy5tYXhMZW5ndGgsIHtcbiAgICAgICAgICB1cGRhdGVPbjogXCJjaGFuZ2VcIlxuICAgICAgICB9KSxcbiAgICAgICAgcmVxdWlyZWQ6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcudmFsaWRhdG9ycy5yZXF1aXJlZCwge1xuICAgICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICAgIHByb3BlcnRpZXM6IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBwbGFjZWhvbGRlcjogbmV3IEZvcm1Db250cm9sKFxuICAgICAgICAgIHRoaXMuZWxlbWVudENvbmZpZy5wcm9wZXJ0aWVzLnBsYWNlaG9sZGVyLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICByZWFkT25seTogbmV3IEZvcm1Db250cm9sKHRoaXMuZWxlbWVudENvbmZpZy5wcm9wZXJ0aWVzLnJlYWRPbmx5LCB7XG4gICAgICAgICAgdXBkYXRlT246IFwiY2hhbmdlXCJcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSk7XG4gICAgdGhpcy5iYXNpY0Zvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uU2F2ZVVwZGF0ZUVsZW1lbnQoZXZlbnQ6IGFueSkge1xuICAgIC8vIEdldCBDb21tb24gQ29uZmlnXG4gICAgbGV0IGJhc2ljRWxlbWVudENvbW1vbkNvbmZpZyA9IHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICBiYXNpY0VsZW1lbnRDb21tb25Db25maWcua2V5ID0gYmFzaWNFbGVtZW50Q29tbW9uQ29uZmlnLmtleS5yZXBsYWNlKFxuICAgICAgL1xccy9nLFxuICAgICAgXCJfXCJcbiAgICApO1xuXG4gICAgLy8gR2V0IEJhc2ljIEVsZW1lbnQgQ29uZmlnXG4gICAgY29uc3QgYmFzaWNFbGVtZW50Q29uZmlnID0gZXZlbnQuYmFzaWNFbGVtZW50Q29uZmlnO1xuXG4gICAgdGhpcy5lbGVtZW50Q29uZmlnID0gbWVyZ2VPYmplY3RzKFxuICAgICAgdGhpcy5lbGVtZW50Q29uZmlnLFxuICAgICAgYmFzaWNFbGVtZW50Q29tbW9uQ29uZmlnLFxuICAgICAgYmFzaWNFbGVtZW50Q29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRWxlbWVudC5lbWl0KHsgZWxlbWVudENvbmZpZzogdGhpcy5lbGVtZW50Q29uZmlnIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPblNhdmUoKSB7XG4gICAgdGhpcy5zYXZlQmFzaWNDbGlja0NvdW50ZXIrKztcbiAgfVxufVxuIl19
683
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZWxlbWVudC1jb25maWcuZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL2J1aWxkZXIvZWxlbWVudC1jb25maWctZWRpdG9yL2VkaXRvcnMvYmFzaWMtZWxlbWVudC1jb25maWcuZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBc1J6RCxNQUFNLE9BQU8sd0JBQXdCO0lBaUNuQztRQS9CQSxxQkFBZ0IsR0FBVyxDQUFDLENBQUM7UUFHN0Isa0JBQWEsR0FBUTtZQUNuQixLQUFLLEVBQUUsRUFBRTtZQUNULEdBQUcsRUFBRSxFQUFFO1lBQ1AsUUFBUSxFQUFFLEtBQUs7WUFDZixPQUFPLEVBQUU7Z0JBQ1AsS0FBSyxFQUFFLElBQUk7YUFDWjtZQUNELFVBQVUsRUFBRTtnQkFDVixHQUFHLEVBQUUsSUFBSTtnQkFDVCxHQUFHLEVBQUUsSUFBSTtnQkFDVCxTQUFTLEVBQUUsSUFBSTtnQkFDZixTQUFTLEVBQUUsSUFBSTtnQkFDZixRQUFRLEVBQUUsSUFBSTthQUNmO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLFdBQVcsRUFBRSxFQUFFO2dCQUNmLFFBQVEsRUFBRSxLQUFLO2FBQ2hCO1NBQ0YsQ0FBQztRQUdGLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV4QyxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QiwwQkFBcUIsR0FBVyxDQUFDLENBQUM7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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb1FUO0FBa0REO0lBREMsU0FBUzt3REFJVDtBQUdEO0lBREMsU0FBUzsyREFzQlQ7QUFHRDtJQURDLFNBQVM7K0RBR1Q7QUFHRDtJQURDLFNBQVM7b0VBeUNUO0FBR0Q7SUFEQyxTQUFTO3lFQW1CVDtBQUdEO0lBREMsU0FBUzs0REFHVDs0RkF6SVUsd0JBQXdCO2tCQXBScEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNkJBQTZCO29CQUN2QyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb1FUO29CQUNELE1BQU0sRUFBRTt3QkFDTjs7Ozs7Ozs7O0tBU0M7cUJBQ0Y7aUJBQ0Y7MEVBR0MsZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQXNCTixhQUFhO3NCQURaLE1BQU07Z0JBV1AsUUFBUSxNQU1SLFdBQVcsTUF3QlgsZUFBZSxNQUtmLG9CQUFvQixNQTJDcEIseUJBQXlCLE1BcUJ6QixZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgbG9nTWV0aG9kLCBtZXJnZU9iamVjdHMgfSBmcm9tIFwia3dpa2lkLXRvb2xraXRcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImJhc2ljLWVsZW1lbnQtY29uZmlnLWVkaXRvclwiLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbGVtZW50Q29uZmlnICE9PSB1bmRlZmluZWRcIj5cbiAgICAgIDxrd2lrdWktdGFibGVcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvdmVyZmxvdzogYXV0bzsgYm94LXNoYWRvdzogMHB4IDBweCAxMHB4IC02cHggIzAwMDsgYm9yZGVyOiAwcHggc29saWQgZ3JheTsgYm9yZGVyLXJhZGl1czogMXJlbTtcIlxuICAgICAgICBbY29sdW1uc109XCJbJ2lkJywgJ3R5cGUnLCAnY2F0ZWdvcnknXVwiXG4gICAgICAgIFtoZWFkZXJzXT1cInsgaWQ6ICdJRCcsIHR5cGU6ICdUeXBlJywgY2F0ZWdvcnk6ICdDYXRlZ29yeScgfVwiXG4gICAgICAgIFtkYXRhXT1cIltcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogZWxlbWVudENvbmZpZy5lbGVtZW50SWQsXG4gICAgICAgICAgICB0eXBlOiBlbGVtZW50Q29uZmlnLmVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGVsZW1lbnRDb25maWcuZWxlbWVudENhdGVnb3J5XG4gICAgICAgICAgfVxuICAgICAgICBdXCJcbiAgICAgICAgKG9uQ2xpY2spPVwiKHVuZGVmaW5lZClcIlxuICAgICAgPjwva3dpa3VpLXRhYmxlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiYmFzaWNGb3JtR3JvdXBcIj5cbiAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgPGxlZ2VuZCBjbGFzcz1cImZvcm0tZ3JvdXAtdGl0bGVcIj5TdGFuZGFyZDwvbGVnZW5kPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxrd2lrdWktaW5wdXRcbiAgICAgICAgICAgIFtsYWJlbF09XCInTGFiZWwnXCJcbiAgICAgICAgICAgIFtpZF09XCInYmFzaWMtZmllbGQtbGFiZWwnXCJcbiAgICAgICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidsYWJlbCdcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImJhc2ljRm9ybUdyb3VwLmNvbnRyb2xzWydsYWJlbCddXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBlbnRlciB5b3VyIExhYmVsJ1wiXG4gICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2ludmFsaWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2Nhc2VdPVwiJ2RlZmF1bHQnXCJcbiAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICA+PC9rd2lrdWktaW5wdXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxrd2lrdWktaW5wdXRcbiAgICAgICAgICAgIFtsYWJlbF09XCInS2V5J1wiXG4gICAgICAgICAgICBbaWRdPVwiJ2Jhc2ljLWZpZWxkLWtleSdcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ2tleSdcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImJhc2ljRm9ybUdyb3VwLmNvbnRyb2xzWydrZXknXVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidQbGVhc2UgZW50ZXIgeW91ciBLZXknXCJcbiAgICAgICAgICAgIFtmb2N1c109XCJmYWxzZVwiXG4gICAgICAgICAgICBbaW52YWxpZF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbY2FzZV09XCInZGVmYXVsdCdcIlxuICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgID48L2t3aWt1aS1pbnB1dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGt3aWt1aS1zZWxlY3QtY29tYm9ib3hcbiAgICAgICAgICAgIFtvcHRpb25zXT1cIlt0cnVlLCBmYWxzZV1cIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidEaXNhYmxlZCdcIlxuICAgICAgICAgICAgW2lkXT1cIidiYXNpYy1pbnB1dC1wcm9wZXJ0eS1kaXNhYmxlZCdcIlxuICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInZGlzYWJsZWQnXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJiYXNpY0Zvcm1Hcm91cC5jb250cm9sc1snZGlzYWJsZWQnXVwiXG4gICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtpbnZhbGlkXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUGxlYXNlIHNlbGVjdCBlaXRoZXIgdHJ1ZSBvciBmYWxzZSdcIlxuICAgICAgICAgID48L2t3aWt1aS1zZWxlY3QtY29tYm9ib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9maWVsZHNldD5cblxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwiZGVmYXVsdFwiPlxuICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cImZvcm0tZ3JvdXAtdGl0bGVcIj5EZWZhdWx0PC9sZWdlbmQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxrd2lrdWktc2VsZWN0LWNvbWJvYm94XG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cIlt0cnVlLCBmYWxzZV1cIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3ZhbHVlJ1wiXG4gICAgICAgICAgICAgIFtpZF09XCInYmFzaWMtaW5wdXQtcHJvcGVydHktdmFsdWUnXCJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIid2YWx1ZSdcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiXG4gICAgICAgICAgICAgICAgYmFzaWNGb3JtR3JvdXBbJ2NvbnRyb2xzJ10uZGVmYXVsdFsnY29udHJvbHMnXS52YWx1ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUGxlYXNlIHNlbGVjdCBlaXRoZXIgdHJ1ZSBvciBmYWxzZSdcIlxuICAgICAgICAgICAgPjwva3dpa3VpLXNlbGVjdC1jb21ib2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJ2YWxpZGF0b3JzXCI+XG4gICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwiZm9ybS1ncm91cC10aXRsZVwiPlZhbGlkYXRvcnM8L2xlZ2VuZD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1udW1iZXJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidtaW4nXCJcbiAgICAgICAgICAgICAgW2lkXT1cIidiYXNpYy1pbnB1dC12YWxpZGF0b3JzLW1pbidcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidtaW4nXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIlxuICAgICAgICAgICAgICAgIGJhc2ljRm9ybUdyb3VwWydjb250cm9scyddLnZhbGlkYXRvcnNbJ2NvbnRyb2xzJ10ubWluXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUGxlYXNlIGVudGVyIHlvdXIgbWluaW11bSB2YWx1ZSdcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtbnVtYmVyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCInbWF4J1wiXG4gICAgICAgICAgICAgIFtpZF09XCInYmFzaWMtaW5wdXQtdmFsaWRhdG9ycy1tYXgnXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInbWF4J1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcbiAgICAgICAgICAgICAgICBiYXNpY0Zvcm1Hcm91cFsnY29udHJvbHMnXS52YWxpZGF0b3JzWydjb250cm9scyddLm1heFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBlbnRlciB5b3VyIG1heGltdW0gdmFsdWUnXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtbnVtYmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LW51bWJlclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiJ21pbkxlbmd0aCdcIlxuICAgICAgICAgICAgICBbaWRdPVwiJ2Jhc2ljLWlucHV0LXZhbGlkYXRvcnMtbWluTGVuZ3RoJ1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ21pbkxlbmd0aCdcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiXG4gICAgICAgICAgICAgICAgYmFzaWNGb3JtR3JvdXBbJ2NvbnRyb2xzJ10udmFsaWRhdG9yc1snY29udHJvbHMnXS5taW5MZW5ndGhcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidQbGVhc2UgZW50ZXIgeW91ciBtaW5pbXVtIGxlbmd0aCB2YWx1ZSdcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtbnVtYmVyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCInbWF4TGVuZ3RoJ1wiXG4gICAgICAgICAgICAgIFtpZF09XCInYmFzaWMtaW5wdXQtdmFsaWRhdG9ycy1tYXhMZW5ndGgnXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInbWF4TGVuZ3RoJ1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcbiAgICAgICAgICAgICAgICBiYXNpY0Zvcm1Hcm91cFsnY29udHJvbHMnXS52YWxpZGF0b3JzWydjb250cm9scyddLm1heExlbmd0aFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBlbnRlciB5b3VyIG1heGltdW0gbGVuZ3RoIHZhbHVlJ1wiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LW51bWJlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGt3aWt1aS1zZWxlY3QtY29tYm9ib3hcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiW3RydWUsIGZhbHNlXVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCIncmVxdWlyZWQnXCJcbiAgICAgICAgICAgICAgW2lkXT1cIidiYXNpYy1pbnB1dC1wcm9wZXJ0eS1yZXF1aXJlZCdcIlxuICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ3JlcXVpcmVkJ1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcbiAgICAgICAgICAgICAgICBiYXNpY0Zvcm1Hcm91cFsnY29udHJvbHMnXS52YWxpZGF0b3JzWydjb250cm9scyddLnJlcXVpcmVkXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidQbGVhc2Ugc2VsZWN0IGVpdGhlciB0cnVlIG9yIGZhbHNlJ1wiXG4gICAgICAgICAgICA+PC9rd2lrdWktc2VsZWN0LWNvbWJvYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cInByb3BlcnRpZXNcIj5cbiAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJmb3JtLWdyb3VwLXRpdGxlXCI+UHJvcGVydGllczwvbGVnZW5kPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0XG4gICAgICAgICAgICAgIFtsYWJlbF09XCInUGxhY2Vob2xkZXInXCJcbiAgICAgICAgICAgICAgW2lkXT1cIidiYXNpYy1maWVsZC1wbGFjZWhvbGRlcidcIlxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidwbGFjZWhvbGRlcidcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiXG4gICAgICAgICAgICAgICAgYmFzaWNGb3JtR3JvdXAuY29udHJvbHMucHJvcGVydGllc1snY29udHJvbHMnXS5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBlbnRlciB5b3VyIHBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Nhc2VdPVwiJ2RlZmF1bHQnXCJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8a3dpa3VpLXNlbGVjdC1jb21ib2JveFxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJbdHJ1ZSwgZmFsc2VdXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidyZWFkT25seSdcIlxuICAgICAgICAgICAgICBbaWRdPVwiJ2Jhc2ljLWlucHV0LXByb3BlcnR5LXJlYWRPbmx5J1wiXG4gICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCIncmVhZE9ubHknXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIlxuICAgICAgICAgICAgICAgIGJhc2ljRm9ybUdyb3VwWydjb250cm9scyddLnByb3BlcnRpZXNbJ2NvbnRyb2xzJ10ucmVhZE9ubHlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBzZWxlY3QgZWl0aGVyIHRydWUgb3IgZmFsc2UnXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1zZWxlY3QtY29tYm9ib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZWxlbWVudFR5cGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XG4gICAgICAgICAgPGJhc2ljLXRleHQtY29uZmlnLWVkaXRvclxuICAgICAgICAgICAgW3NhdmVCYXNpY0NsaWNrQ291bnRlcl09XCJzYXZlQmFzaWNDbGlja0NvdW50ZXJcIlxuICAgICAgICAgICAgW2VsZW1lbnRDb25maWddPVwiZWxlbWVudENvbmZpZ1wiXG4gICAgICAgICAgICAodXBkYXRlRWxlbWVudCk9XCJoYW5kbGVPblNhdmVVcGRhdGVFbGVtZW50KCRldmVudClcIlxuICAgICAgICAgID48L2Jhc2ljLXRleHQtY29uZmlnLWVkaXRvcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XG4gICAgICAgICAgPGJhc2ljLW51bWJlci1jb25maWctZWRpdG9yXG4gICAgICAgICAgICBbc2F2ZUJhc2ljQ2xpY2tDb3VudGVyXT1cInNhdmVCYXNpY0NsaWNrQ291bnRlclwiXG4gICAgICAgICAgICBbZWxlbWVudENvbmZpZ109XCJlbGVtZW50Q29uZmlnXCJcbiAgICAgICAgICAgICh1cGRhdGVFbGVtZW50KT1cImhhbmRsZU9uU2F2ZVVwZGF0ZUVsZW1lbnQoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYmFzaWMtbnVtYmVyLWNvbmZpZy1lZGl0b3I+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCI+XG4gICAgICAgICAgPGJhc2ljLXJhZGlvLWNvbmZpZy1lZGl0b3JcbiAgICAgICAgICAgIFtzYXZlQmFzaWNDbGlja0NvdW50ZXJdPVwic2F2ZUJhc2ljQ2xpY2tDb3VudGVyXCJcbiAgICAgICAgICAgIFtlbGVtZW50Q29uZmlnXT1cImVsZW1lbnRDb25maWdcIlxuICAgICAgICAgICAgKHVwZGF0ZUVsZW1lbnQpPVwiaGFuZGxlT25TYXZlVXBkYXRlRWxlbWVudCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9iYXNpYy1yYWRpby1jb25maWctZWRpdG9yPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxuICAgICAgICAgIDxiYXNpYy1jaGVja2JveC1jb25maWctZWRpdG9yXG4gICAgICAgICAgICBbc2F2ZUJhc2ljQ2xpY2tDb3VudGVyXT1cInNhdmVCYXNpY0NsaWNrQ291bnRlclwiXG4gICAgICAgICAgICBbZWxlbWVudENvbmZpZ109XCJlbGVtZW50Q29uZmlnXCJcbiAgICAgICAgICAgICh1cGRhdGVFbGVtZW50KT1cImhhbmRsZU9uU2F2ZVVwZGF0ZUVsZW1lbnQoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYmFzaWMtY2hlY2tib3gtY29uZmlnLWVkaXRvcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxuICAgICAgICAgIDxiYXNpYy1jaGVja2JveC1jb25maWctZWRpdG9yXG4gICAgICAgICAgICBbc2F2ZUJhc2ljQ2xpY2tDb3VudGVyXT1cInNhdmVCYXNpY0NsaWNrQ291bnRlclwiXG4gICAgICAgICAgICBbZWxlbWVudENvbmZpZ109XCJlbGVtZW50Q29uZmlnXCJcbiAgICAgICAgICAgICh1cGRhdGVFbGVtZW50KT1cImhhbmRsZU9uU2F2ZVVwZGF0ZUVsZW1lbnQoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYmFzaWMtY2hlY2tib3gtY29uZmlnLWVkaXRvcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidvdHAnXCI+XG4gICAgICAgICAgPGJhc2ljLW90cC1jb25maWctZWRpdG9yXG4gICAgICAgICAgICBbc2F2ZUJhc2ljQ2xpY2tDb3VudGVyXT1cInNhdmVCYXNpY0NsaWNrQ291bnRlclwiXG4gICAgICAgICAgICBbZWxlbWVudENvbmZpZ109XCJlbGVtZW50Q29uZmlnXCJcbiAgICAgICAgICAgICh1cGRhdGVFbGVtZW50KT1cImhhbmRsZU9uU2F2ZVVwZGF0ZUVsZW1lbnQoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYmFzaWMtb3RwLWNvbmZpZy1lZGl0b3I+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGhvbmUnXCI+XG4gICAgICAgICAgPGJhc2ljLXBob25lLWNvbmZpZy1lZGl0b3JcbiAgICAgICAgICAgIFtzYXZlQmFzaWNDbGlja0NvdW50ZXJdPVwic2F2ZUJhc2ljQ2xpY2tDb3VudGVyXCJcbiAgICAgICAgICAgIFtlbGVtZW50Q29uZmlnXT1cImVsZW1lbnRDb25maWdcIlxuICAgICAgICAgICAgKHVwZGF0ZUVsZW1lbnQpPVwiaGFuZGxlT25TYXZlVXBkYXRlRWxlbWVudCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9iYXNpYy1waG9uZS1jb25maWctZWRpdG9yPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZm9ybT5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgICAgIGdhcDogMXJlbTtcbiAgICAgIH1cbiAgICBgXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQmFzaWNFbGVtZW50Q29uZmlnRWRpdG9yIGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgc2F2ZUNsaWNrQ291bnRlcjogbnVtYmVyID0gMDtcblxuICBASW5wdXQoKVxuICBlbGVtZW50Q29uZmlnOiBhbnkgPSB7XG4gICAgbGFiZWw6IFwiXCIsXG4gICAga2V5OiBcIlwiLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBkZWZhdWx0OiB7XG4gICAgICB2YWx1ZTogdHJ1ZVxuICAgIH0sXG4gICAgdmFsaWRhdG9yczoge1xuICAgICAgbWluOiBudWxsLFxuICAgICAgbWF4OiBudWxsLFxuICAgICAgbWluTGVuZ3RoOiBudWxsLFxuICAgICAgbWF4TGVuZ3RoOiBudWxsLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHBsYWNlaG9sZGVyOiBcIlwiLFxuICAgICAgcmVhZE9ubHk6IGZhbHNlXG4gICAgfVxuICB9O1xuXG4gIEBPdXRwdXQoKVxuICB1cGRhdGVFbGVtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZWxlbWVudFR5cGU6IHN0cmluZyA9IFwiXCI7XG4gIHNhdmVCYXNpY0NsaWNrQ291bnRlcjogbnVtYmVyID0gMDtcblxuICBiYXNpY0Zvcm1Hcm91cDogRm9ybUdyb3VwID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBAbG9nTWV0aG9kXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYXNzaWduVmFyaWFibGVzKCk7XG4gICAgdGhpcy5jcmVhdGVCYXNpY0Zvcm1Hcm91cCgpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc3QgdmVyaWZ5Q2hhbmdlID0gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFjaGFuZ2VzW2tleV0uZmlyc3RDaGFuZ2U7XG4gICAgfTtcblxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJlbGVtZW50Q29uZmlnXCIpKSB7XG4gICAgICB0aGlzLmVsZW1lbnRDb25maWcgPSBjaGFuZ2VzLmVsZW1lbnRDb25maWcuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5hc3NpZ25WYXJpYWJsZXMoKTtcbiAgICAgIHRoaXMuYmFzaWNGb3JtR3JvdXA/LnJlc2V0KHRoaXMuZWxlbWVudENvbmZpZyk7XG4gICAgfVxuXG4gICAgaWYgKHZlcmlmeUNoYW5nZShcInNhdmVDbGlja0NvdW50ZXJcIikpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hhbmdlcy5zYXZlQ2xpY2tDb3VudGVyLnByZXZpb3VzVmFsdWUgIT09XG4gICAgICAgIGNoYW5nZXMuc2F2ZUNsaWNrQ291bnRlci5jdXJyZW50VmFsdWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNhdmVDbGlja0NvdW50ZXIgPSBjaGFuZ2VzLnNhdmVDbGlja0NvdW50ZXIuY3VycmVudFZhbHVlO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlT25TYXZlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3NpZ25WYXJpYWJsZXMoKSB7XG4gICAgdGhpcy5lbGVtZW50VHlwZSA9IHRoaXMuZWxlbWVudENvbmZpZy5lbGVtZW50VHlwZTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgY3JlYXRlQmFzaWNGb3JtR3JvdXAoKSB7XG4gICAgdGhpcy5iYXNpY0Zvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgbGFiZWw6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcubGFiZWwpLFxuICAgICAga2V5OiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbGVtZW50Q29uZmlnLmtleSksXG4gICAgICBkaXNhYmxlZDogbmV3IEZvcm1Db250cm9sKHRoaXMuZWxlbWVudENvbmZpZy5kaXNhYmxlZCksXG4gICAgICBkZWZhdWx0OiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgdmFsdWU6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcuZGVmYXVsdC52YWx1ZSwge1xuICAgICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICAgIHZhbGlkYXRvcnM6IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBtaW46IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcudmFsaWRhdG9ycy5taW4sIHtcbiAgICAgICAgICB1cGRhdGVPbjogXCJjaGFuZ2VcIlxuICAgICAgICB9KSxcbiAgICAgICAgbWluTGVuZ3RoOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbGVtZW50Q29uZmlnLnZhbGlkYXRvcnMubWluTGVuZ3RoLCB7XG4gICAgICAgICAgdXBkYXRlT246IFwiY2hhbmdlXCJcbiAgICAgICAgfSksXG4gICAgICAgIG1heDogbmV3IEZvcm1Db250cm9sKHRoaXMuZWxlbWVudENvbmZpZy52YWxpZGF0b3JzLm1heCwge1xuICAgICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICAgIH0pLFxuICAgICAgICBtYXhMZW5ndGg6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcudmFsaWRhdG9ycy5tYXhMZW5ndGgsIHtcbiAgICAgICAgICB1cGRhdGVPbjogXCJjaGFuZ2VcIlxuICAgICAgICB9KSxcbiAgICAgICAgcmVxdWlyZWQ6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcudmFsaWRhdG9ycy5yZXF1aXJlZCwge1xuICAgICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICAgIH0pXG4gICAgICB9KSxcbiAgICAgIHByb3BlcnRpZXM6IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBwbGFjZWhvbGRlcjogbmV3IEZvcm1Db250cm9sKFxuICAgICAgICAgIHRoaXMuZWxlbWVudENvbmZpZy5wcm9wZXJ0aWVzLnBsYWNlaG9sZGVyLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICByZWFkT25seTogbmV3IEZvcm1Db250cm9sKHRoaXMuZWxlbWVudENvbmZpZy5wcm9wZXJ0aWVzLnJlYWRPbmx5LCB7XG4gICAgICAgICAgdXBkYXRlT246IFwiY2hhbmdlXCJcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSk7XG4gICAgdGhpcy5iYXNpY0Zvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uU2F2ZVVwZGF0ZUVsZW1lbnQoZXZlbnQ6IGFueSkge1xuICAgIC8vIEdldCBDb21tb24gQ29uZmlnXG4gICAgbGV0IGJhc2ljRWxlbWVudENvbW1vbkNvbmZpZyA9IHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICBiYXNpY0VsZW1lbnRDb21tb25Db25maWcua2V5ID0gYmFzaWNFbGVtZW50Q29tbW9uQ29uZmlnLmtleS5yZXBsYWNlKFxuICAgICAgL1xccy9nLFxuICAgICAgXCJfXCJcbiAgICApO1xuXG4gICAgLy8gR2V0IEJhc2ljIEVsZW1lbnQgQ29uZmlnXG4gICAgY29uc3QgYmFzaWNFbGVtZW50Q29uZmlnID0gZXZlbnQuYmFzaWNFbGVtZW50Q29uZmlnO1xuXG4gICAgdGhpcy5lbGVtZW50Q29uZmlnID0gbWVyZ2VPYmplY3RzKFxuICAgICAgdGhpcy5lbGVtZW50Q29uZmlnLFxuICAgICAgYmFzaWNFbGVtZW50Q29tbW9uQ29uZmlnLFxuICAgICAgYmFzaWNFbGVtZW50Q29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRWxlbWVudC5lbWl0KHsgZWxlbWVudENvbmZpZzogdGhpcy5lbGVtZW50Q29uZmlnIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPblNhdmUoKSB7XG4gICAgdGhpcy5zYXZlQmFzaWNDbGlja0NvdW50ZXIrKztcbiAgfVxufVxuIl19