@proximus/lavender-angular 2.0.0-alpha.168 → 2.0.0-alpha.169

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.
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveGltdXMtbGF2ZW5kZXItYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BpZXJyZS9wcm94aW11cy1sYXZlbmRlci1hbmd1bGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -1,260 +0,0 @@
1
- import { Directive, HostListener, NgModule, forwardRef, } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import * as i0 from "@angular/core";
4
- // ─── Base ────────────────────────────────────────────────────────────────────
5
- class BaseValueAccessor {
6
- elementRef;
7
- onChange = () => { };
8
- onTouched = () => { };
9
- constructor(elementRef) {
10
- this.elementRef = elementRef;
11
- }
12
- handleBlur() {
13
- this.onTouched();
14
- }
15
- registerOnChange(fn) {
16
- this.onChange = fn;
17
- }
18
- registerOnTouched(fn) {
19
- this.onTouched = fn;
20
- }
21
- setDisabledState(isDisabled) {
22
- this.elementRef.nativeElement.disabled = isDisabled;
23
- }
24
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaseValueAccessor, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
25
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: BaseValueAccessor, host: { listeners: { "blur": "handleBlur()" } }, ngImport: i0 });
26
- }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaseValueAccessor, decorators: [{
28
- type: Directive
29
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { handleBlur: [{
30
- type: HostListener,
31
- args: ['blur']
32
- }] } });
33
- // ─── Text-based (value) accessors ────────────────────────────────────────────
34
- class TextValueAccessor extends BaseValueAccessor {
35
- handleInput(value) {
36
- this.onChange(value);
37
- }
38
- writeValue(value) {
39
- this.elementRef.nativeElement.value = value ?? '';
40
- }
41
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TextValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
42
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: TextValueAccessor, host: { listeners: { "input": "handleInput($event.target.value)" } }, usesInheritance: true, ngImport: i0 });
43
- }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TextValueAccessor, decorators: [{
45
- type: Directive
46
- }], propDecorators: { handleInput: [{
47
- type: HostListener,
48
- args: ['input', ['$event.target.value']]
49
- }] } });
50
- // ─── Boolean-based (checked) accessors ───────────────────────────────────────
51
- class CheckedValueAccessor extends BaseValueAccessor {
52
- handleChange(checked) {
53
- this.onChange(checked);
54
- }
55
- writeValue(value) {
56
- this.elementRef.nativeElement.checked = !!value;
57
- }
58
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CheckedValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
59
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: CheckedValueAccessor, host: { listeners: { "change": "handleChange($event.target.checked)" } }, usesInheritance: true, ngImport: i0 });
60
- }
61
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CheckedValueAccessor, decorators: [{
62
- type: Directive
63
- }], propDecorators: { handleChange: [{
64
- type: HostListener,
65
- args: ['change', ['$event.target.checked']]
66
- }] } });
67
- // ─── px-select ───────────────────────────────────────────────────────────────
68
- export class PxSelectValueAccessor extends BaseValueAccessor {
69
- handleInput(value) {
70
- this.onChange(value);
71
- }
72
- writeValue(value) {
73
- this.elementRef.nativeElement.value = value;
74
- }
75
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PxSelectValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
76
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: PxSelectValueAccessor, isStandalone: true, selector: "px-select[formControlName],px-select[formControl],px-select[ngModel]", host: { listeners: { "change": "handleInput($event.target.value)" } }, providers: [
77
- {
78
- provide: NG_VALUE_ACCESSOR,
79
- useExisting: forwardRef(() => PxSelectValueAccessor),
80
- multi: true,
81
- },
82
- ], usesInheritance: true, ngImport: i0 });
83
- }
84
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PxSelectValueAccessor, decorators: [{
85
- type: Directive,
86
- args: [{
87
- selector: 'px-select[formControlName],px-select[formControl],px-select[ngModel]',
88
- providers: [
89
- {
90
- provide: NG_VALUE_ACCESSOR,
91
- useExisting: forwardRef(() => PxSelectValueAccessor),
92
- multi: true,
93
- },
94
- ],
95
- standalone: true,
96
- }]
97
- }], propDecorators: { handleInput: [{
98
- type: HostListener,
99
- args: ['change', ['$event.target.value']]
100
- }] } });
101
- // ─── px-input ────────────────────────────────────────────────────────────────
102
- export class PxInputValueAccessor extends TextValueAccessor {
103
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PxInputValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
104
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: PxInputValueAccessor, isStandalone: true, selector: "px-input[formControlName],px-input[formControl],px-input[ngModel],px-autocomplete[formControlName],px-autocomplete[formControl],px-autocomplete[ngModel]", providers: [
105
- {
106
- provide: NG_VALUE_ACCESSOR,
107
- useExisting: forwardRef(() => PxInputValueAccessor),
108
- multi: true,
109
- },
110
- ], usesInheritance: true, ngImport: i0 });
111
- }
112
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PxInputValueAccessor, decorators: [{
113
- type: Directive,
114
- args: [{
115
- selector: 'px-input[formControlName],px-input[formControl],px-input[ngModel],px-autocomplete[formControlName],px-autocomplete[formControl],px-autocomplete[ngModel]',
116
- providers: [
117
- {
118
- provide: NG_VALUE_ACCESSOR,
119
- useExisting: forwardRef(() => PxInputValueAccessor),
120
- multi: true,
121
- },
122
- ],
123
- standalone: true,
124
- }]
125
- }] });
126
- // ─── px-textarea ─────────────────────────────────────────────────────────────
127
- export class PxTextareaValueAccessor extends TextValueAccessor {
128
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PxTextareaValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
129
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: PxTextareaValueAccessor, isStandalone: true, selector: "px-textarea[formControlName],px-textarea[formControl],px-textarea[ngModel]", providers: [
130
- {
131
- provide: NG_VALUE_ACCESSOR,
132
- useExisting: forwardRef(() => PxTextareaValueAccessor),
133
- multi: true,
134
- },
135
- ], usesInheritance: true, ngImport: i0 });
136
- }
137
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PxTextareaValueAccessor, decorators: [{
138
- type: Directive,
139
- args: [{
140
- selector: 'px-textarea[formControlName],px-textarea[formControl],px-textarea[ngModel]',
141
- providers: [
142
- {
143
- provide: NG_VALUE_ACCESSOR,
144
- useExisting: forwardRef(() => PxTextareaValueAccessor),
145
- multi: true,
146
- },
147
- ],
148
- standalone: true,
149
- }]
150
- }] });
151
- // ─── px-checkbox ─────────────────────────────────────────────────────────────
152
- export class PxCheckboxValueAccessor extends CheckedValueAccessor {
153
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PxCheckboxValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
154
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: PxCheckboxValueAccessor, isStandalone: true, selector: "px-checkbox[formControlName],px-checkbox[formControl],px-checkbox[ngModel]", providers: [
155
- {
156
- provide: NG_VALUE_ACCESSOR,
157
- useExisting: forwardRef(() => PxCheckboxValueAccessor),
158
- multi: true,
159
- },
160
- ], usesInheritance: true, ngImport: i0 });
161
- }
162
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PxCheckboxValueAccessor, decorators: [{
163
- type: Directive,
164
- args: [{
165
- selector: 'px-checkbox[formControlName],px-checkbox[formControl],px-checkbox[ngModel]',
166
- providers: [
167
- {
168
- provide: NG_VALUE_ACCESSOR,
169
- useExisting: forwardRef(() => PxCheckboxValueAccessor),
170
- multi: true,
171
- },
172
- ],
173
- standalone: true,
174
- }]
175
- }] });
176
- // ─── px-switch ───────────────────────────────────────────────────────────────
177
- export class PxSwitchValueAccessor extends CheckedValueAccessor {
178
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PxSwitchValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
179
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: PxSwitchValueAccessor, isStandalone: true, selector: "px-switch[formControlName],px-switch[formControl],px-switch[ngModel]", providers: [
180
- {
181
- provide: NG_VALUE_ACCESSOR,
182
- useExisting: forwardRef(() => PxSwitchValueAccessor),
183
- multi: true,
184
- },
185
- ], usesInheritance: true, ngImport: i0 });
186
- }
187
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PxSwitchValueAccessor, decorators: [{
188
- type: Directive,
189
- args: [{
190
- selector: 'px-switch[formControlName],px-switch[formControl],px-switch[ngModel]',
191
- providers: [
192
- {
193
- provide: NG_VALUE_ACCESSOR,
194
- useExisting: forwardRef(() => PxSwitchValueAccessor),
195
- multi: true,
196
- },
197
- ],
198
- standalone: true,
199
- }]
200
- }] });
201
- // ─── px-radio-group ──────────────────────────────────────────────────────────
202
- export class PxRadioGroupValueAccessor extends BaseValueAccessor {
203
- handleChange(event) {
204
- const radio = event.target;
205
- this.onChange(radio['value']);
206
- }
207
- writeValue(value) {
208
- const radios = this.elementRef.nativeElement.querySelectorAll('px-radio');
209
- radios.forEach((radio) => {
210
- radio.checked = radio.getAttribute('value') === value;
211
- });
212
- }
213
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PxRadioGroupValueAccessor, deps: null, target: i0.ɵɵFactoryTarget.Directive });
214
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: PxRadioGroupValueAccessor, isStandalone: true, selector: "px-radio-group[formControlName],px-radio-group[formControl],px-radio-group[ngModel]", host: { listeners: { "change": "handleChange($event)" } }, providers: [
215
- {
216
- provide: NG_VALUE_ACCESSOR,
217
- useExisting: forwardRef(() => PxRadioGroupValueAccessor),
218
- multi: true,
219
- },
220
- ], usesInheritance: true, ngImport: i0 });
221
- }
222
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PxRadioGroupValueAccessor, decorators: [{
223
- type: Directive,
224
- args: [{
225
- selector: 'px-radio-group[formControlName],px-radio-group[formControl],px-radio-group[ngModel]',
226
- providers: [
227
- {
228
- provide: NG_VALUE_ACCESSOR,
229
- useExisting: forwardRef(() => PxRadioGroupValueAccessor),
230
- multi: true,
231
- },
232
- ],
233
- standalone: true,
234
- }]
235
- }], propDecorators: { handleChange: [{
236
- type: HostListener,
237
- args: ['change', ['$event']]
238
- }] } });
239
- // ─── NgModule ────────────────────────────────────────────────────────────────
240
- const VALUE_ACCESSORS = [
241
- PxSelectValueAccessor,
242
- PxInputValueAccessor,
243
- PxTextareaValueAccessor,
244
- PxCheckboxValueAccessor,
245
- PxSwitchValueAccessor,
246
- PxRadioGroupValueAccessor,
247
- ];
248
- export class LavenderValueAccessors {
249
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LavenderValueAccessors, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
250
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: LavenderValueAccessors, imports: [PxSelectValueAccessor, PxInputValueAccessor, PxTextareaValueAccessor, PxCheckboxValueAccessor, PxSwitchValueAccessor, PxRadioGroupValueAccessor], exports: [PxSelectValueAccessor, PxInputValueAccessor, PxTextareaValueAccessor, PxCheckboxValueAccessor, PxSwitchValueAccessor, PxRadioGroupValueAccessor] });
251
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LavenderValueAccessors });
252
- }
253
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LavenderValueAccessors, decorators: [{
254
- type: NgModule,
255
- args: [{
256
- imports: VALUE_ACCESSORS,
257
- exports: VALUE_ACCESSORS,
258
- }]
259
- }] });
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHgtZm9ybS1hY2Nlc3Nvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9waWVycmUvcHgtZm9ybS1hY2Nlc3Nvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osUUFBUSxFQUNSLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXpFLGdGQUFnRjtBQUVoRixNQUNlLGlCQUFpQjtJQUlSO0lBSFosUUFBUSxHQUF1QixHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDeEMsU0FBUyxHQUFlLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUUzQyxZQUFzQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQUcsQ0FBQztJQUdoRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFJRCxnQkFBZ0IsQ0FBQyxFQUFzQjtRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBYztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0JBQWdCLENBQUUsVUFBbUI7UUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUN0RCxDQUFDO3dHQXZCWSxpQkFBaUI7NEZBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEL0IsU0FBUzsrRUFRUixVQUFVO3NCQURULFlBQVk7dUJBQUMsTUFBTTs7QUFvQnRCLGdGQUFnRjtBQUVoRixNQUNlLGlCQUFrQixTQUFRLGlCQUEwQjtJQUVqRSxXQUFXLENBQUMsS0FBYztRQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUNwRCxDQUFDO3dHQVJZLGlCQUFpQjs0RkFBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQvQixTQUFTOzhCQUdSLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQzs7QUFVaEQsZ0ZBQWdGO0FBRWhGLE1BQ2Usb0JBQXFCLFNBQVEsaUJBQTBCO0lBRXBFLFlBQVksQ0FBQyxPQUFnQjtRQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNsRCxDQUFDO3dHQVJZLG9CQUFvQjs0RkFBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQURsQyxTQUFTOzhCQUdSLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzs7QUFVbkQsZ0ZBQWdGO0FBY2hGLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxpQkFBaUI7SUFFMUQsV0FBVyxDQUFDLEtBQWM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUM5QyxDQUFDO3dHQVJVLHFCQUFxQjs0RkFBckIscUJBQXFCLDBMQVRyQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUM7Z0JBQ3BELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRjs7NEZBR1UscUJBQXFCO2tCQVpqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFDTixzRUFBc0U7b0JBQ3hFLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0JBQ0QsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQUdDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQzs7QUFVakQsZ0ZBQWdGO0FBY2hGLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxpQkFBaUI7d0dBQTlDLG9CQUFvQjs0RkFBcEIsb0JBQW9CLHVNQVRwQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUM7Z0JBQ25ELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRjs7NEZBR1Usb0JBQW9CO2tCQVpoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFDTiwwSkFBMEo7b0JBQzVKLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0JBQ0QsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOztBQUdELGdGQUFnRjtBQWNoRixNQUFNLE9BQU8sdUJBQXdCLFNBQVEsaUJBQWlCO3dHQUFqRCx1QkFBdUI7NEZBQXZCLHVCQUF1Qix5SEFUdkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQUN0RCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0Y7OzRGQUdVLHVCQUF1QjtrQkFabkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQ04sNEVBQTRFO29CQUM5RSxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLENBQUM7NEJBQ3RELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO29CQUNELFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7QUFHRCxnRkFBZ0Y7QUFjaEYsTUFBTSxPQUFPLHVCQUF3QixTQUFRLG9CQUFvQjt3R0FBcEQsdUJBQXVCOzRGQUF2Qix1QkFBdUIseUhBVHZCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDdEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGOzs0RkFHVSx1QkFBdUI7a0JBWm5DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUNOLDRFQUE0RTtvQkFDOUUsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHdCQUF3QixDQUFDOzRCQUN0RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7O0FBR0QsZ0ZBQWdGO0FBY2hGLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxvQkFBb0I7d0dBQWxELHFCQUFxQjs0RkFBckIscUJBQXFCLG1IQVRyQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUM7Z0JBQ3BELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRjs7NEZBR1UscUJBQXFCO2tCQVpqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFDTixzRUFBc0U7b0JBQ3hFLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0JBQ0QsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOztBQUdELGdGQUFnRjtBQWNoRixNQUFNLE9BQU8seUJBQTBCLFNBQVEsaUJBQWlCO0lBRTlELFlBQVksQ0FBQyxLQUFZO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFjO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUF1QixFQUFFLEVBQUU7WUFDekMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBWlUseUJBQXlCOzRGQUF6Qix5QkFBeUIsNkxBVHpCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztnQkFDeEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGOzs0RkFHVSx5QkFBeUI7a0JBWnJDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUNOLHFGQUFxRjtvQkFDdkYsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDBCQUEwQixDQUFDOzRCQUN4RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7OEJBR0MsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7QUFjcEMsZ0ZBQWdGO0FBRWhGLE1BQU0sZUFBZSxHQUFHO0lBQ3RCLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIsdUJBQXVCO0lBQ3ZCLHVCQUF1QjtJQUN2QixxQkFBcUI7SUFDckIseUJBQXlCO0NBQzFCLENBQUM7QUFNRixNQUFNLE9BQU8sc0JBQXNCO3dHQUF0QixzQkFBc0I7eUdBQXRCLHNCQUFzQixZQXZIdEIscUJBQXFCLEVBeUJyQixvQkFBb0IsRUFnQnBCLHVCQUF1QixFQWdCdkIsdUJBQXVCLEVBZ0J2QixxQkFBcUIsRUFnQnJCLHlCQUF5QixhQXpGekIscUJBQXFCLEVBeUJyQixvQkFBb0IsRUFnQnBCLHVCQUF1QixFQWdCdkIsdUJBQXVCLEVBZ0J2QixxQkFBcUIsRUFnQnJCLHlCQUF5Qjt5R0E4QnpCLHNCQUFzQjs7NEZBQXRCLHNCQUFzQjtrQkFKbEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsZUFBZTtvQkFDeEIsT0FBTyxFQUFFLGVBQWU7aUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIE5nTW9kdWxlLFxuICBmb3J3YXJkUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuLy8g4pSA4pSA4pSAIEJhc2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbkBEaXJlY3RpdmUoKVxuYWJzdHJhY3QgY2xhc3MgQmFzZVZhbHVlQWNjZXNzb3I8VCA9IHVua25vd24+IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwcm90ZWN0ZWQgb25DaGFuZ2U6ICh2YWx1ZTogVCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBwcm90ZWN0ZWQgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIGhhbmRsZUJsdXIoKSB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIGFic3RyYWN0IHdyaXRlVmFsdWUodmFsdWU6IFQpOiB2b2lkO1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogVCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cbn1cblxuLy8g4pSA4pSA4pSAIFRleHQtYmFzZWQgKHZhbHVlKSBhY2Nlc3NvcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbkBEaXJlY3RpdmUoKVxuYWJzdHJhY3QgY2xhc3MgVGV4dFZhbHVlQWNjZXNzb3IgZXh0ZW5kcyBCYXNlVmFsdWVBY2Nlc3Nvcjx1bmtub3duPiB7XG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JywgWyckZXZlbnQudGFyZ2V0LnZhbHVlJ10pXG4gIGhhbmRsZUlucHV0KHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZSA/PyAnJztcbiAgfVxufVxuXG4vLyDilIDilIDilIAgQm9vbGVhbi1iYXNlZCAoY2hlY2tlZCkgYWNjZXNzb3JzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5ARGlyZWN0aXZlKClcbmFic3RyYWN0IGNsYXNzIENoZWNrZWRWYWx1ZUFjY2Vzc29yIGV4dGVuZHMgQmFzZVZhbHVlQWNjZXNzb3I8Ym9vbGVhbj4ge1xuICBASG9zdExpc3RlbmVyKCdjaGFuZ2UnLCBbJyRldmVudC50YXJnZXQuY2hlY2tlZCddKVxuICBoYW5kbGVDaGFuZ2UoY2hlY2tlZDogYm9vbGVhbikge1xuICAgIHRoaXMub25DaGFuZ2UoY2hlY2tlZCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hlY2tlZCA9ICEhdmFsdWU7XG4gIH1cbn1cblxuLy8g4pSA4pSA4pSAIHB4LXNlbGVjdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOlxuICAgICdweC1zZWxlY3RbZm9ybUNvbnRyb2xOYW1lXSxweC1zZWxlY3RbZm9ybUNvbnRyb2xdLHB4LXNlbGVjdFtuZ01vZGVsXScsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUHhTZWxlY3RWYWx1ZUFjY2Vzc29yKSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFB4U2VsZWN0VmFsdWVBY2Nlc3NvciBleHRlbmRzIEJhc2VWYWx1ZUFjY2Vzc29yIHtcbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQudGFyZ2V0LnZhbHVlJ10pXG4gIGhhbmRsZUlucHV0KHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vLyDilIDilIDilIAgcHgtaW5wdXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjpcbiAgICAncHgtaW5wdXRbZm9ybUNvbnRyb2xOYW1lXSxweC1pbnB1dFtmb3JtQ29udHJvbF0scHgtaW5wdXRbbmdNb2RlbF0scHgtYXV0b2NvbXBsZXRlW2Zvcm1Db250cm9sTmFtZV0scHgtYXV0b2NvbXBsZXRlW2Zvcm1Db250cm9sXSxweC1hdXRvY29tcGxldGVbbmdNb2RlbF0nLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFB4SW5wdXRWYWx1ZUFjY2Vzc29yKSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFB4SW5wdXRWYWx1ZUFjY2Vzc29yIGV4dGVuZHMgVGV4dFZhbHVlQWNjZXNzb3Ige31cblxuLy8g4pSA4pSA4pSAIHB4LXRleHRhcmVhIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6XG4gICAgJ3B4LXRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0scHgtdGV4dGFyZWFbZm9ybUNvbnRyb2xdLHB4LXRleHRhcmVhW25nTW9kZWxdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQeFRleHRhcmVhVmFsdWVBY2Nlc3NvciksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBQeFRleHRhcmVhVmFsdWVBY2Nlc3NvciBleHRlbmRzIFRleHRWYWx1ZUFjY2Vzc29yIHt9XG5cbi8vIOKUgOKUgOKUgCBweC1jaGVja2JveCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOlxuICAgICdweC1jaGVja2JveFtmb3JtQ29udHJvbE5hbWVdLHB4LWNoZWNrYm94W2Zvcm1Db250cm9sXSxweC1jaGVja2JveFtuZ01vZGVsXScsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUHhDaGVja2JveFZhbHVlQWNjZXNzb3IpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUHhDaGVja2JveFZhbHVlQWNjZXNzb3IgZXh0ZW5kcyBDaGVja2VkVmFsdWVBY2Nlc3NvciB7fVxuXG4vLyDilIDilIDilIAgcHgtc3dpdGNoIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6XG4gICAgJ3B4LXN3aXRjaFtmb3JtQ29udHJvbE5hbWVdLHB4LXN3aXRjaFtmb3JtQ29udHJvbF0scHgtc3dpdGNoW25nTW9kZWxdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQeFN3aXRjaFZhbHVlQWNjZXNzb3IpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUHhTd2l0Y2hWYWx1ZUFjY2Vzc29yIGV4dGVuZHMgQ2hlY2tlZFZhbHVlQWNjZXNzb3Ige31cblxuLy8g4pSA4pSA4pSAIHB4LXJhZGlvLWdyb3VwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6XG4gICAgJ3B4LXJhZGlvLWdyb3VwW2Zvcm1Db250cm9sTmFtZV0scHgtcmFkaW8tZ3JvdXBbZm9ybUNvbnRyb2xdLHB4LXJhZGlvLWdyb3VwW25nTW9kZWxdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQeFJhZGlvR3JvdXBWYWx1ZUFjY2Vzc29yKSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFB4UmFkaW9Hcm91cFZhbHVlQWNjZXNzb3IgZXh0ZW5kcyBCYXNlVmFsdWVBY2Nlc3NvciB7XG4gIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScsIFsnJGV2ZW50J10pXG4gIGhhbmRsZUNoYW5nZShldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCByYWRpbyA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICB0aGlzLm9uQ2hhbmdlKHJhZGlvWyd2YWx1ZSddKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCByYWRpb3MgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdweC1yYWRpbycpO1xuICAgIHJhZGlvcy5mb3JFYWNoKChyYWRpbzogSFRNTElucHV0RWxlbWVudCkgPT4ge1xuICAgICAgcmFkaW8uY2hlY2tlZCA9IHJhZGlvLmdldEF0dHJpYnV0ZSgndmFsdWUnKSA9PT0gdmFsdWU7XG4gICAgfSk7XG4gIH1cbn1cblxuLy8g4pSA4pSA4pSAIE5nTW9kdWxlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5jb25zdCBWQUxVRV9BQ0NFU1NPUlMgPSBbXG4gIFB4U2VsZWN0VmFsdWVBY2Nlc3NvcixcbiAgUHhJbnB1dFZhbHVlQWNjZXNzb3IsXG4gIFB4VGV4dGFyZWFWYWx1ZUFjY2Vzc29yLFxuICBQeENoZWNrYm94VmFsdWVBY2Nlc3NvcixcbiAgUHhTd2l0Y2hWYWx1ZUFjY2Vzc29yLFxuICBQeFJhZGlvR3JvdXBWYWx1ZUFjY2Vzc29yLFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogVkFMVUVfQUNDRVNTT1JTLFxuICBleHBvcnRzOiBWQUxVRV9BQ0NFU1NPUlMsXG59KVxuZXhwb3J0IGNsYXNzIExhdmVuZGVyVmFsdWVBY2Nlc3NvcnMge31cbiJdfQ==