kwikid-forms 0.4.1 → 0.5.2

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 (106) hide show
  1. package/bundles/kwikid-forms.umd.js +1904 -3666
  2. package/bundles/kwikid-forms.umd.js.map +1 -1
  3. package/esm2015/lib/builder/builder-form-editor/builder-form-editor.component.js +403 -0
  4. package/esm2015/lib/builder/builder-form-editor/builder-form-editor.definitions.js +6 -0
  5. package/esm2015/lib/builder/builder-form-editor/builder-form-editor.helper.js +29 -0
  6. package/esm2015/lib/builder/builder-form-editor/builder-form-editor.module.js +39 -0
  7. package/esm2015/lib/builder/builder-form-editor/builder.form-editor.constants.js +189 -0
  8. package/esm2015/lib/builder/builder-form-editor/builder.form-editor.service.js +43 -0
  9. package/esm2015/lib/builder/builder-form-list/builder-forms-list.component.js +99 -0
  10. package/esm2015/lib/builder/builder-form-list/builder-forms-list.module.js +40 -0
  11. package/esm2015/lib/builder/builder.component.js +111 -258
  12. package/esm2015/lib/builder/builder.helper.js +78 -0
  13. package/esm2015/lib/builder/builder.module.js +15 -72
  14. package/esm2015/lib/kwikid-forms.module.js +4 -16
  15. package/esm2015/lib/renderer/config-converter/config-converter.constants.js +74 -0
  16. package/esm2015/lib/renderer/config-converter/config-converter.helper.js +49 -0
  17. package/esm2015/lib/renderer/config-converter/config-converter.js +514 -0
  18. package/esm2015/lib/renderer/form-view/definitions/form-view.actions.definition.js +2 -1
  19. package/esm2015/lib/renderer/form-view/definitions/form-view.fields.definition.js +2 -1
  20. package/esm2015/lib/renderer/form-view/form-view.component.js +52 -51
  21. package/esm2015/lib/renderer/form-view/form-view.module.js +7 -6
  22. package/esm2015/lib/renderer/forms-list/forms-list.component.js +3 -5
  23. package/esm2015/lib/renderer/forms-list/forms-list.module.js +7 -5
  24. package/esm2015/lib/renderer/renderer.component.js +4 -6
  25. package/esm2015/public_api.js +1 -3
  26. package/fesm2015/kwikid-forms.js +1482 -5044
  27. package/fesm2015/kwikid-forms.js.map +1 -1
  28. package/lib/builder/builder-form-editor/builder-form-editor.component.d.ts +108 -0
  29. package/lib/builder/builder-form-editor/builder-form-editor.definitions.d.ts +5 -0
  30. package/lib/builder/builder-form-editor/builder-form-editor.helper.d.ts +3 -0
  31. package/lib/builder/builder-form-editor/builder-form-editor.module.d.ts +11 -0
  32. package/lib/{builder2 → builder}/builder-form-editor/builder.form-editor.constants.d.ts +76 -0
  33. package/lib/builder/builder-form-editor/builder.form-editor.service.d.ts +7 -0
  34. package/lib/{builder2 → builder}/builder-form-list/builder-forms-list.component.d.ts +2 -1
  35. package/lib/{builder2 → builder}/builder-form-list/builder-forms-list.module.d.ts +1 -1
  36. package/lib/builder/builder.component.d.ts +15 -34
  37. package/lib/builder/builder.helper.d.ts +1 -0
  38. package/lib/builder/builder.module.d.ts +7 -21
  39. package/lib/kwikid-forms.module.d.ts +2 -3
  40. package/lib/renderer/config-converter/config-converter.constants.d.ts +73 -0
  41. package/lib/renderer/config-converter/config-converter.d.ts +5 -0
  42. package/lib/renderer/config-converter/config-converter.helper.d.ts +7 -0
  43. package/lib/renderer/form-view/definitions/form-view.actions.definition.d.ts +3 -2
  44. package/lib/renderer/form-view/definitions/form-view.fields.definition.d.ts +1 -0
  45. package/lib/renderer/form-view/form-view.component.d.ts +2 -5
  46. package/lib/renderer/form-view/form-view.module.d.ts +7 -9
  47. package/lib/renderer/forms-list/forms-list.module.d.ts +5 -6
  48. package/package.json +3 -3
  49. package/public_api.d.ts +0 -2
  50. package/esm2015/lib/builder/element-config-editor/editors/basic/checkbox-config.editor.component.js +0 -72
  51. package/esm2015/lib/builder/element-config-editor/editors/basic/date-config.editor.component.js +0 -72
  52. package/esm2015/lib/builder/element-config-editor/editors/basic/number-config.editor.component.js +0 -72
  53. package/esm2015/lib/builder/element-config-editor/editors/basic/otp-config.editor.component.js +0 -130
  54. package/esm2015/lib/builder/element-config-editor/editors/basic/phone-config.editor.component.js +0 -132
  55. package/esm2015/lib/builder/element-config-editor/editors/basic/radio-config.editor.component.js +0 -396
  56. package/esm2015/lib/builder/element-config-editor/editors/basic/select-config.editor.component.js +0 -302
  57. package/esm2015/lib/builder/element-config-editor/editors/basic/text-config.editor.component.js +0 -132
  58. package/esm2015/lib/builder/element-config-editor/editors/basic-element-config.editor.component.js +0 -698
  59. package/esm2015/lib/builder/element-config-editor/editors/document/aadhaar-number-config.editor.component.js +0 -130
  60. package/esm2015/lib/builder/element-config-editor/editors/document/pan-number-config.editor.component.js +0 -135
  61. package/esm2015/lib/builder/element-config-editor/editors/document-element-config.editor.component.js +0 -610
  62. package/esm2015/lib/builder/element-config-editor/editors/other/html-config.editor.component.js +0 -120
  63. package/esm2015/lib/builder/element-config-editor/editors/other/title-config.editor.component.js +0 -121
  64. package/esm2015/lib/builder/element-config-editor/editors/other-element-config.editor.component.js +0 -214
  65. package/esm2015/lib/builder/element-config-editor/element-config-editor.component.js +0 -97
  66. package/esm2015/lib/builder/shared/elements.js +0 -90
  67. package/esm2015/lib/builder/shared/helpers.js +0 -6
  68. package/esm2015/lib/builder2/builder-form-editor/builder-form-editor.component.js +0 -268
  69. package/esm2015/lib/builder2/builder-form-editor/builder-form-editor.module.js +0 -38
  70. package/esm2015/lib/builder2/builder-form-editor/builder-form-editor.pipe.js +0 -19
  71. package/esm2015/lib/builder2/builder-form-editor/builder.form-editor.constants.js +0 -178
  72. package/esm2015/lib/builder2/builder-form-list/builder-forms-list.component.js +0 -85
  73. package/esm2015/lib/builder2/builder-form-list/builder-forms-list.module.js +0 -37
  74. package/esm2015/lib/builder2/builder2.component.js +0 -169
  75. package/esm2015/lib/builder2/builder2.module.js +0 -46
  76. package/esm2015/lib/renderer/config-converter.helper.js +0 -629
  77. package/esm2015/lib/renderer/form-view/pipes/safe-html.pipe.js +0 -25
  78. package/esm2015/lib/renderer/form-view/pipes/safe-url.pipe.js +0 -25
  79. package/esm2015/lib/renderer/forms-list/pipes/safe-html.pipe.js +0 -25
  80. package/lib/builder/element-config-editor/editors/basic/checkbox-config.editor.component.d.ts +0 -16
  81. package/lib/builder/element-config-editor/editors/basic/date-config.editor.component.d.ts +0 -16
  82. package/lib/builder/element-config-editor/editors/basic/number-config.editor.component.d.ts +0 -16
  83. package/lib/builder/element-config-editor/editors/basic/otp-config.editor.component.d.ts +0 -16
  84. package/lib/builder/element-config-editor/editors/basic/phone-config.editor.component.d.ts +0 -16
  85. package/lib/builder/element-config-editor/editors/basic/radio-config.editor.component.d.ts +0 -25
  86. package/lib/builder/element-config-editor/editors/basic/select-config.editor.component.d.ts +0 -24
  87. package/lib/builder/element-config-editor/editors/basic/text-config.editor.component.d.ts +0 -16
  88. package/lib/builder/element-config-editor/editors/basic-element-config.editor.component.d.ts +0 -20
  89. package/lib/builder/element-config-editor/editors/document/aadhaar-number-config.editor.component.d.ts +0 -16
  90. package/lib/builder/element-config-editor/editors/document/pan-number-config.editor.component.d.ts +0 -16
  91. package/lib/builder/element-config-editor/editors/document-element-config.editor.component.d.ts +0 -20
  92. package/lib/builder/element-config-editor/editors/other/html-config.editor.component.d.ts +0 -16
  93. package/lib/builder/element-config-editor/editors/other/title-config.editor.component.d.ts +0 -16
  94. package/lib/builder/element-config-editor/editors/other-element-config.editor.component.d.ts +0 -20
  95. package/lib/builder/element-config-editor/element-config-editor.component.d.ts +0 -20
  96. package/lib/builder/shared/elements.d.ts +0 -34
  97. package/lib/builder/shared/helpers.d.ts +0 -1
  98. package/lib/builder2/builder-form-editor/builder-form-editor.component.d.ts +0 -48
  99. package/lib/builder2/builder-form-editor/builder-form-editor.module.d.ts +0 -12
  100. package/lib/builder2/builder-form-editor/builder-form-editor.pipe.d.ts +0 -7
  101. package/lib/builder2/builder2.component.d.ts +0 -37
  102. package/lib/builder2/builder2.module.d.ts +0 -13
  103. package/lib/renderer/config-converter.helper.d.ts +0 -9
  104. package/lib/renderer/form-view/pipes/safe-html.pipe.d.ts +0 -15
  105. package/lib/renderer/form-view/pipes/safe-url.pipe.d.ts +0 -15
  106. package/lib/renderer/forms-list/pipes/safe-html.pipe.d.ts +0 -15
@@ -1,698 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Component, EventEmitter, Input, Output } from "@angular/core";
3
- import { FormControl, FormGroup } from "@angular/forms";
4
- import { logMethod, mergeObjects } from "kwikid-toolkit";
5
- import * as i0 from "@angular/core";
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/select-config.editor.component";
11
- import * as i6 from "./basic/checkbox-config.editor.component";
12
- import * as i7 from "./basic/otp-config.editor.component";
13
- import * as i8 from "./basic/phone-config.editor.component";
14
- import * as i9 from "@angular/common";
15
- import * as i10 from "@angular/forms";
16
- export class BasicElementConfigEditor {
17
- constructor() {
18
- this.saveClickCounter = 0;
19
- this.elementConfig = {
20
- label: "",
21
- key: "",
22
- disabled: false,
23
- default: {
24
- value: true
25
- },
26
- validators: {
27
- min: null,
28
- max: null,
29
- minLength: null,
30
- maxLength: null,
31
- required: true
32
- },
33
- properties: {
34
- placeholder: "",
35
- readOnly: false
36
- }
37
- };
38
- this.updateElement = new EventEmitter();
39
- this.elementType = "";
40
- this.saveBasicClickCounter = 0;
41
- this.basicFormGroup = undefined;
42
- }
43
- ngOnInit() {
44
- this.assignVariables();
45
- this.createBasicFormGroup();
46
- }
47
- ngOnChanges(changes) {
48
- var _a;
49
- const verifyChange = (key) => {
50
- return changes.hasOwnProperty(key) && !changes[key].firstChange;
51
- };
52
- if (verifyChange("elementConfig")) {
53
- this.elementConfig = changes.elementConfig.currentValue;
54
- this.assignVariables();
55
- (_a = this.basicFormGroup) === null || _a === void 0 ? void 0 : _a.reset(this.elementConfig);
56
- }
57
- if (verifyChange("saveClickCounter")) {
58
- if (changes.saveClickCounter.previousValue !==
59
- changes.saveClickCounter.currentValue) {
60
- this.saveClickCounter = changes.saveClickCounter.currentValue;
61
- this.handleOnSave();
62
- }
63
- }
64
- }
65
- assignVariables() {
66
- this.elementType = this.elementConfig.elementType;
67
- }
68
- createBasicFormGroup() {
69
- this.basicFormGroup = new FormGroup({
70
- label: new FormControl(this.elementConfig.label),
71
- key: new FormControl(this.elementConfig.key),
72
- disabled: new FormControl(this.elementConfig.disabled),
73
- default: new FormGroup({
74
- value: new FormControl(this.elementConfig.default.value, {
75
- updateOn: "change"
76
- })
77
- }),
78
- validators: new FormGroup({
79
- min: new FormControl(this.elementConfig.validators.min, {
80
- updateOn: "change"
81
- }),
82
- minLength: new FormControl(this.elementConfig.validators.minLength, {
83
- updateOn: "change"
84
- }),
85
- max: new FormControl(this.elementConfig.validators.max, {
86
- updateOn: "change"
87
- }),
88
- maxLength: new FormControl(this.elementConfig.validators.maxLength, {
89
- updateOn: "change"
90
- }),
91
- required: new FormControl(this.elementConfig.validators.required, {
92
- updateOn: "change"
93
- })
94
- }),
95
- properties: new FormGroup({
96
- placeholder: new FormControl(this.elementConfig.properties.placeholder, {
97
- updateOn: "change"
98
- }),
99
- readOnly: new FormControl(this.elementConfig.properties.readOnly, {
100
- updateOn: "change"
101
- })
102
- })
103
- });
104
- this.basicFormGroup.updateValueAndValidity();
105
- }
106
- handleOnSaveUpdateElement(event) {
107
- // Get Common Config
108
- let basicElementCommonConfig = this.basicFormGroup.getRawValue();
109
- basicElementCommonConfig.key = basicElementCommonConfig.key.replace(/\s/g, "_");
110
- // Get Basic Element Config
111
- const basicElementConfig = event.basicElementConfig;
112
- this.elementConfig = mergeObjects(this.elementConfig, basicElementCommonConfig, basicElementConfig);
113
- this.updateElement.emit({ elementConfig: this.elementConfig });
114
- }
115
- handleOnSave() {
116
- this.saveBasicClickCounter++;
117
- }
118
- }
119
- /** @nocollapse */ BasicElementConfigEditor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BasicElementConfigEditor, deps: [], target: i0.ɵɵFactoryTarget.Component });
120
- /** @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: `
121
- <ng-container *ngIf="elementConfig !== undefined">
122
- <kwikui-table
123
- style="width: 100%; height: 100%; overflow: auto; box-shadow: 0px 0px 10px -6px #000; border: 0px solid gray; border-radius: 1rem;"
124
- [columns]="['id', 'type', 'category']"
125
- [headers]="{ id: 'ID', type: 'Type', category: 'Category' }"
126
- [data]="[
127
- {
128
- id: elementConfig.elementId,
129
- type: elementConfig.elementType,
130
- category: elementConfig.elementCategory
131
- }
132
- ]"
133
- (onClick)="(undefined)"
134
- ></kwikui-table>
135
- </ng-container>
136
- <form [formGroup]="basicFormGroup">
137
- <fieldset>
138
- <legend class="form-group-title">Standard</legend>
139
- <div class="form-group">
140
- <kwikui-input
141
- [label]="'Label'"
142
- [id]="'basic-field-label'"
143
- [type]="'text'"
144
- [formControlName]="'label'"
145
- [formControl]="basicFormGroup.controls['label']"
146
- [disabled]="false"
147
- [placeholder]="'Please enter your Label'"
148
- [focus]="false"
149
- [invalid]="false"
150
- [case]="'default'"
151
- size="m"
152
- ></kwikui-input>
153
- </div>
154
- <div class="form-group">
155
- <kwikui-input
156
- [label]="'Key'"
157
- [id]="'basic-field-key'"
158
- [type]="'text'"
159
- [formControlName]="'key'"
160
- [formControl]="basicFormGroup.controls['key']"
161
- [disabled]="false"
162
- [placeholder]="'Please enter your Key'"
163
- [focus]="false"
164
- [invalid]="false"
165
- [case]="'default'"
166
- size="m"
167
- ></kwikui-input>
168
- </div>
169
- <div class="form-group">
170
- <kwikui-input-select
171
- [options]="[true, false]"
172
- [label]="'Disabled'"
173
- [id]="'basic-input-property-disabled'"
174
- size="m"
175
- [formControlName]="'disabled'"
176
- [formControl]="basicFormGroup.controls['disabled']"
177
- [focus]="false"
178
- [disabled]="false"
179
- [invalid]="false"
180
- [placeholder]="'Please select either true or false'"
181
- ></kwikui-input-select>
182
- </div>
183
- </fieldset>
184
-
185
- <div formGroupName="default">
186
- <fieldset>
187
- <legend class="form-group-title">Default</legend>
188
- <div class="form-group">
189
- <kwikui-input-select
190
- [options]="[true, false]"
191
- [label]="'value'"
192
- [id]="'basic-input-property-value'"
193
- size="m"
194
- [formControlName]="'value'"
195
- [formControl]="
196
- basicFormGroup['controls'].default['controls'].value
197
- "
198
- [focus]="false"
199
- [disabled]="false"
200
- [invalid]="false"
201
- [placeholder]="'Please select either true or false'"
202
- ></kwikui-input-select>
203
- </div>
204
- </fieldset>
205
- </div>
206
-
207
- <div formGroupName="validators">
208
- <fieldset>
209
- <legend class="form-group-title">Validators</legend>
210
- <div class="form-group">
211
- <kwikui-input-number
212
- [label]="'min'"
213
- [id]="'basic-input-validators-min'"
214
- [formControlName]="'min'"
215
- [formControl]="
216
- basicFormGroup['controls'].validators['controls'].min
217
- "
218
- [disabled]="false"
219
- [placeholder]="'Please enter your minimum value'"
220
- [focus]="false"
221
- [invalid]="false"
222
- size="m"
223
- ></kwikui-input-number>
224
- </div>
225
- <div class="form-group">
226
- <kwikui-input-number
227
- [label]="'max'"
228
- [id]="'basic-input-validators-max'"
229
- [formControlName]="'max'"
230
- [formControl]="
231
- basicFormGroup['controls'].validators['controls'].max
232
- "
233
- [disabled]="false"
234
- [placeholder]="'Please enter your maximum value'"
235
- [focus]="false"
236
- [invalid]="false"
237
- size="m"
238
- ></kwikui-input-number>
239
- </div>
240
- <div class="form-group">
241
- <kwikui-input-number
242
- [label]="'minLength'"
243
- [id]="'basic-input-validators-minLength'"
244
- [formControlName]="'minLength'"
245
- [formControl]="
246
- basicFormGroup['controls'].validators['controls'].minLength
247
- "
248
- [disabled]="false"
249
- [placeholder]="'Please enter your minimum length value'"
250
- [focus]="false"
251
- [invalid]="false"
252
- size="m"
253
- ></kwikui-input-number>
254
- </div>
255
- <div class="form-group">
256
- <kwikui-input-number
257
- [label]="'maxLength'"
258
- [id]="'basic-input-validators-maxLength'"
259
- [formControlName]="'maxLength'"
260
- [formControl]="
261
- basicFormGroup['controls'].validators['controls'].maxLength
262
- "
263
- [disabled]="false"
264
- [placeholder]="'Please enter your maximum length value'"
265
- [focus]="false"
266
- [invalid]="false"
267
- size="m"
268
- ></kwikui-input-number>
269
- </div>
270
- <div class="form-group">
271
- <kwikui-input-select
272
- [options]="[true, false]"
273
- [label]="'required'"
274
- [id]="'basic-input-property-required'"
275
- size="m"
276
- [formControlName]="'required'"
277
- [formControl]="
278
- basicFormGroup['controls'].validators['controls'].required
279
- "
280
- [focus]="false"
281
- [disabled]="false"
282
- [invalid]="false"
283
- [placeholder]="'Please select either true or false'"
284
- ></kwikui-input-select>
285
- </div>
286
- </fieldset>
287
- </div>
288
-
289
- <div formGroupName="properties">
290
- <fieldset>
291
- <legend class="form-group-title">Properties</legend>
292
- <div class="form-group">
293
- <kwikui-input
294
- [label]="'Placeholder'"
295
- [id]="'basic-field-placeholder'"
296
- [type]="'text'"
297
- [formControlName]="'placeholder'"
298
- [formControl]="
299
- basicFormGroup.controls.properties['controls'].placeholder
300
- "
301
- [disabled]="false"
302
- [placeholder]="'Please enter your placeholder'"
303
- [focus]="false"
304
- [invalid]="false"
305
- [case]="'default'"
306
- size="m"
307
- ></kwikui-input>
308
- </div>
309
- <div class="form-group">
310
- <kwikui-input-select
311
- [options]="[true, false]"
312
- [label]="'readOnly'"
313
- [id]="'basic-input-property-readOnly'"
314
- size="m"
315
- [formControlName]="'readOnly'"
316
- [formControl]="
317
- basicFormGroup['controls'].properties['controls'].readOnly
318
- "
319
- [focus]="false"
320
- [disabled]="false"
321
- [invalid]="false"
322
- [placeholder]="'Please select either true or false'"
323
- ></kwikui-input-select>
324
- </div>
325
- </fieldset>
326
- </div>
327
-
328
- <ng-container [ngSwitch]="elementType">
329
- <ng-container *ngSwitchCase="'text'">
330
- <basic-text-config-editor
331
- [saveBasicClickCounter]="saveBasicClickCounter"
332
- [elementConfig]="elementConfig"
333
- (updateElement)="handleOnSaveUpdateElement($event)"
334
- ></basic-text-config-editor>
335
- </ng-container>
336
- <ng-container *ngSwitchCase="'number'">
337
- <basic-number-config-editor
338
- [saveBasicClickCounter]="saveBasicClickCounter"
339
- [elementConfig]="elementConfig"
340
- (updateElement)="handleOnSaveUpdateElement($event)"
341
- ></basic-number-config-editor>
342
- </ng-container>
343
- <ng-container *ngSwitchCase="'radio'">
344
- <basic-radio-config-editor
345
- [saveBasicClickCounter]="saveBasicClickCounter"
346
- [elementConfig]="elementConfig"
347
- (updateElement)="handleOnSaveUpdateElement($event)"
348
- ></basic-radio-config-editor>
349
- </ng-container>
350
- <ng-container *ngSwitchCase="'select'">
351
- <basic-select-config-editor
352
- [saveBasicClickCounter]="saveBasicClickCounter"
353
- [elementConfig]="elementConfig"
354
- (updateElement)="handleOnSaveUpdateElement($event)"
355
- ></basic-select-config-editor>
356
- </ng-container>
357
- <ng-container *ngSwitchCase="'checkbox'">
358
- <basic-checkbox-config-editor
359
- [saveBasicClickCounter]="saveBasicClickCounter"
360
- [elementConfig]="elementConfig"
361
- (updateElement)="handleOnSaveUpdateElement($event)"
362
- ></basic-checkbox-config-editor>
363
- </ng-container>
364
- <ng-container *ngSwitchCase="'date'">
365
- <basic-checkbox-config-editor
366
- [saveBasicClickCounter]="saveBasicClickCounter"
367
- [elementConfig]="elementConfig"
368
- (updateElement)="handleOnSaveUpdateElement($event)"
369
- ></basic-checkbox-config-editor>
370
- </ng-container>
371
- <ng-container *ngSwitchCase="'otp'">
372
- <basic-otp-config-editor
373
- [saveBasicClickCounter]="saveBasicClickCounter"
374
- [elementConfig]="elementConfig"
375
- (updateElement)="handleOnSaveUpdateElement($event)"
376
- ></basic-otp-config-editor>
377
- </ng-container>
378
- <ng-container *ngSwitchCase="'phone'">
379
- <basic-phone-config-editor
380
- [saveBasicClickCounter]="saveBasicClickCounter"
381
- [elementConfig]="elementConfig"
382
- (updateElement)="handleOnSaveUpdateElement($event)"
383
- ></basic-phone-config-editor>
384
- </ng-container>
385
- </ng-container>
386
- </form>
387
- `, 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.KwikUIInputSelectComponent, selector: "kwikui-input-select", 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.BasicSelectConfigEditor, selector: "basic-select-config-editor", inputs: ["saveBasicClickCounter", "elementConfig"], outputs: ["updateElement"] }, { type: i6.BasicCheckboxConfigEditor, selector: "basic-checkbox-config-editor", inputs: ["saveBasicClickCounter", "elementConfig"], outputs: ["updateElement"] }, { type: i7.BasicOtpConfigEditor, selector: "basic-otp-config-editor", inputs: ["saveBasicClickCounter", "elementConfig"], outputs: ["updateElement"] }, { type: i8.BasicPhoneConfigEditor, selector: "basic-phone-config-editor", inputs: ["saveBasicClickCounter", "elementConfig"], outputs: ["updateElement"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i10.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i10.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }] });
388
- __decorate([
389
- logMethod
390
- ], BasicElementConfigEditor.prototype, "ngOnInit", null);
391
- __decorate([
392
- logMethod
393
- ], BasicElementConfigEditor.prototype, "ngOnChanges", null);
394
- __decorate([
395
- logMethod
396
- ], BasicElementConfigEditor.prototype, "assignVariables", null);
397
- __decorate([
398
- logMethod
399
- ], BasicElementConfigEditor.prototype, "createBasicFormGroup", null);
400
- __decorate([
401
- logMethod
402
- ], BasicElementConfigEditor.prototype, "handleOnSaveUpdateElement", null);
403
- __decorate([
404
- logMethod
405
- ], BasicElementConfigEditor.prototype, "handleOnSave", null);
406
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BasicElementConfigEditor, decorators: [{
407
- type: Component,
408
- args: [{
409
- selector: "basic-element-config-editor",
410
- template: `
411
- <ng-container *ngIf="elementConfig !== undefined">
412
- <kwikui-table
413
- style="width: 100%; height: 100%; overflow: auto; box-shadow: 0px 0px 10px -6px #000; border: 0px solid gray; border-radius: 1rem;"
414
- [columns]="['id', 'type', 'category']"
415
- [headers]="{ id: 'ID', type: 'Type', category: 'Category' }"
416
- [data]="[
417
- {
418
- id: elementConfig.elementId,
419
- type: elementConfig.elementType,
420
- category: elementConfig.elementCategory
421
- }
422
- ]"
423
- (onClick)="(undefined)"
424
- ></kwikui-table>
425
- </ng-container>
426
- <form [formGroup]="basicFormGroup">
427
- <fieldset>
428
- <legend class="form-group-title">Standard</legend>
429
- <div class="form-group">
430
- <kwikui-input
431
- [label]="'Label'"
432
- [id]="'basic-field-label'"
433
- [type]="'text'"
434
- [formControlName]="'label'"
435
- [formControl]="basicFormGroup.controls['label']"
436
- [disabled]="false"
437
- [placeholder]="'Please enter your Label'"
438
- [focus]="false"
439
- [invalid]="false"
440
- [case]="'default'"
441
- size="m"
442
- ></kwikui-input>
443
- </div>
444
- <div class="form-group">
445
- <kwikui-input
446
- [label]="'Key'"
447
- [id]="'basic-field-key'"
448
- [type]="'text'"
449
- [formControlName]="'key'"
450
- [formControl]="basicFormGroup.controls['key']"
451
- [disabled]="false"
452
- [placeholder]="'Please enter your Key'"
453
- [focus]="false"
454
- [invalid]="false"
455
- [case]="'default'"
456
- size="m"
457
- ></kwikui-input>
458
- </div>
459
- <div class="form-group">
460
- <kwikui-input-select
461
- [options]="[true, false]"
462
- [label]="'Disabled'"
463
- [id]="'basic-input-property-disabled'"
464
- size="m"
465
- [formControlName]="'disabled'"
466
- [formControl]="basicFormGroup.controls['disabled']"
467
- [focus]="false"
468
- [disabled]="false"
469
- [invalid]="false"
470
- [placeholder]="'Please select either true or false'"
471
- ></kwikui-input-select>
472
- </div>
473
- </fieldset>
474
-
475
- <div formGroupName="default">
476
- <fieldset>
477
- <legend class="form-group-title">Default</legend>
478
- <div class="form-group">
479
- <kwikui-input-select
480
- [options]="[true, false]"
481
- [label]="'value'"
482
- [id]="'basic-input-property-value'"
483
- size="m"
484
- [formControlName]="'value'"
485
- [formControl]="
486
- basicFormGroup['controls'].default['controls'].value
487
- "
488
- [focus]="false"
489
- [disabled]="false"
490
- [invalid]="false"
491
- [placeholder]="'Please select either true or false'"
492
- ></kwikui-input-select>
493
- </div>
494
- </fieldset>
495
- </div>
496
-
497
- <div formGroupName="validators">
498
- <fieldset>
499
- <legend class="form-group-title">Validators</legend>
500
- <div class="form-group">
501
- <kwikui-input-number
502
- [label]="'min'"
503
- [id]="'basic-input-validators-min'"
504
- [formControlName]="'min'"
505
- [formControl]="
506
- basicFormGroup['controls'].validators['controls'].min
507
- "
508
- [disabled]="false"
509
- [placeholder]="'Please enter your minimum value'"
510
- [focus]="false"
511
- [invalid]="false"
512
- size="m"
513
- ></kwikui-input-number>
514
- </div>
515
- <div class="form-group">
516
- <kwikui-input-number
517
- [label]="'max'"
518
- [id]="'basic-input-validators-max'"
519
- [formControlName]="'max'"
520
- [formControl]="
521
- basicFormGroup['controls'].validators['controls'].max
522
- "
523
- [disabled]="false"
524
- [placeholder]="'Please enter your maximum value'"
525
- [focus]="false"
526
- [invalid]="false"
527
- size="m"
528
- ></kwikui-input-number>
529
- </div>
530
- <div class="form-group">
531
- <kwikui-input-number
532
- [label]="'minLength'"
533
- [id]="'basic-input-validators-minLength'"
534
- [formControlName]="'minLength'"
535
- [formControl]="
536
- basicFormGroup['controls'].validators['controls'].minLength
537
- "
538
- [disabled]="false"
539
- [placeholder]="'Please enter your minimum length value'"
540
- [focus]="false"
541
- [invalid]="false"
542
- size="m"
543
- ></kwikui-input-number>
544
- </div>
545
- <div class="form-group">
546
- <kwikui-input-number
547
- [label]="'maxLength'"
548
- [id]="'basic-input-validators-maxLength'"
549
- [formControlName]="'maxLength'"
550
- [formControl]="
551
- basicFormGroup['controls'].validators['controls'].maxLength
552
- "
553
- [disabled]="false"
554
- [placeholder]="'Please enter your maximum length value'"
555
- [focus]="false"
556
- [invalid]="false"
557
- size="m"
558
- ></kwikui-input-number>
559
- </div>
560
- <div class="form-group">
561
- <kwikui-input-select
562
- [options]="[true, false]"
563
- [label]="'required'"
564
- [id]="'basic-input-property-required'"
565
- size="m"
566
- [formControlName]="'required'"
567
- [formControl]="
568
- basicFormGroup['controls'].validators['controls'].required
569
- "
570
- [focus]="false"
571
- [disabled]="false"
572
- [invalid]="false"
573
- [placeholder]="'Please select either true or false'"
574
- ></kwikui-input-select>
575
- </div>
576
- </fieldset>
577
- </div>
578
-
579
- <div formGroupName="properties">
580
- <fieldset>
581
- <legend class="form-group-title">Properties</legend>
582
- <div class="form-group">
583
- <kwikui-input
584
- [label]="'Placeholder'"
585
- [id]="'basic-field-placeholder'"
586
- [type]="'text'"
587
- [formControlName]="'placeholder'"
588
- [formControl]="
589
- basicFormGroup.controls.properties['controls'].placeholder
590
- "
591
- [disabled]="false"
592
- [placeholder]="'Please enter your placeholder'"
593
- [focus]="false"
594
- [invalid]="false"
595
- [case]="'default'"
596
- size="m"
597
- ></kwikui-input>
598
- </div>
599
- <div class="form-group">
600
- <kwikui-input-select
601
- [options]="[true, false]"
602
- [label]="'readOnly'"
603
- [id]="'basic-input-property-readOnly'"
604
- size="m"
605
- [formControlName]="'readOnly'"
606
- [formControl]="
607
- basicFormGroup['controls'].properties['controls'].readOnly
608
- "
609
- [focus]="false"
610
- [disabled]="false"
611
- [invalid]="false"
612
- [placeholder]="'Please select either true or false'"
613
- ></kwikui-input-select>
614
- </div>
615
- </fieldset>
616
- </div>
617
-
618
- <ng-container [ngSwitch]="elementType">
619
- <ng-container *ngSwitchCase="'text'">
620
- <basic-text-config-editor
621
- [saveBasicClickCounter]="saveBasicClickCounter"
622
- [elementConfig]="elementConfig"
623
- (updateElement)="handleOnSaveUpdateElement($event)"
624
- ></basic-text-config-editor>
625
- </ng-container>
626
- <ng-container *ngSwitchCase="'number'">
627
- <basic-number-config-editor
628
- [saveBasicClickCounter]="saveBasicClickCounter"
629
- [elementConfig]="elementConfig"
630
- (updateElement)="handleOnSaveUpdateElement($event)"
631
- ></basic-number-config-editor>
632
- </ng-container>
633
- <ng-container *ngSwitchCase="'radio'">
634
- <basic-radio-config-editor
635
- [saveBasicClickCounter]="saveBasicClickCounter"
636
- [elementConfig]="elementConfig"
637
- (updateElement)="handleOnSaveUpdateElement($event)"
638
- ></basic-radio-config-editor>
639
- </ng-container>
640
- <ng-container *ngSwitchCase="'select'">
641
- <basic-select-config-editor
642
- [saveBasicClickCounter]="saveBasicClickCounter"
643
- [elementConfig]="elementConfig"
644
- (updateElement)="handleOnSaveUpdateElement($event)"
645
- ></basic-select-config-editor>
646
- </ng-container>
647
- <ng-container *ngSwitchCase="'checkbox'">
648
- <basic-checkbox-config-editor
649
- [saveBasicClickCounter]="saveBasicClickCounter"
650
- [elementConfig]="elementConfig"
651
- (updateElement)="handleOnSaveUpdateElement($event)"
652
- ></basic-checkbox-config-editor>
653
- </ng-container>
654
- <ng-container *ngSwitchCase="'date'">
655
- <basic-checkbox-config-editor
656
- [saveBasicClickCounter]="saveBasicClickCounter"
657
- [elementConfig]="elementConfig"
658
- (updateElement)="handleOnSaveUpdateElement($event)"
659
- ></basic-checkbox-config-editor>
660
- </ng-container>
661
- <ng-container *ngSwitchCase="'otp'">
662
- <basic-otp-config-editor
663
- [saveBasicClickCounter]="saveBasicClickCounter"
664
- [elementConfig]="elementConfig"
665
- (updateElement)="handleOnSaveUpdateElement($event)"
666
- ></basic-otp-config-editor>
667
- </ng-container>
668
- <ng-container *ngSwitchCase="'phone'">
669
- <basic-phone-config-editor
670
- [saveBasicClickCounter]="saveBasicClickCounter"
671
- [elementConfig]="elementConfig"
672
- (updateElement)="handleOnSaveUpdateElement($event)"
673
- ></basic-phone-config-editor>
674
- </ng-container>
675
- </ng-container>
676
- </form>
677
- `,
678
- styles: [
679
- `
680
- :host {
681
- display: flex;
682
- flex-direction: column;
683
- align-content: center;
684
- justify-content: flex-start;
685
- align-items: stretch;
686
- gap: 1rem;
687
- }
688
- `
689
- ]
690
- }]
691
- }], ctorParameters: function () { return []; }, propDecorators: { saveClickCounter: [{
692
- type: Input
693
- }], elementConfig: [{
694
- type: Input
695
- }], updateElement: [{
696
- type: Output
697
- }], ngOnInit: [], ngOnChanges: [], assignVariables: [], createBasicFormGroup: [], handleOnSaveUpdateElement: [], handleOnSave: [] } });
698
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZWxlbWVudC1jb25maWcuZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL2J1aWxkZXIvZWxlbWVudC1jb25maWctZWRpdG9yL2VkaXRvcnMvYmFzaWMtZWxlbWVudC1jb25maWcuZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7OztBQTZSekQsTUFBTSxPQUFPLHdCQUF3QjtJQWlDbkM7UUEvQkEscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBRzdCLGtCQUFhLEdBQVE7WUFDbkIsS0FBSyxFQUFFLEVBQUU7WUFDVCxHQUFHLEVBQUUsRUFBRTtZQUNQLFFBQVEsRUFBRSxLQUFLO1lBQ2YsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSxJQUFJO2FBQ1o7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsUUFBUSxFQUFFLElBQUk7YUFDZjtZQUNELFVBQVUsRUFBRTtnQkFDVixXQUFXLEVBQUUsRUFBRTtnQkFDZixRQUFRLEVBQUUsS0FBSzthQUNoQjtTQUNGLENBQUM7UUFHRixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFeEMsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsMEJBQXFCLEdBQVcsQ0FBQyxDQUFD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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyUVQ7QUFrREQ7SUFEQyxTQUFTO3dEQUlUO0FBR0Q7SUFEQyxTQUFTOzJEQXNCVDtBQUdEO0lBREMsU0FBUzsrREFHVDtBQUdEO0lBREMsU0FBUztvRUF5Q1Q7QUFHRDtJQURDLFNBQVM7eUVBbUJUO0FBR0Q7SUFEQyxTQUFTOzREQUdUOzRGQXpJVSx3QkFBd0I7a0JBM1JwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMlFUO29CQUNELE1BQU0sRUFBRTt3QkFDTjs7Ozs7Ozs7O0tBU0M7cUJBQ0Y7aUJBQ0Y7MEVBR0MsZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQXNCTixhQUFhO3NCQURaLE1BQU07Z0JBV1AsUUFBUSxNQU1SLFdBQVcsTUF3QlgsZUFBZSxNQUtmLG9CQUFvQixNQTJDcEIseUJBQXlCLE1BcUJ6QixZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgbG9nTWV0aG9kLCBtZXJnZU9iamVjdHMgfSBmcm9tIFwia3dpa2lkLXRvb2xraXRcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImJhc2ljLWVsZW1lbnQtY29uZmlnLWVkaXRvclwiLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbGVtZW50Q29uZmlnICE9PSB1bmRlZmluZWRcIj5cbiAgICAgIDxrd2lrdWktdGFibGVcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvdmVyZmxvdzogYXV0bzsgYm94LXNoYWRvdzogMHB4IDBweCAxMHB4IC02cHggIzAwMDsgYm9yZGVyOiAwcHggc29saWQgZ3JheTsgYm9yZGVyLXJhZGl1czogMXJlbTtcIlxuICAgICAgICBbY29sdW1uc109XCJbJ2lkJywgJ3R5cGUnLCAnY2F0ZWdvcnknXVwiXG4gICAgICAgIFtoZWFkZXJzXT1cInsgaWQ6ICdJRCcsIHR5cGU6ICdUeXBlJywgY2F0ZWdvcnk6ICdDYXRlZ29yeScgfVwiXG4gICAgICAgIFtkYXRhXT1cIltcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogZWxlbWVudENvbmZpZy5lbGVtZW50SWQsXG4gICAgICAgICAgICB0eXBlOiBlbGVtZW50Q29uZmlnLmVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGVsZW1lbnRDb25maWcuZWxlbWVudENhdGVnb3J5XG4gICAgICAgICAgfVxuICAgICAgICBdXCJcbiAgICAgICAgKG9uQ2xpY2spPVwiKHVuZGVmaW5lZClcIlxuICAgICAgPjwva3dpa3VpLXRhYmxlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiYmFzaWNGb3JtR3JvdXBcIj5cbiAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgPGxlZ2VuZCBjbGFzcz1cImZvcm0tZ3JvdXAtdGl0bGVcIj5TdGFuZGFyZDwvbGVnZW5kPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxrd2lrdWktaW5wdXRcbiAgICAgICAgICAgIFtsYWJlbF09XCInTGFiZWwnXCJcbiAgICAgICAgICAgIFtpZF09XCInYmFzaWMtZmllbGQtbGFiZWwnXCJcbiAgICAgICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidsYWJlbCdcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImJhc2ljRm9ybUdyb3VwLmNvbnRyb2xzWydsYWJlbCddXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBlbnRlciB5b3VyIExhYmVsJ1wiXG4gICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2ludmFsaWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2Nhc2VdPVwiJ2RlZmF1bHQnXCJcbiAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICA+PC9rd2lrdWktaW5wdXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxrd2lrdWktaW5wdXRcbiAgICAgICAgICAgIFtsYWJlbF09XCInS2V5J1wiXG4gICAgICAgICAgICBbaWRdPVwiJ2Jhc2ljLWZpZWxkLWtleSdcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ2tleSdcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImJhc2ljRm9ybUdyb3VwLmNvbnRyb2xzWydrZXknXVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidQbGVhc2UgZW50ZXIgeW91ciBLZXknXCJcbiAgICAgICAgICAgIFtmb2N1c109XCJmYWxzZVwiXG4gICAgICAgICAgICBbaW52YWxpZF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbY2FzZV09XCInZGVmYXVsdCdcIlxuICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgID48L2t3aWt1aS1pbnB1dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGt3aWt1aS1pbnB1dC1zZWxlY3RcbiAgICAgICAgICAgIFtvcHRpb25zXT1cIlt0cnVlLCBmYWxzZV1cIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidEaXNhYmxlZCdcIlxuICAgICAgICAgICAgW2lkXT1cIidiYXNpYy1pbnB1dC1wcm9wZXJ0eS1kaXNhYmxlZCdcIlxuICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInZGlzYWJsZWQnXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJiYXNpY0Zvcm1Hcm91cC5jb250cm9sc1snZGlzYWJsZWQnXVwiXG4gICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtpbnZhbGlkXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUGxlYXNlIHNlbGVjdCBlaXRoZXIgdHJ1ZSBvciBmYWxzZSdcIlxuICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9maWVsZHNldD5cblxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwiZGVmYXVsdFwiPlxuICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cImZvcm0tZ3JvdXAtdGl0bGVcIj5EZWZhdWx0PC9sZWdlbmQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtc2VsZWN0XG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cIlt0cnVlLCBmYWxzZV1cIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3ZhbHVlJ1wiXG4gICAgICAgICAgICAgIFtpZF09XCInYmFzaWMtaW5wdXQtcHJvcGVydHktdmFsdWUnXCJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIid2YWx1ZSdcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiXG4gICAgICAgICAgICAgICAgYmFzaWNGb3JtR3JvdXBbJ2NvbnRyb2xzJ10uZGVmYXVsdFsnY29udHJvbHMnXS52YWx1ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUGxlYXNlIHNlbGVjdCBlaXRoZXIgdHJ1ZSBvciBmYWxzZSdcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJ2YWxpZGF0b3JzXCI+XG4gICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwiZm9ybS1ncm91cC10aXRsZVwiPlZhbGlkYXRvcnM8L2xlZ2VuZD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1udW1iZXJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidtaW4nXCJcbiAgICAgICAgICAgICAgW2lkXT1cIidiYXNpYy1pbnB1dC12YWxpZGF0b3JzLW1pbidcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidtaW4nXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIlxuICAgICAgICAgICAgICAgIGJhc2ljRm9ybUdyb3VwWydjb250cm9scyddLnZhbGlkYXRvcnNbJ2NvbnRyb2xzJ10ubWluXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUGxlYXNlIGVudGVyIHlvdXIgbWluaW11bSB2YWx1ZSdcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtbnVtYmVyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCInbWF4J1wiXG4gICAgICAgICAgICAgIFtpZF09XCInYmFzaWMtaW5wdXQtdmFsaWRhdG9ycy1tYXgnXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInbWF4J1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcbiAgICAgICAgICAgICAgICBiYXNpY0Zvcm1Hcm91cFsnY29udHJvbHMnXS52YWxpZGF0b3JzWydjb250cm9scyddLm1heFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBlbnRlciB5b3VyIG1heGltdW0gdmFsdWUnXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtbnVtYmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LW51bWJlclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiJ21pbkxlbmd0aCdcIlxuICAgICAgICAgICAgICBbaWRdPVwiJ2Jhc2ljLWlucHV0LXZhbGlkYXRvcnMtbWluTGVuZ3RoJ1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ21pbkxlbmd0aCdcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiXG4gICAgICAgICAgICAgICAgYmFzaWNGb3JtR3JvdXBbJ2NvbnRyb2xzJ10udmFsaWRhdG9yc1snY29udHJvbHMnXS5taW5MZW5ndGhcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidQbGVhc2UgZW50ZXIgeW91ciBtaW5pbXVtIGxlbmd0aCB2YWx1ZSdcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtbnVtYmVyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCInbWF4TGVuZ3RoJ1wiXG4gICAgICAgICAgICAgIFtpZF09XCInYmFzaWMtaW5wdXQtdmFsaWRhdG9ycy1tYXhMZW5ndGgnXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInbWF4TGVuZ3RoJ1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcbiAgICAgICAgICAgICAgICBiYXNpY0Zvcm1Hcm91cFsnY29udHJvbHMnXS52YWxpZGF0b3JzWydjb250cm9scyddLm1heExlbmd0aFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBlbnRlciB5b3VyIG1heGltdW0gbGVuZ3RoIHZhbHVlJ1wiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LW51bWJlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1zZWxlY3RcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiW3RydWUsIGZhbHNlXVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCIncmVxdWlyZWQnXCJcbiAgICAgICAgICAgICAgW2lkXT1cIidiYXNpYy1pbnB1dC1wcm9wZXJ0eS1yZXF1aXJlZCdcIlxuICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ3JlcXVpcmVkJ1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcbiAgICAgICAgICAgICAgICBiYXNpY0Zvcm1Hcm91cFsnY29udHJvbHMnXS52YWxpZGF0b3JzWydjb250cm9scyddLnJlcXVpcmVkXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidQbGVhc2Ugc2VsZWN0IGVpdGhlciB0cnVlIG9yIGZhbHNlJ1wiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cInByb3BlcnRpZXNcIj5cbiAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJmb3JtLWdyb3VwLXRpdGxlXCI+UHJvcGVydGllczwvbGVnZW5kPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0XG4gICAgICAgICAgICAgIFtsYWJlbF09XCInUGxhY2Vob2xkZXInXCJcbiAgICAgICAgICAgICAgW2lkXT1cIidiYXNpYy1maWVsZC1wbGFjZWhvbGRlcidcIlxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidwbGFjZWhvbGRlcidcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiXG4gICAgICAgICAgICAgICAgYmFzaWNGb3JtR3JvdXAuY29udHJvbHMucHJvcGVydGllc1snY29udHJvbHMnXS5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBlbnRlciB5b3VyIHBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Nhc2VdPVwiJ2RlZmF1bHQnXCJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LXNlbGVjdFxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJbdHJ1ZSwgZmFsc2VdXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidyZWFkT25seSdcIlxuICAgICAgICAgICAgICBbaWRdPVwiJ2Jhc2ljLWlucHV0LXByb3BlcnR5LXJlYWRPbmx5J1wiXG4gICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCIncmVhZE9ubHknXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIlxuICAgICAgICAgICAgICAgIGJhc2ljRm9ybUdyb3VwWydjb250cm9scyddLnByb3BlcnRpZXNbJ2NvbnRyb2xzJ10ucmVhZE9ubHlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBzZWxlY3QgZWl0aGVyIHRydWUgb3IgZmFsc2UnXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZWxlbWVudFR5cGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XG4gICAgICAgICAgPGJhc2ljLXRleHQtY29uZmlnLWVkaXRvclxuICAgICAgICAgICAgW3NhdmVCYXNpY0NsaWNrQ291bnRlcl09XCJzYXZlQmFzaWNDbGlja0NvdW50ZXJcIlxuICAgICAgICAgICAgW2VsZW1lbnRDb25maWddPVwiZWxlbWVudENvbmZpZ1wiXG4gICAgICAgICAgICAodXBkYXRlRWxlbWVudCk9XCJoYW5kbGVPblNhdmVVcGRhdGVFbGVtZW50KCRldmVudClcIlxuICAgICAgICAgID48L2Jhc2ljLXRleHQtY29uZmlnLWVkaXRvcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XG4gICAgICAgICAgPGJhc2ljLW51bWJlci1jb25maWctZWRpdG9yXG4gICAgICAgICAgICBbc2F2ZUJhc2ljQ2xpY2tDb3VudGVyXT1cInNhdmVCYXNpY0NsaWNrQ291bnRlclwiXG4gICAgICAgICAgICBbZWxlbWVudENvbmZpZ109XCJlbGVtZW50Q29uZmlnXCJcbiAgICAgICAgICAgICh1cGRhdGVFbGVtZW50KT1cImhhbmRsZU9uU2F2ZVVwZGF0ZUVsZW1lbnQoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYmFzaWMtbnVtYmVyLWNvbmZpZy1lZGl0b3I+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCI+XG4gICAgICAgICAgPGJhc2ljLXJhZGlvLWNvbmZpZy1lZGl0b3JcbiAgICAgICAgICAgIFtzYXZlQmFzaWNDbGlja0NvdW50ZXJdPVwic2F2ZUJhc2ljQ2xpY2tDb3VudGVyXCJcbiAgICAgICAgICAgIFtlbGVtZW50Q29uZmlnXT1cImVsZW1lbnRDb25maWdcIlxuICAgICAgICAgICAgKHVwZGF0ZUVsZW1lbnQpPVwiaGFuZGxlT25TYXZlVXBkYXRlRWxlbWVudCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9iYXNpYy1yYWRpby1jb25maWctZWRpdG9yPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIj5cbiAgICAgICAgICA8YmFzaWMtc2VsZWN0LWNvbmZpZy1lZGl0b3JcbiAgICAgICAgICAgIFtzYXZlQmFzaWNDbGlja0NvdW50ZXJdPVwic2F2ZUJhc2ljQ2xpY2tDb3VudGVyXCJcbiAgICAgICAgICAgIFtlbGVtZW50Q29uZmlnXT1cImVsZW1lbnRDb25maWdcIlxuICAgICAgICAgICAgKHVwZGF0ZUVsZW1lbnQpPVwiaGFuZGxlT25TYXZlVXBkYXRlRWxlbWVudCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9iYXNpYy1zZWxlY3QtY29uZmlnLWVkaXRvcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cbiAgICAgICAgICA8YmFzaWMtY2hlY2tib3gtY29uZmlnLWVkaXRvclxuICAgICAgICAgICAgW3NhdmVCYXNpY0NsaWNrQ291bnRlcl09XCJzYXZlQmFzaWNDbGlja0NvdW50ZXJcIlxuICAgICAgICAgICAgW2VsZW1lbnRDb25maWddPVwiZWxlbWVudENvbmZpZ1wiXG4gICAgICAgICAgICAodXBkYXRlRWxlbWVudCk9XCJoYW5kbGVPblNhdmVVcGRhdGVFbGVtZW50KCRldmVudClcIlxuICAgICAgICAgID48L2Jhc2ljLWNoZWNrYm94LWNvbmZpZy1lZGl0b3I+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cbiAgICAgICAgICA8YmFzaWMtY2hlY2tib3gtY29uZmlnLWVkaXRvclxuICAgICAgICAgICAgW3NhdmVCYXNpY0NsaWNrQ291bnRlcl09XCJzYXZlQmFzaWNDbGlja0NvdW50ZXJcIlxuICAgICAgICAgICAgW2VsZW1lbnRDb25maWddPVwiZWxlbWVudENvbmZpZ1wiXG4gICAgICAgICAgICAodXBkYXRlRWxlbWVudCk9XCJoYW5kbGVPblNhdmVVcGRhdGVFbGVtZW50KCRldmVudClcIlxuICAgICAgICAgID48L2Jhc2ljLWNoZWNrYm94LWNvbmZpZy1lZGl0b3I+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInb3RwJ1wiPlxuICAgICAgICAgIDxiYXNpYy1vdHAtY29uZmlnLWVkaXRvclxuICAgICAgICAgICAgW3NhdmVCYXNpY0NsaWNrQ291bnRlcl09XCJzYXZlQmFzaWNDbGlja0NvdW50ZXJcIlxuICAgICAgICAgICAgW2VsZW1lbnRDb25maWddPVwiZWxlbWVudENvbmZpZ1wiXG4gICAgICAgICAgICAodXBkYXRlRWxlbWVudCk9XCJoYW5kbGVPblNhdmVVcGRhdGVFbGVtZW50KCRldmVudClcIlxuICAgICAgICAgID48L2Jhc2ljLW90cC1jb25maWctZWRpdG9yPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3Bob25lJ1wiPlxuICAgICAgICAgIDxiYXNpYy1waG9uZS1jb25maWctZWRpdG9yXG4gICAgICAgICAgICBbc2F2ZUJhc2ljQ2xpY2tDb3VudGVyXT1cInNhdmVCYXNpY0NsaWNrQ291bnRlclwiXG4gICAgICAgICAgICBbZWxlbWVudENvbmZpZ109XCJlbGVtZW50Q29uZmlnXCJcbiAgICAgICAgICAgICh1cGRhdGVFbGVtZW50KT1cImhhbmRsZU9uU2F2ZVVwZGF0ZUVsZW1lbnQoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvYmFzaWMtcGhvbmUtY29uZmlnLWVkaXRvcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Zvcm0+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICBnYXA6IDFyZW07XG4gICAgICB9XG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljRWxlbWVudENvbmZpZ0VkaXRvciBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHNhdmVDbGlja0NvdW50ZXI6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KClcbiAgZWxlbWVudENvbmZpZzogYW55ID0ge1xuICAgIGxhYmVsOiBcIlwiLFxuICAgIGtleTogXCJcIixcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgZGVmYXVsdDoge1xuICAgICAgdmFsdWU6IHRydWVcbiAgICB9LFxuICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgIG1pbjogbnVsbCxcbiAgICAgIG1heDogbnVsbCxcbiAgICAgIG1pbkxlbmd0aDogbnVsbCxcbiAgICAgIG1heExlbmd0aDogbnVsbCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBwbGFjZWhvbGRlcjogXCJcIixcbiAgICAgIHJlYWRPbmx5OiBmYWxzZVxuICAgIH1cbiAgfTtcblxuICBAT3V0cHV0KClcbiAgdXBkYXRlRWxlbWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGVsZW1lbnRUeXBlOiBzdHJpbmcgPSBcIlwiO1xuICBzYXZlQmFzaWNDbGlja0NvdW50ZXI6IG51bWJlciA9IDA7XG5cbiAgYmFzaWNGb3JtR3JvdXA6IEZvcm1Hcm91cCA9IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFzc2lnblZhcmlhYmxlcygpO1xuICAgIHRoaXMuY3JlYXRlQmFzaWNGb3JtR3JvdXAoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IHZlcmlmeUNoYW5nZSA9IChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIGNoYW5nZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhY2hhbmdlc1trZXldLmZpcnN0Q2hhbmdlO1xuICAgIH07XG5cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZWxlbWVudENvbmZpZ1wiKSkge1xuICAgICAgdGhpcy5lbGVtZW50Q29uZmlnID0gY2hhbmdlcy5lbGVtZW50Q29uZmlnLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHRoaXMuYXNzaWduVmFyaWFibGVzKCk7XG4gICAgICB0aGlzLmJhc2ljRm9ybUdyb3VwPy5yZXNldCh0aGlzLmVsZW1lbnRDb25maWcpO1xuICAgIH1cblxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJzYXZlQ2xpY2tDb3VudGVyXCIpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYW5nZXMuc2F2ZUNsaWNrQ291bnRlci5wcmV2aW91c1ZhbHVlICE9PVxuICAgICAgICBjaGFuZ2VzLnNhdmVDbGlja0NvdW50ZXIuY3VycmVudFZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zYXZlQ2xpY2tDb3VudGVyID0gY2hhbmdlcy5zYXZlQ2xpY2tDb3VudGVyLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgICB0aGlzLmhhbmRsZU9uU2F2ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXNzaWduVmFyaWFibGVzKCkge1xuICAgIHRoaXMuZWxlbWVudFR5cGUgPSB0aGlzLmVsZW1lbnRDb25maWcuZWxlbWVudFR5cGU7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGNyZWF0ZUJhc2ljRm9ybUdyb3VwKCkge1xuICAgIHRoaXMuYmFzaWNGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIGxhYmVsOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbGVtZW50Q29uZmlnLmxhYmVsKSxcbiAgICAgIGtleTogbmV3IEZvcm1Db250cm9sKHRoaXMuZWxlbWVudENvbmZpZy5rZXkpLFxuICAgICAgZGlzYWJsZWQ6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcuZGlzYWJsZWQpLFxuICAgICAgZGVmYXVsdDogbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIHZhbHVlOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbGVtZW50Q29uZmlnLmRlZmF1bHQudmFsdWUsIHtcbiAgICAgICAgICB1cGRhdGVPbjogXCJjaGFuZ2VcIlxuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgICB2YWxpZGF0b3JzOiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgbWluOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbGVtZW50Q29uZmlnLnZhbGlkYXRvcnMubWluLCB7XG4gICAgICAgICAgdXBkYXRlT246IFwiY2hhbmdlXCJcbiAgICAgICAgfSksXG4gICAgICAgIG1pbkxlbmd0aDogbmV3IEZvcm1Db250cm9sKHRoaXMuZWxlbWVudENvbmZpZy52YWxpZGF0b3JzLm1pbkxlbmd0aCwge1xuICAgICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICAgIH0pLFxuICAgICAgICBtYXg6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcudmFsaWRhdG9ycy5tYXgsIHtcbiAgICAgICAgICB1cGRhdGVPbjogXCJjaGFuZ2VcIlxuICAgICAgICB9KSxcbiAgICAgICAgbWF4TGVuZ3RoOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbGVtZW50Q29uZmlnLnZhbGlkYXRvcnMubWF4TGVuZ3RoLCB7XG4gICAgICAgICAgdXBkYXRlT246IFwiY2hhbmdlXCJcbiAgICAgICAgfSksXG4gICAgICAgIHJlcXVpcmVkOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbGVtZW50Q29uZmlnLnZhbGlkYXRvcnMucmVxdWlyZWQsIHtcbiAgICAgICAgICB1cGRhdGVPbjogXCJjaGFuZ2VcIlxuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgICBwcm9wZXJ0aWVzOiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgcGxhY2Vob2xkZXI6IG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgICB0aGlzLmVsZW1lbnRDb25maWcucHJvcGVydGllcy5wbGFjZWhvbGRlcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1cGRhdGVPbjogXCJjaGFuZ2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgcmVhZE9ubHk6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcucHJvcGVydGllcy5yZWFkT25seSwge1xuICAgICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pO1xuICAgIHRoaXMuYmFzaWNGb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPblNhdmVVcGRhdGVFbGVtZW50KGV2ZW50OiBhbnkpIHtcbiAgICAvLyBHZXQgQ29tbW9uIENvbmZpZ1xuICAgIGxldCBiYXNpY0VsZW1lbnRDb21tb25Db25maWcgPSB0aGlzLmJhc2ljRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgYmFzaWNFbGVtZW50Q29tbW9uQ29uZmlnLmtleSA9IGJhc2ljRWxlbWVudENvbW1vbkNvbmZpZy5rZXkucmVwbGFjZShcbiAgICAgIC9cXHMvZyxcbiAgICAgIFwiX1wiXG4gICAgKTtcblxuICAgIC8vIEdldCBCYXNpYyBFbGVtZW50IENvbmZpZ1xuICAgIGNvbnN0IGJhc2ljRWxlbWVudENvbmZpZyA9IGV2ZW50LmJhc2ljRWxlbWVudENvbmZpZztcblxuICAgIHRoaXMuZWxlbWVudENvbmZpZyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgIHRoaXMuZWxlbWVudENvbmZpZyxcbiAgICAgIGJhc2ljRWxlbWVudENvbW1vbkNvbmZpZyxcbiAgICAgIGJhc2ljRWxlbWVudENvbmZpZ1xuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnQuZW1pdCh7IGVsZW1lbnRDb25maWc6IHRoaXMuZWxlbWVudENvbmZpZyB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25TYXZlKCkge1xuICAgIHRoaXMuc2F2ZUJhc2ljQ2xpY2tDb3VudGVyKys7XG4gIH1cbn1cbiJdfQ==