@wemake4u/form-player-se 1.0.31 → 1.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/actionsCellRenderer/actionsCellRenderer.component.mjs +29 -16
- package/esm2022/lib/components/hostCellRenderer/hostCellRenderer.component.mjs +3 -2
- package/esm2022/lib/directives/grid.directive.mjs +82 -24
- package/esm2022/lib/directives/validationpatch.directive.mjs +44 -2
- package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +24 -11
- package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +24 -19
- package/esm2022/lib/services/cache.service.mjs +86 -0
- package/esm2022/lib/services/dialog.service.mjs +2 -2
- package/esm2022/lib/services/formatter.service.mjs +2 -2
- package/esm2022/lib/services/function.service.mjs +14 -3
- package/esm2022/lib/services/grid.service.mjs +46 -26
- package/esm2022/lib/services/programmability.service.mjs +27 -30
- package/esm2022/lib/services/scope.service.mjs +3 -2
- package/esm2022/lib/services/toast.service.mjs +2 -2
- package/esm2022/lib/services/validation.service.mjs +2 -2
- package/esm2022/lib/services/weak.service.mjs +6 -1
- package/esm2022/lib/utils/bound.mjs +12 -0
- package/esm2022/lib/utils/groupByRow.mjs +2 -1
- package/esm2022/lib/utils/proxy.mjs +55 -0
- package/fesm2022/wemake4u-form-player-se.mjs +420 -142
- package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
- package/lib/components/actionsCellRenderer/actionsCellRenderer.component.d.ts +4 -0
- package/lib/directives/grid.directive.d.ts +17 -4
- package/lib/directives/validationpatch.directive.d.ts +9 -0
- package/lib/dynamic-fields/dynamic-fields.component.d.ts +5 -4
- package/lib/dynamic-form/dynamic-form.component.d.ts +5 -3
- package/lib/services/cache.service.d.ts +21 -0
- package/lib/services/function.service.d.ts +2 -0
- package/lib/services/grid.service.d.ts +11 -5
- package/lib/services/programmability.service.d.ts +4 -3
- package/lib/services/weak.service.d.ts +1 -0
- package/lib/utils/{functions.d.ts → bound.d.ts} +0 -1
- package/lib/utils/groupByRow.d.ts +1 -0
- package/lib/utils/proxy.d.ts +2 -0
- package/package.json +1 -1
- package/esm2022/lib/utils/functions.mjs +0 -31
|
@@ -69,12 +69,12 @@ export class DynamicFieldsComponent {
|
|
|
69
69
|
chart;
|
|
70
70
|
dialog;
|
|
71
71
|
el;
|
|
72
|
-
cdr;
|
|
73
72
|
rows;
|
|
74
73
|
formGroup;
|
|
75
74
|
alignment = "";
|
|
75
|
+
readOnly = null;
|
|
76
76
|
Texts = Texts;
|
|
77
|
-
constructor(sanitizer, markdown, mime, programmability, weak, register, metadata, languageService, global, formService, grid, chart, dialog, el
|
|
77
|
+
constructor(sanitizer, markdown, mime, programmability, weak, register, metadata, languageService, global, formService, grid, chart, dialog, el) {
|
|
78
78
|
this.sanitizer = sanitizer;
|
|
79
79
|
this.markdown = markdown;
|
|
80
80
|
this.mime = mime;
|
|
@@ -89,11 +89,9 @@ export class DynamicFieldsComponent {
|
|
|
89
89
|
this.chart = chart;
|
|
90
90
|
this.dialog = dialog;
|
|
91
91
|
this.el = el;
|
|
92
|
-
this.cdr = cdr;
|
|
93
92
|
}
|
|
94
93
|
ngOnInit() {
|
|
95
94
|
this.configureDatepicker();
|
|
96
|
-
this.cdr.detectChanges();
|
|
97
95
|
}
|
|
98
96
|
ngAfterViewInit() {
|
|
99
97
|
setTimeout(() => {
|
|
@@ -141,6 +139,19 @@ export class DynamicFieldsComponent {
|
|
|
141
139
|
return this.sanitizer.sanitizeSafeUrl(url);
|
|
142
140
|
});
|
|
143
141
|
}
|
|
142
|
+
evaluateHeight(value) {
|
|
143
|
+
if (typeof value === "number") {
|
|
144
|
+
return value + "px";
|
|
145
|
+
}
|
|
146
|
+
else if (typeof value === "string") {
|
|
147
|
+
const result = this.programmability.evaluate(this.formGroup, value);
|
|
148
|
+
if (typeof result === "number") {
|
|
149
|
+
return result + "px";
|
|
150
|
+
}
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
144
155
|
evaluateTemplate(value) {
|
|
145
156
|
return this.programmability.evaluateTemplate(this.formGroup, value);
|
|
146
157
|
}
|
|
@@ -272,7 +283,7 @@ export class DynamicFieldsComponent {
|
|
|
272
283
|
return this.programmability.evaluate(this.formGroup, expression);
|
|
273
284
|
}
|
|
274
285
|
getGridOptions(component) {
|
|
275
|
-
return this.weak.call(component,
|
|
286
|
+
return this.weak.call(component, this.grid.getCacheKey(), () => this.grid.getOptions(component, this.formGroup));
|
|
276
287
|
}
|
|
277
288
|
getGridModules(component) {
|
|
278
289
|
return this.weak.call(component, 'getGridModules', () => this.grid.getModules());
|
|
@@ -532,13 +543,13 @@ export class DynamicFieldsComponent {
|
|
|
532
543
|
};
|
|
533
544
|
}
|
|
534
545
|
;
|
|
535
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicFieldsComponent, deps: [{ token: i1.SanitizeService }, { token: i2.MarkdownService }, { token: i3.MimeService }, { token: i4.ProgrammabilityService }, { token: i5.WeakService }, { token: i6.RegisterService }, { token: i7.MetadataService }, { token: i8.LanguageService }, { token: i9.GlobalService }, { token: i10.FormService }, { token: i11.GridService }, { token: i12.ChartService }, { token: i13.DialogService }, { token: i0.ElementRef }
|
|
536
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DynamicFieldsComponent, isStandalone: true, selector: "app-dynamic-fields", inputs: { rows: "rows", formGroup: "formGroup", alignment: "alignment" }, providers: [
|
|
546
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicFieldsComponent, deps: [{ token: i1.SanitizeService }, { token: i2.MarkdownService }, { token: i3.MimeService }, { token: i4.ProgrammabilityService }, { token: i5.WeakService }, { token: i6.RegisterService }, { token: i7.MetadataService }, { token: i8.LanguageService }, { token: i9.GlobalService }, { token: i10.FormService }, { token: i11.GridService }, { token: i12.ChartService }, { token: i13.DialogService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
547
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DynamicFieldsComponent, isStandalone: true, selector: "app-dynamic-fields", inputs: { rows: "rows", formGroup: "formGroup", alignment: "alignment", readOnly: "readOnly" }, providers: [
|
|
537
548
|
RegisterService,
|
|
538
549
|
ProgrammabilityService,
|
|
539
550
|
GridService,
|
|
540
551
|
ChartService
|
|
541
|
-
], ngImport: i0, template: "<div [ngClass]=\"getFormAlignment()\">\r\n <ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [class]=\"getClass(component)\"\r\n [ngClass]=\"getComponentAlignment(component)\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-input type=\"text\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n [ngClass]=\"getTextAlignment(component)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"locale(Texts, 'TypeToSearch')\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-input type=\"number\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [ngClass]=\"getTextAlignment(component)\"\r\n [formControlName]=\"component.key\"\r\n number\r\n [defaultValue]=\"evaluateNumber(component.defaultValue)\"\r\n [minimum]=\"evaluateNumber(component.minimum)\"\r\n [maximum]=\"evaluateNumber(component.maximum)\"\r\n [decimalDigits]=\"evaluateNumber(component.decimalDigits)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaDateLabel') || locale(component, 'dateLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'dateLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n isoDate\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaTimeLabel') || locale(component, 'timeLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'timeLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-input type=\"textarea\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n [ngClass]=\"getTextAlignment(component)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-file-upload [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ locale(Texts, 'Upload') }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\"\r\n [rows]=\"createUploadTables(component)\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-slider [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region displayfield -->\r\n <ng-container *ngSwitchCase=\"'displayfield'\">\r\n <div class=\"sirio-control\"\r\n [ngClass]=\"[getTextAlignment(component), getLightView(component) ]\"\r\n #displayfield\r\n [register]=\"component\"\r\n [componentRef]=\"displayfield\">\r\n <div *ngIf=\"component.label\" class=\"sirio-label\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n <button *ngIf=\"component.tooltip\"\r\n sirioTooltip\r\n [content]=\"component.tooltip\"\r\n [hasPopover]=\"true\"\r\n [attr.aria-label]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n class=\"sirio-label-popover fas fa-info-circle\"></button>\r\n </div>\r\n <div class=\"sirio-form-control data-display\" [ngClass]=\"component.fieldType\">\r\n <ng-container *ngIf=\"component.fieldType === 'checkbox'; else defaultTemplate\">\r\n <i *ngIf=\"evaluate(component.expression)\" class=\"fas fa-check\"></i>\r\n </ng-container>\r\n <ng-template #defaultTemplate>\r\n <ng-container *ngIf=\"supportValues(component) && hasValues(component); else simpleTemplate\">\r\n <ng-container *ngIf=\"getValues(component) | async as values\">\r\n {{ toLabel(evaluate(component.expression), values) }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #simpleTemplate>\r\n {{ evaluate(component.expression) }}\r\n </ng-template>\r\n </div>\r\n <p *ngIf=\"component.description\" class=\"sirio-helper-text\">\r\n {{ evaluateString(locale(component, 'description')) }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [formArrayName]=\"component.key\"\r\n [repeat]=\"evaluateNumber(component.repetitions)\"\r\n [allowAddRemove]=\"evaluateBoolean(component.allowAddRemove)\">\r\n <p *ngIf=\"component.description\">{{ evaluateString(locale(component, 'description')) }}</p>\r\n <ng-container *ngIf=\"getFormArray(resolvePath(component.path).get(component.key)) as formArray\">\r\n <ng-container *ngIf=\"formArray.controls.length > 0\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n [tabCount]=\"formArray.controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of formArray.controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\">\r\n <ng-container *ngIf=\"i === dynamiclisttab.activeIndex\">\r\n <div>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(formArray, i, true)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"formArray.controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of formArray.controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel #panel accordionPanel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <ng-container *ngIf=\"panel.panelIsOpen\">\r\n <div>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(formArray, i, true)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <ng-container *ngFor=\"let item of formArray.controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true, 'group-outline-repeat': true }\">\r\n <div>\r\n <label *ngIf=\"component.label\">{{ evaluateString(locale(component, 'label')) + ' ' + (i + 1) }}</label>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove || component.allowReorder\">\r\n <div style=\"text-align:right\">\r\n <ng-container *ngIf=\"component.allowReorder\">\r\n <ngx-sirio-button (click)=\"moveUpItem(formArray, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-arrow-up\">Sposta S\u00F9</ngx-sirio-button>\r\n <ngx-sirio-button (click)=\"moveDownItem(formArray, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-arrow-down\">Sposta Gi\u00F9</ngx-sirio-button>\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"removeItem(formArray, i, true)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </ng-container> \r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addItem(formArray)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ evaluateString(locale(component, 'addLabel') || locale(Texts, 'AddItem')) }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"getGroupOutline(component)\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"resolvePath(component.path)\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <ngx-sirio-tab #tab\r\n [register]=\"component\"\r\n [componentRef]=\"tab\"\r\n [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n [isNavLine]=\"component.navigation\"\r\n [isVertical]=\"component.vertical\"\r\n tabControl>\r\n <ng-container *ngFor=\"let panel of component.panels; let i = index;\">\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(panel, 'label'))\"\r\n [icon]=\"evaluateString(panel.icon)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled) ?? false\"\r\n tabItem\r\n [componentRef]=\"tab\"\r\n *ngIf=\"evaluateConditional(panel.conditional)\">\r\n <ng-container *ngIf=\"getTemplate(panel.template) as template\">\r\n <div *ngIf=\"i === tab.activeIndex\">\r\n <app-dynamic-fields [formGroup]=\"resolvePath(panel.path)\"\r\n [rows]=\"template?.rows\"\r\n [alignment]=\"template?.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <ngx-sirio-accordion #accordion\r\n [register]=\"component\"\r\n [componentRef]=\"accordion\">\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ngx-sirio-accordion-panel *ngIf=\"evaluateConditional(panel.conditional)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled)\">\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(panel, 'label'))\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <div>\r\n <ng-container *ngIf=\"getTemplate(panel.template) as template\">\r\n <app-dynamic-fields [formGroup]=\"resolvePath(panel.path)\"\r\n [rows]=\"template?.rows\"\r\n [alignment]=\"template?.verticalAlignment\"></app-dynamic-fields>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [collapse]=\"component.collapseTo\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <!--Reset View Context-->\r\n <div tabindex=\"0\" style=\"display:none\"></div>\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n <ng-container *ngIf=\"component.tooltip\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [attr.aria-label]=\"locale(Texts, 'Information')\"\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'tooltip')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(locale(component, 'content')))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(locale(component, 'alt'))\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n (selectionChanged)=\"onGridSelectionChanged(component, $event)\"\r\n [columnDefs]=\"component.columns || evaluate(component.columnsExpression) || []\"\r\n [rowSource]=\"getRowSource(component)\"\r\n [refresh]=\"refreshRowSource(component)\"\r\n [style.height.px]=\"evaluateNumber(component.height)\"\r\n [formGroup]=\"formGroup\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <div [ngClass]=\"getHorizontalAlignment(component)\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-button>\r\n </div> \r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <label [for]=\"component.id\">{{ evaluateString(locale(component, 'label')) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(locale(component, 'label'))\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"locale(Texts, 'Close')\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(locale(component, 'title'))\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <p *ngIf=\"component.title\" class=\"sirio-tooltip-heading sirio-space-down\">\r\n {{ evaluateString(locale(component, 'title')) }}\r\n </p>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region chart -->\r\n <ng-container *ngSwitchCase=\"'chart'\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <ag-charts [options]=\"(getChartOptions(component) | async) ?? {}\"\r\n [observe]=\"getChartData(component)\"\r\n [callback]=\"invalidateChart(component)\"\r\n [style.height.px]=\"component.height\"\r\n #chart\r\n [register]=\"component\"\r\n [componentRef]=\"chart\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region component -->\r\n <ng-container *ngSwitchCase=\"'component'\">\r\n <ng-container *ngIf=\"component.isInput; else noInputTemplate\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <app-dynamic-host [properties]=\"getFeelableProperties(component)\"\r\n [formGroup]=\"resolvePath(component.path)\"\r\n #componentHost\r\n [register]=\"component\"\r\n [componentRef]=\"componentHost\" />\r\n </ng-container>\r\n <ng-template #noInputTemplate>\r\n <app-dynamic-host [properties]=\"getFeelableProperties(component)\"\r\n #componentHost\r\n [register]=\"component\"\r\n [componentRef]=\"componentHost\" />\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n", styles: [".flex{display:flex}.field-set{align-items:start}.field-set>.col-host>*{margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-outline-repeat{margin-top:8px;margin-bottom:8px}.valign-start>.row{align-items:start}.valign-center>.row{align-items:center}.valign-end>.row{align-items:end}.component-start{align-self:start}.component-center{align-self:center}.component-end{align-self:end}.text-paragraph p{margin-bottom:0!important}.sirio-tab.sirio-tab-vertical .sirio-tab-body{margin-left:10px;margin-right:10px}.sirio-tab:not(.sirio-tab-vertical) .sirio-tab-body{margin-top:10px;margin-bottom:10px}.sirio-label{cursor:default}.sirio-control.text-left input.sirio-form-control,.sirio-control.text-left textarea.sirio-form-control,.sirio-control.text-left div.sirio-form-control{text-align:left}.sirio-control.text-center input.sirio-form-control,.sirio-control.text-center textarea.sirio-form-control,.sirio-control.text-center div.sirio-form-control{text-align:center}.sirio-control.text-right input.sirio-form-control,.sirio-control.text-right textarea.sirio-form-control,.sirio-control.text-right div.sirio-form-control{text-align:right}.horizontal-left{text-align:left}.horizontal-center{text-align:center}.horizontal-right{text-align:right}.horizontal-fill button{width:100%}.sirio-control .sirio-form-control.data-display{border-color:#e3e5e8}.sirio-control .sirio-form-control.data-display.textarea{white-space:pre;overflow:auto;height:auto;line-height:140%;min-height:3rem;padding:1rem}.sirio-control .sirio-form-control.data-display.number{font-family:Roboto Mono,monospace}.sirio-control .sirio-form-control.data-display.checkbox{display:flex;justify-content:center;align-items:center}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-control.is-disabled .sirio-input-group .sirio-input-group-text,.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text{border:0px}.sirio-control.is-readonly .sirio-form-control{background-color:#fff!important;color:#454d56}.sirio-form-control[type=number]:disabled{background-image:none}.sirio-control.light-readonly label:hover,.sirio-control.light-view div.sirio-label:hover{color:#454d56}.sirio-control.light-readonly input.sirio-form-control,.sirio-control.light-readonly .sirio-dropdown .sirio-dropdown-select,.sirio-control.light-readonly textarea.sirio-form-control,.sirio-control.light-view div.sirio-form-control{background:none!important;border:0px;padding-left:0}.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text{background:none}.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text span{color:#5b6571}.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text.prefix{padding-left:0}.sirio-upload.sirio-control.light-readonly label,.sirio-upload.sirio-control.is-disabled label{pointer-events:none}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.col-host .sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.col-host .sirio-accordion-body{overflow:unset!important}.sirio-dialog-title{display:flex;margin-top:0}.sirio-dialog-title span{margin-right:10px;margin-bottom:0!important}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-cell-value .btn-small-group{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.ag-cell-value .btn-small .sirio-btn{padding:.25rem .0625rem;margin:2px}.ag-selection-checkbox .ag-checkbox-input-wrapper.ag-disabled{display:none}ag-charts{display:block;height:100%;border-radius:8px;background-color:var(--chart-bg);border:1px solid var(--chart-border);overflow:hidden}.ag-cell.cell-component{padding:1px}.ag-cell.row-numbers-cell{text-align:center;background:#f2f6fc}.ag-header-cell.row-numbers-header .ag-header-cell-label{justify-content:center;text-align:center}\n"], dependencies: [{ kind: "component", type: DynamicFieldsComponent, selector: "app-dynamic-fields", inputs: ["rows", "formGroup", "alignment"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i14.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i14.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i14.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i14.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i14.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i14.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i15.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i15.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i15.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i15.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i15.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: AdornerDirective, selector: "[prefixAdorner], [suffixAdorner]", inputs: ["prefixAdorner", "suffixAdorner"] }, { kind: "directive", type: ReadOnlyDirective, selector: "[readonly]", inputs: ["readonly", "placeholder", "componentRef", "properties"] }, { kind: "directive", type: DisplayDirective, selector: "[hide], [show]", inputs: ["hide", "show"] }, { kind: "directive", type: FrameSecurityDirective, selector: "[frameSecurity]", inputs: ["frameSecurity"] }, { kind: "directive", type: ValidationPatchDirective, selector: "[validation]" }, { kind: "directive", type: DropdownDirective, selector: "[dropdown]" }, { kind: "directive", type: UpdateBlurDirective, selector: "[updateBlur]" }, { kind: "directive", type: RepeatDirective, selector: "[repeat], [allowAddRemove]", inputs: ["repeat", "allowAddRemove"] }, { kind: "directive", type: TabDirective, selector: "[tabCount]", inputs: ["tabCount"] }, { kind: "directive", type: GridDirective, selector: "[rowSource], [columnDefs]", inputs: ["rowSource", "columnDefs", "formGroup", "register"] }, { kind: "directive", type: ChangeDirective, selector: "[observe]", inputs: ["observe", "callback"] }, { kind: "directive", type: RegisterDirective, selector: "[register]", inputs: ["register", "componentRef"] }, { kind: "directive", type: RefreshDirective, selector: "[refresh]", inputs: ["refresh", "componentRef"] }, { kind: "directive", type: AccordionDirective, selector: "[accordionCount]", inputs: ["accordionCount"] }, { kind: "directive", type: DateDirective, selector: "[isoDate]" }, { kind: "directive", type: NumberDirective, selector: "[number]", inputs: ["defaultValue", "minimum", "maximum", "decimalDigits"] }, { kind: "directive", type: TextDirective, selector: "[textcase], [maxlength]", inputs: ["textcase", "maxlength"] }, { kind: "directive", type: TabControlDirective, selector: "[tabControl]" }, { kind: "directive", type: TabItemDirective, selector: "[tabItem]", inputs: ["componentRef", "disabled"] }, { kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["collapse"] }, { kind: "directive", type: AccordionPanelDirective, selector: "[accordionPanel]" }, { kind: "component", type: SirioInputComponent, selector: "ngx-sirio-input", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "type", "name", "placeholder", "textHelp", "textFeedback", "rows", "cols", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "role"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioSelectComponent, selector: "ngx-sirio-select", inputs: ["placeholder", "disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "isMultiple", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy"], outputs: ["focusEvent", "blurEvent", "keydownEvent"] }, { kind: "component", type: SirioSelectOptionComponent, selector: "ngx-sirio-select-option", inputs: ["value"], outputs: ["optionSelected", "blurEvent"] }, { kind: "component", type: SirioSelectPanelComponent, selector: "ngx-sirio-select-panel", outputs: ["optionSelected", "panelOpened", "panelClosed"] }, { kind: "component", type: SirioCheckboxGroupComponent, selector: "ngx-sirio-checkbox-group", inputs: ["textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioCheckboxComponent, selector: "ngx-sirio-checkbox", inputs: ["disabled", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "disabledState", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioDatepickerComponent, selector: "ngx-sirio-datepicker", inputs: ["name", "placeholder", "textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "value", "disabledState"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent", "datechangeEvent"] }, { kind: "component", type: SirioTimepickerComponent, selector: "ngx-sirio-timepicker", inputs: ["name", "label", "labelPopover", "ariaLabelPopoverButton", "placeholder", "textHelp", "textFeedback", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioRadioGroupComponent, selector: "ngx-sirio-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioRadioButtonComponent, selector: "ngx-sirio-radio-button", inputs: ["disabledState", "label", "name", "textHelp", "textFeedback", "ariaInvalid", "ariaDescribedBy", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioTabComponent, selector: "ngx-sirio-tab", inputs: ["isVertical", "isNavLine", "leftArrowLabel", "rightArrowLabel", "tabActive"], outputs: ["tabChange"] }, { kind: "component", type: SirioTabItemComponent, selector: "ngx-sirio-tab-item", inputs: ["label", "disabled", "icon"] }, { kind: "component", type: SirioAccordionComponent, selector: "ngx-sirio-accordion", inputs: ["dark"] }, { kind: "component", type: SirioAccordionPanelComponent, selector: "ngx-sirio-accordion-panel", inputs: ["active", "disabled"], outputs: ["opened", "closed"] }, { kind: "component", type: SirioAccordionHeaderComponent, selector: "ngx-sirio-accordion-header" }, { kind: "component", type: SirioAccordionBodyComponent, selector: "ngx-sirio-accordion-body" }, { kind: "component", type: SirioButtonComponent, selector: "ngx-sirio-button", inputs: ["ariaExpanded", "ariaControls", "ariaActivedescendant", "ariaHaspopup", "ariaLabel", "ariaRequired", "ariaInvalid", "ariaDescribedby", "icon", "title", "role", "color", "isFloating", "isExtended", "isLight", "isSmall", "disabled", "isDropdown", "type", "dismissType", "isBtnBlock"], outputs: ["clickEvent", "focusEvent", "blurEvent"] }, { kind: "component", type: SirioFileUploadComponent, selector: "ngx-sirio-file-upload", inputs: ["multiple", "color", "accept", "maxFiles", "showFilelist", "label", "labelPopover", "ariaLabelPopoverButton", "name", "textHelp", "textFeedback", "ariaLabel", "ariaLabelDeleteFileButton", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "fileUploadedEvent", "fileDeletedEvent", "uploadErrorEvent", "blurEvent"] }, { kind: "component", type: SirioToggleComponent, selector: "ngx-sirio-toggle", inputs: ["name", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipCheckboxGroupComponent, selector: "ngx-sirio-chip-checkbox-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipRadioGroupComponent, selector: "ngx-sirio-chip-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioInputChipComponent, selector: "ngx-sirio-input-chip", inputs: ["disabledState", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "type", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioAlertComponent, selector: "ngx-sirio-alert", inputs: ["type", "labelClose", "isVisible"], outputs: ["closeEvent"] }, { kind: "component", type: SirioAlertMessageComponent, selector: "ngx-sirio-alert-message" }, { kind: "component", type: SirioSliderComponent, selector: "ngx-sirio-slider", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "description", "min", "max", "ariaInvalid", "ariaDescribedBy", "textHelp", "textFeedback"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioNotifyComponent, selector: "ngx-sirio-notify", inputs: ["isDark"] }, { kind: "component", type: SirioNotifyBodyComponent, selector: "ngx-sirio-notify-body", inputs: ["title"] }, { kind: "directive", type: SirioTooltipDirective, selector: "[sirioTooltip]", inputs: ["sirioTooltip", "content", "hasAction", "hasPopover", "actionLabel", "actionIconClass", "clickOutside", "position", "customTemplate"], outputs: ["clickEvent"] }, { kind: "component", type: TemplateWrapperComponent, selector: "app-template-wrapper", inputs: ["template", "context"] }, { kind: "component", type: DynamicHostComponent, selector: "app-dynamic-host", inputs: ["register", "properties", "formGroup"] }, { kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "component", type: AgCharts, selector: "ag-charts", inputs: ["options"], outputs: ["onChartReady"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
552
|
+
], ngImport: i0, template: "<div [ngClass]=\"getFormAlignment()\">\r\n <ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [class]=\"getClass(component)\"\r\n [ngClass]=\"getComponentAlignment(component)\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-input type=\"text\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n [ngClass]=\"getTextAlignment(component)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"locale(Texts, 'TypeToSearch')\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-input type=\"number\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [ngClass]=\"getTextAlignment(component)\"\r\n [formControlName]=\"component.key\"\r\n number\r\n [defaultValue]=\"evaluateNumber(component.defaultValue)\"\r\n [minimum]=\"evaluateNumber(component.minimum)\"\r\n [maximum]=\"evaluateNumber(component.maximum)\"\r\n [decimalDigits]=\"evaluateNumber(component.decimalDigits)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaDateLabel') || locale(component, 'dateLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'dateLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n isoDate\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaTimeLabel') || locale(component, 'timeLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'timeLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-input type=\"textarea\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n [ngClass]=\"getTextAlignment(component)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-file-upload [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ locale(Texts, 'Upload') }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\"\r\n [rows]=\"createUploadTables(component)\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-slider [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region displayfield -->\r\n <ng-container *ngSwitchCase=\"'displayfield'\">\r\n <div class=\"sirio-control\"\r\n [ngClass]=\"[getTextAlignment(component), getLightView(component) ]\"\r\n #displayfield\r\n [register]=\"component\"\r\n [componentRef]=\"displayfield\">\r\n <div *ngIf=\"component.label\" class=\"sirio-label\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n <button *ngIf=\"component.tooltip\"\r\n sirioTooltip\r\n [content]=\"component.tooltip\"\r\n [hasPopover]=\"true\"\r\n [attr.aria-label]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n class=\"sirio-label-popover fas fa-info-circle\"></button>\r\n </div>\r\n <div class=\"sirio-form-control data-display\" [ngClass]=\"component.fieldtype\">\r\n <ng-container *ngIf=\"component.fieldtype === 'checkbox'; else defaultTemplate\">\r\n <i *ngIf=\"evaluate(component.expression)\" class=\"fas fa-check\"></i>\r\n </ng-container>\r\n <ng-template #defaultTemplate>\r\n <ng-container *ngIf=\"supportValues(component) && hasValues(component); else simpleTemplate\">\r\n <ng-container *ngIf=\"getValues(component) | async as values\">\r\n {{ toLabel(evaluate(component.expression), values) }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #simpleTemplate>\r\n {{ evaluate(component.expression) }}\r\n </ng-template>\r\n </div>\r\n <p *ngIf=\"component.description\" class=\"sirio-helper-text\">\r\n {{ evaluateString(locale(component, 'description')) }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [formArrayName]=\"component.key\"\r\n [repeat]=\"evaluateNumber(component.repetitions)\"\r\n [allowAddRemove]=\"evaluateBoolean(component.allowAddRemove)\">\r\n <p *ngIf=\"component.description\">{{ evaluateString(locale(component, 'description')) }}</p>\r\n <ng-container *ngIf=\"getFormArray(resolvePath(component.path).get(component.key)) as formArray\">\r\n <ng-container *ngIf=\"formArray.controls.length > 0\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n [tabCount]=\"formArray.controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of formArray.controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\">\r\n <ng-container *ngIf=\"i === dynamiclisttab.activeIndex\">\r\n <div>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [readOnly]=\"readOnly\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"!readOnly && component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(formArray, i, true)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"formArray.controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of formArray.controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel #panel accordionPanel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <ng-container *ngIf=\"panel.panelIsOpen\">\r\n <div>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [readOnly]=\"readOnly\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"!readOnly && component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(formArray, i, true)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <ng-container *ngFor=\"let item of formArray.controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true, 'group-outline-repeat': true }\">\r\n <div>\r\n <label *ngIf=\"component.label\">{{ evaluateString(locale(component, 'label')) + ' ' + (i + 1) }}</label>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [readOnly]=\"readOnly\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove || component.allowReorder\">\r\n <div style=\"text-align:right\">\r\n <ng-container *ngIf=\"!readOnly && component.allowReorder\">\r\n <ngx-sirio-button (click)=\"moveUpItem(formArray, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-arrow-up\">Sposta S\u00F9</ngx-sirio-button>\r\n <ngx-sirio-button (click)=\"moveDownItem(formArray, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-arrow-down\">Sposta Gi\u00F9</ngx-sirio-button>\r\n </ng-container>\r\n <ng-container *ngIf=\"!readOnly && component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"removeItem(formArray, i, true)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </ng-container> \r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!readOnly && component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addItem(formArray)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ evaluateString(locale(component, 'addLabel') || locale(Texts, 'AddItem')) }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"getGroupOutline(component)\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"resolvePath(component.path)\"\r\n [readOnly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <ngx-sirio-tab #tab\r\n [register]=\"component\"\r\n [componentRef]=\"tab\"\r\n [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n [isNavLine]=\"component.navigation\"\r\n [isVertical]=\"component.vertical\"\r\n tabControl>\r\n <ng-container *ngFor=\"let panel of component.panels; let i = index;\">\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(panel, 'label'))\"\r\n [icon]=\"evaluateString(panel.icon)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled) ?? false\"\r\n tabItem\r\n [componentRef]=\"tab\"\r\n *ngIf=\"evaluateConditional(panel.conditional)\">\r\n <ng-container *ngIf=\"getTemplate(panel.template) as template\">\r\n <div *ngIf=\"i === tab.activeIndex\">\r\n <app-dynamic-fields [formGroup]=\"resolvePath(panel.path)\"\r\n [rows]=\"template?.rows\"\r\n [readOnly]=\"readOnly || evaluateBoolean(panel.readonly)\"\r\n [alignment]=\"template?.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <ngx-sirio-accordion #accordion\r\n [register]=\"component\"\r\n [componentRef]=\"accordion\">\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ngx-sirio-accordion-panel *ngIf=\"evaluateConditional(panel.conditional)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled)\">\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(panel, 'label'))\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <div>\r\n <ng-container *ngIf=\"getTemplate(panel.template) as template\">\r\n <app-dynamic-fields [formGroup]=\"resolvePath(panel.path)\"\r\n [readOnly]=\"readOnly || evaluateBoolean(panel.readonly)\"\r\n [rows]=\"template?.rows\"\r\n [alignment]=\"template?.verticalAlignment\"></app-dynamic-fields>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [collapse]=\"component.collapseTo\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <!--Reset View Context-->\r\n <div tabindex=\"0\" style=\"display:none\"></div>\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n <ng-container *ngIf=\"component.tooltip\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [attr.aria-label]=\"locale(Texts, 'Information')\"\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'tooltip')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(locale(component, 'content')))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(locale(component, 'alt'))\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n [selectable]=\"evaluateBoolean(component.selectable)\"\r\n [multiSelect]=\"evaluateBoolean(component.multiSelect)\"\r\n (selectionChanged)=\"onGridSelectionChanged(component, $event)\"\r\n [suppressActions]=\"evaluateBoolean(component.suppressActions)\"\r\n [columnDefs]=\"component.columns || evaluate(component.columnsExpression) || []\"\r\n [rowSource]=\"getRowSource(component)\"\r\n [refresh]=\"refreshRowSource(component)\"\r\n [style.height]=\"evaluateHeight(component.height)\"\r\n [formGroup]=\"formGroup\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <div [ngClass]=\"getHorizontalAlignment(component)\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-button>\r\n </div> \r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <label [for]=\"component.id\">{{ evaluateString(locale(component, 'label')) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(locale(component, 'label'))\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"locale(Texts, 'Close')\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(locale(component, 'title'))\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <p *ngIf=\"component.title\" class=\"sirio-tooltip-heading sirio-space-down\">\r\n {{ evaluateString(locale(component, 'title')) }}\r\n </p>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region chart -->\r\n <ng-container *ngSwitchCase=\"'chart'\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <ag-charts [options]=\"(getChartOptions(component) | async) ?? {}\"\r\n [observe]=\"getChartData(component)\"\r\n [callback]=\"invalidateChart(component)\"\r\n [style.height.px]=\"component.height\"\r\n #chart\r\n [register]=\"component\"\r\n [componentRef]=\"chart\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region component -->\r\n <ng-container *ngSwitchCase=\"'component'\">\r\n <ng-container *ngIf=\"component.isInput; else noInputTemplate\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <app-dynamic-host [properties]=\"getFeelableProperties(component)\"\r\n [formGroup]=\"resolvePath(component.path)\"\r\n #componentHost\r\n [register]=\"component\"\r\n [componentRef]=\"componentHost\" />\r\n </ng-container>\r\n <ng-template #noInputTemplate>\r\n <app-dynamic-host [properties]=\"getFeelableProperties(component)\"\r\n #componentHost\r\n [register]=\"component\"\r\n [componentRef]=\"componentHost\" />\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n", styles: [".flex{display:flex}.field-set{align-items:start}.field-set>.col-host>*{margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-outline-repeat{margin-top:8px;margin-bottom:8px}.valign-start>.row{align-items:start}.valign-center>.row{align-items:center}.valign-end>.row{align-items:end}.component-start{align-self:start}.component-center{align-self:center}.component-end{align-self:end}.text-paragraph p{margin-bottom:0!important}.sirio-tab.sirio-tab-vertical .sirio-tab-body{margin-left:10px;margin-right:10px}.sirio-tab:not(.sirio-tab-vertical) .sirio-tab-body{margin-top:10px;margin-bottom:10px}.sirio-label{cursor:default}:root{--sirio-spinner-blue: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ccircle cx='50' cy='50' r='40' stroke='%2300368F' stroke-width='10' fill='none' stroke-linecap='round' stroke-dasharray='62.8 62.8' transform='rotate(-90 50 50)'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 50 50' to='360 50 50' dur='1s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/svg%3E\");--sirio-spinner-white: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ccircle cx='50' cy='50' r='40' stroke='white' stroke-width='10' fill='none' stroke-linecap='round' stroke-dasharray='62.8 62.8' transform='rotate(-90 50 50)'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 50 50' to='360 50 50' dur='1s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/svg%3E\")}.sirio-control .sirio-is-pending,.sirio-control.sirio-is-pending input.sirio-form-control,.sirio-control.sirio-is-pending .sirio-dropdown .sirio-form-control,.sirio-form-check.sirio-control.sirio-is-pending{background-image:var(--sirio-spinner-blue);background-position:right .9375rem center;background-repeat:no-repeat;background-size:1rem;padding-right:2.25rem}textarea.sirio-form-control.sirio-is-pending{background-position:top .9375rem right .9375rem}.sirio-control.sirio-is-pending input.sirio-form-control{background-position:right .9375rem top 50%}.sirio-upload.sirio-control.sirio-is-pending ngx-sirio-button .sirio-btn-primary{background-image:var(--sirio-spinner-white);background-position:right .9375rem center;background-repeat:no-repeat;background-size:1rem;padding-right:2.25rem}.sirio-control.sirio-is-pending fieldset{background-image:var(--sirio-spinner-blue);background-repeat:no-repeat;background-position:right .9375rem top 1rem;background-size:1rem;padding-right:2.25rem}.sirio-control.text-left input.sirio-form-control,.sirio-control.text-left textarea.sirio-form-control,.sirio-control.text-left div.sirio-form-control{text-align:left}.sirio-control.text-center input.sirio-form-control,.sirio-control.text-center textarea.sirio-form-control,.sirio-control.text-center div.sirio-form-control{text-align:center}.sirio-control.text-right input.sirio-form-control,.sirio-control.text-right textarea.sirio-form-control,.sirio-control.text-right div.sirio-form-control{text-align:right}.horizontal-left{text-align:left}.horizontal-center{text-align:center}.horizontal-right{text-align:right}.horizontal-fill button{width:100%}.sirio-control .sirio-form-control.data-display{border-color:#e3e5e8}.sirio-control .sirio-form-control.data-display.textarea{white-space:pre;overflow:auto;height:auto;line-height:140%;min-height:3rem;padding:1rem}.sirio-control .sirio-form-control.data-display.number{font-family:Roboto Mono,monospace}.sirio-control .sirio-form-control.data-display.checkbox{display:flex;justify-content:center;align-items:center}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-control.is-disabled .sirio-input-group .sirio-input-group-text,.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text{border:0px}.sirio-control.is-readonly .sirio-form-control{background-color:#fff!important;color:#454d56}.sirio-form-control[type=number]:disabled{background-image:none}.sirio-control.light-readonly label:hover,.sirio-control.light-view div.sirio-label:hover{color:#454d56}.sirio-control.light-readonly input.sirio-form-control,.sirio-control.light-readonly .sirio-dropdown .sirio-dropdown-select,.sirio-control.light-readonly textarea.sirio-form-control,.sirio-control.light-view div.sirio-form-control{background:none!important;border:0px;padding-left:0}.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text{background:none}.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text span{color:#5b6571}.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text.prefix{padding-left:0}.sirio-upload.sirio-control.light-readonly label,.sirio-upload.sirio-control.is-disabled label{pointer-events:none}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.col-host .sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.col-host .sirio-accordion-body{overflow:unset!important}.sirio-dialog-title{display:flex;margin-top:0}.sirio-dialog-title span{margin-right:10px;margin-bottom:0!important}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-cell-value .btn-small-group{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.ag-cell-value .btn-small .sirio-btn{padding:.25rem .0625rem;margin:2px}.ag-selection-checkbox .ag-checkbox-input-wrapper.ag-disabled{display:none}ag-charts{display:block;height:100%;border-radius:8px;background-color:var(--chart-bg);border:1px solid var(--chart-border);overflow:hidden}.ag-cell.cell-component{padding:1px}.ag-cell.row-numbers-cell{text-align:center;background:#f2f6fc}.ag-header-cell.row-numbers-header .ag-header-cell-label{justify-content:center;text-align:center}\n"], dependencies: [{ kind: "component", type: DynamicFieldsComponent, selector: "app-dynamic-fields", inputs: ["rows", "formGroup", "alignment", "readOnly"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i14.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i14.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i14.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i14.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i14.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i14.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i14.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i15.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i15.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i15.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i15.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i15.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: AdornerDirective, selector: "[prefixAdorner], [suffixAdorner]", inputs: ["prefixAdorner", "suffixAdorner"] }, { kind: "directive", type: ReadOnlyDirective, selector: "[readonly]", inputs: ["readonly", "placeholder", "componentRef", "properties"] }, { kind: "directive", type: DisplayDirective, selector: "[hide], [show]", inputs: ["hide", "show"] }, { kind: "directive", type: FrameSecurityDirective, selector: "[frameSecurity]", inputs: ["frameSecurity"] }, { kind: "directive", type: ValidationPatchDirective, selector: "[validation]" }, { kind: "directive", type: DropdownDirective, selector: "[dropdown]" }, { kind: "directive", type: UpdateBlurDirective, selector: "[updateBlur]" }, { kind: "directive", type: RepeatDirective, selector: "[repeat], [allowAddRemove]", inputs: ["repeat", "allowAddRemove"] }, { kind: "directive", type: TabDirective, selector: "[tabCount]", inputs: ["tabCount"] }, { kind: "directive", type: GridDirective, selector: "[rowSource], [columnDefs], [selectable], [multiSelect], [suppressActions]", inputs: ["rowSource", "columnDefs", "selectable", "multiSelect", "suppressActions", "formGroup", "register"] }, { kind: "directive", type: ChangeDirective, selector: "[observe]", inputs: ["observe", "callback"] }, { kind: "directive", type: RegisterDirective, selector: "[register]", inputs: ["register", "componentRef"] }, { kind: "directive", type: RefreshDirective, selector: "[refresh]", inputs: ["refresh", "componentRef"] }, { kind: "directive", type: AccordionDirective, selector: "[accordionCount]", inputs: ["accordionCount"] }, { kind: "directive", type: DateDirective, selector: "[isoDate]" }, { kind: "directive", type: NumberDirective, selector: "[number]", inputs: ["defaultValue", "minimum", "maximum", "decimalDigits"] }, { kind: "directive", type: TextDirective, selector: "[textcase], [maxlength]", inputs: ["textcase", "maxlength"] }, { kind: "directive", type: TabControlDirective, selector: "[tabControl]" }, { kind: "directive", type: TabItemDirective, selector: "[tabItem]", inputs: ["componentRef", "disabled"] }, { kind: "directive", type: CollapseDirective, selector: "[collapse]", inputs: ["collapse"] }, { kind: "directive", type: AccordionPanelDirective, selector: "[accordionPanel]" }, { kind: "component", type: SirioInputComponent, selector: "ngx-sirio-input", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "type", "name", "placeholder", "textHelp", "textFeedback", "rows", "cols", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "role"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioSelectComponent, selector: "ngx-sirio-select", inputs: ["placeholder", "disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "isMultiple", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy"], outputs: ["focusEvent", "blurEvent", "keydownEvent"] }, { kind: "component", type: SirioSelectOptionComponent, selector: "ngx-sirio-select-option", inputs: ["value"], outputs: ["optionSelected", "blurEvent"] }, { kind: "component", type: SirioSelectPanelComponent, selector: "ngx-sirio-select-panel", outputs: ["optionSelected", "panelOpened", "panelClosed"] }, { kind: "component", type: SirioCheckboxGroupComponent, selector: "ngx-sirio-checkbox-group", inputs: ["textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioCheckboxComponent, selector: "ngx-sirio-checkbox", inputs: ["disabled", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "disabledState", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioDatepickerComponent, selector: "ngx-sirio-datepicker", inputs: ["name", "placeholder", "textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "value", "disabledState"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent", "datechangeEvent"] }, { kind: "component", type: SirioTimepickerComponent, selector: "ngx-sirio-timepicker", inputs: ["name", "label", "labelPopover", "ariaLabelPopoverButton", "placeholder", "textHelp", "textFeedback", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioRadioGroupComponent, selector: "ngx-sirio-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioRadioButtonComponent, selector: "ngx-sirio-radio-button", inputs: ["disabledState", "label", "name", "textHelp", "textFeedback", "ariaInvalid", "ariaDescribedBy", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioTabComponent, selector: "ngx-sirio-tab", inputs: ["isVertical", "isNavLine", "leftArrowLabel", "rightArrowLabel", "tabActive"], outputs: ["tabChange"] }, { kind: "component", type: SirioTabItemComponent, selector: "ngx-sirio-tab-item", inputs: ["label", "disabled", "icon"] }, { kind: "component", type: SirioAccordionComponent, selector: "ngx-sirio-accordion", inputs: ["dark"] }, { kind: "component", type: SirioAccordionPanelComponent, selector: "ngx-sirio-accordion-panel", inputs: ["active", "disabled"], outputs: ["opened", "closed"] }, { kind: "component", type: SirioAccordionHeaderComponent, selector: "ngx-sirio-accordion-header" }, { kind: "component", type: SirioAccordionBodyComponent, selector: "ngx-sirio-accordion-body" }, { kind: "component", type: SirioButtonComponent, selector: "ngx-sirio-button", inputs: ["ariaExpanded", "ariaControls", "ariaActivedescendant", "ariaHaspopup", "ariaLabel", "ariaRequired", "ariaInvalid", "ariaDescribedby", "icon", "title", "role", "color", "isFloating", "isExtended", "isLight", "isSmall", "disabled", "isDropdown", "type", "dismissType", "isBtnBlock"], outputs: ["clickEvent", "focusEvent", "blurEvent"] }, { kind: "component", type: SirioFileUploadComponent, selector: "ngx-sirio-file-upload", inputs: ["multiple", "color", "accept", "maxFiles", "showFilelist", "label", "labelPopover", "ariaLabelPopoverButton", "name", "textHelp", "textFeedback", "ariaLabel", "ariaLabelDeleteFileButton", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "fileUploadedEvent", "fileDeletedEvent", "uploadErrorEvent", "blurEvent"] }, { kind: "component", type: SirioToggleComponent, selector: "ngx-sirio-toggle", inputs: ["name", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipCheckboxGroupComponent, selector: "ngx-sirio-chip-checkbox-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipRadioGroupComponent, selector: "ngx-sirio-chip-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioInputChipComponent, selector: "ngx-sirio-input-chip", inputs: ["disabledState", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "type", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioAlertComponent, selector: "ngx-sirio-alert", inputs: ["type", "labelClose", "isVisible"], outputs: ["closeEvent"] }, { kind: "component", type: SirioAlertMessageComponent, selector: "ngx-sirio-alert-message" }, { kind: "component", type: SirioSliderComponent, selector: "ngx-sirio-slider", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "description", "min", "max", "ariaInvalid", "ariaDescribedBy", "textHelp", "textFeedback"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioNotifyComponent, selector: "ngx-sirio-notify", inputs: ["isDark"] }, { kind: "component", type: SirioNotifyBodyComponent, selector: "ngx-sirio-notify-body", inputs: ["title"] }, { kind: "directive", type: SirioTooltipDirective, selector: "[sirioTooltip]", inputs: ["sirioTooltip", "content", "hasAction", "hasPopover", "actionLabel", "actionIconClass", "clickOutside", "position", "customTemplate"], outputs: ["clickEvent"] }, { kind: "component", type: TemplateWrapperComponent, selector: "app-template-wrapper", inputs: ["template", "context"] }, { kind: "component", type: DynamicHostComponent, selector: "app-dynamic-host", inputs: ["register", "properties", "formGroup"] }, { kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "component", type: AgCharts, selector: "ag-charts", inputs: ["options"], outputs: ["onChartReady"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
542
553
|
}
|
|
543
554
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicFieldsComponent, decorators: [{
|
|
544
555
|
type: Component,
|
|
@@ -563,12 +574,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
563
574
|
ProgrammabilityService,
|
|
564
575
|
GridService,
|
|
565
576
|
ChartService
|
|
566
|
-
], encapsulation: ViewEncapsulation.None, template: "<div [ngClass]=\"getFormAlignment()\">\r\n <ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [class]=\"getClass(component)\"\r\n [ngClass]=\"getComponentAlignment(component)\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-input type=\"text\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n [ngClass]=\"getTextAlignment(component)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"locale(Texts, 'TypeToSearch')\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-input type=\"number\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [ngClass]=\"getTextAlignment(component)\"\r\n [formControlName]=\"component.key\"\r\n number\r\n [defaultValue]=\"evaluateNumber(component.defaultValue)\"\r\n [minimum]=\"evaluateNumber(component.minimum)\"\r\n [maximum]=\"evaluateNumber(component.maximum)\"\r\n [decimalDigits]=\"evaluateNumber(component.decimalDigits)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaDateLabel') || locale(component, 'dateLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'dateLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n isoDate\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaTimeLabel') || locale(component, 'timeLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'timeLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-input type=\"textarea\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n [ngClass]=\"getTextAlignment(component)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-file-upload [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ locale(Texts, 'Upload') }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\"\r\n [rows]=\"createUploadTables(component)\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-slider [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region displayfield -->\r\n <ng-container *ngSwitchCase=\"'displayfield'\">\r\n <div class=\"sirio-control\"\r\n [ngClass]=\"[getTextAlignment(component), getLightView(component) ]\"\r\n #displayfield\r\n [register]=\"component\"\r\n [componentRef]=\"displayfield\">\r\n <div *ngIf=\"component.label\" class=\"sirio-label\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n <button *ngIf=\"component.tooltip\"\r\n sirioTooltip\r\n [content]=\"component.tooltip\"\r\n [hasPopover]=\"true\"\r\n [attr.aria-label]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n class=\"sirio-label-popover fas fa-info-circle\"></button>\r\n </div>\r\n <div class=\"sirio-form-control data-display\" [ngClass]=\"component.fieldType\">\r\n <ng-container *ngIf=\"component.fieldType === 'checkbox'; else defaultTemplate\">\r\n <i *ngIf=\"evaluate(component.expression)\" class=\"fas fa-check\"></i>\r\n </ng-container>\r\n <ng-template #defaultTemplate>\r\n <ng-container *ngIf=\"supportValues(component) && hasValues(component); else simpleTemplate\">\r\n <ng-container *ngIf=\"getValues(component) | async as values\">\r\n {{ toLabel(evaluate(component.expression), values) }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #simpleTemplate>\r\n {{ evaluate(component.expression) }}\r\n </ng-template>\r\n </div>\r\n <p *ngIf=\"component.description\" class=\"sirio-helper-text\">\r\n {{ evaluateString(locale(component, 'description')) }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [formArrayName]=\"component.key\"\r\n [repeat]=\"evaluateNumber(component.repetitions)\"\r\n [allowAddRemove]=\"evaluateBoolean(component.allowAddRemove)\">\r\n <p *ngIf=\"component.description\">{{ evaluateString(locale(component, 'description')) }}</p>\r\n <ng-container *ngIf=\"getFormArray(resolvePath(component.path).get(component.key)) as formArray\">\r\n <ng-container *ngIf=\"formArray.controls.length > 0\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n [tabCount]=\"formArray.controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of formArray.controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\">\r\n <ng-container *ngIf=\"i === dynamiclisttab.activeIndex\">\r\n <div>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(formArray, i, true)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"formArray.controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of formArray.controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel #panel accordionPanel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <ng-container *ngIf=\"panel.panelIsOpen\">\r\n <div>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(formArray, i, true)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <ng-container *ngFor=\"let item of formArray.controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true, 'group-outline-repeat': true }\">\r\n <div>\r\n <label *ngIf=\"component.label\">{{ evaluateString(locale(component, 'label')) + ' ' + (i + 1) }}</label>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove || component.allowReorder\">\r\n <div style=\"text-align:right\">\r\n <ng-container *ngIf=\"component.allowReorder\">\r\n <ngx-sirio-button (click)=\"moveUpItem(formArray, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-arrow-up\">Sposta S\u00F9</ngx-sirio-button>\r\n <ngx-sirio-button (click)=\"moveDownItem(formArray, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-arrow-down\">Sposta Gi\u00F9</ngx-sirio-button>\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"removeItem(formArray, i, true)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </ng-container> \r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addItem(formArray)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ evaluateString(locale(component, 'addLabel') || locale(Texts, 'AddItem')) }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"getGroupOutline(component)\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"resolvePath(component.path)\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <ngx-sirio-tab #tab\r\n [register]=\"component\"\r\n [componentRef]=\"tab\"\r\n [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n [isNavLine]=\"component.navigation\"\r\n [isVertical]=\"component.vertical\"\r\n tabControl>\r\n <ng-container *ngFor=\"let panel of component.panels; let i = index;\">\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(panel, 'label'))\"\r\n [icon]=\"evaluateString(panel.icon)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled) ?? false\"\r\n tabItem\r\n [componentRef]=\"tab\"\r\n *ngIf=\"evaluateConditional(panel.conditional)\">\r\n <ng-container *ngIf=\"getTemplate(panel.template) as template\">\r\n <div *ngIf=\"i === tab.activeIndex\">\r\n <app-dynamic-fields [formGroup]=\"resolvePath(panel.path)\"\r\n [rows]=\"template?.rows\"\r\n [alignment]=\"template?.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <ngx-sirio-accordion #accordion\r\n [register]=\"component\"\r\n [componentRef]=\"accordion\">\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ngx-sirio-accordion-panel *ngIf=\"evaluateConditional(panel.conditional)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled)\">\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(panel, 'label'))\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <div>\r\n <ng-container *ngIf=\"getTemplate(panel.template) as template\">\r\n <app-dynamic-fields [formGroup]=\"resolvePath(panel.path)\"\r\n [rows]=\"template?.rows\"\r\n [alignment]=\"template?.verticalAlignment\"></app-dynamic-fields>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [collapse]=\"component.collapseTo\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <!--Reset View Context-->\r\n <div tabindex=\"0\" style=\"display:none\"></div>\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n <ng-container *ngIf=\"component.tooltip\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [attr.aria-label]=\"locale(Texts, 'Information')\"\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'tooltip')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(locale(component, 'content')))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(locale(component, 'alt'))\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n (selectionChanged)=\"onGridSelectionChanged(component, $event)\"\r\n [columnDefs]=\"component.columns || evaluate(component.columnsExpression) || []\"\r\n [rowSource]=\"getRowSource(component)\"\r\n [refresh]=\"refreshRowSource(component)\"\r\n [style.height.px]=\"evaluateNumber(component.height)\"\r\n [formGroup]=\"formGroup\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <div [ngClass]=\"getHorizontalAlignment(component)\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-button>\r\n </div> \r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <label [for]=\"component.id\">{{ evaluateString(locale(component, 'label')) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(locale(component, 'label'))\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"locale(Texts, 'Close')\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(locale(component, 'title'))\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <p *ngIf=\"component.title\" class=\"sirio-tooltip-heading sirio-space-down\">\r\n {{ evaluateString(locale(component, 'title')) }}\r\n </p>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region chart -->\r\n <ng-container *ngSwitchCase=\"'chart'\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <ag-charts [options]=\"(getChartOptions(component) | async) ?? {}\"\r\n [observe]=\"getChartData(component)\"\r\n [callback]=\"invalidateChart(component)\"\r\n [style.height.px]=\"component.height\"\r\n #chart\r\n [register]=\"component\"\r\n [componentRef]=\"chart\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region component -->\r\n <ng-container *ngSwitchCase=\"'component'\">\r\n <ng-container *ngIf=\"component.isInput; else noInputTemplate\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <app-dynamic-host [properties]=\"getFeelableProperties(component)\"\r\n [formGroup]=\"resolvePath(component.path)\"\r\n #componentHost\r\n [register]=\"component\"\r\n [componentRef]=\"componentHost\" />\r\n </ng-container>\r\n <ng-template #noInputTemplate>\r\n <app-dynamic-host [properties]=\"getFeelableProperties(component)\"\r\n #componentHost\r\n [register]=\"component\"\r\n [componentRef]=\"componentHost\" />\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n", styles: [".flex{display:flex}.field-set{align-items:start}.field-set>.col-host>*{margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-outline-repeat{margin-top:8px;margin-bottom:8px}.valign-start>.row{align-items:start}.valign-center>.row{align-items:center}.valign-end>.row{align-items:end}.component-start{align-self:start}.component-center{align-self:center}.component-end{align-self:end}.text-paragraph p{margin-bottom:0!important}.sirio-tab.sirio-tab-vertical .sirio-tab-body{margin-left:10px;margin-right:10px}.sirio-tab:not(.sirio-tab-vertical) .sirio-tab-body{margin-top:10px;margin-bottom:10px}.sirio-label{cursor:default}.sirio-control.text-left input.sirio-form-control,.sirio-control.text-left textarea.sirio-form-control,.sirio-control.text-left div.sirio-form-control{text-align:left}.sirio-control.text-center input.sirio-form-control,.sirio-control.text-center textarea.sirio-form-control,.sirio-control.text-center div.sirio-form-control{text-align:center}.sirio-control.text-right input.sirio-form-control,.sirio-control.text-right textarea.sirio-form-control,.sirio-control.text-right div.sirio-form-control{text-align:right}.horizontal-left{text-align:left}.horizontal-center{text-align:center}.horizontal-right{text-align:right}.horizontal-fill button{width:100%}.sirio-control .sirio-form-control.data-display{border-color:#e3e5e8}.sirio-control .sirio-form-control.data-display.textarea{white-space:pre;overflow:auto;height:auto;line-height:140%;min-height:3rem;padding:1rem}.sirio-control .sirio-form-control.data-display.number{font-family:Roboto Mono,monospace}.sirio-control .sirio-form-control.data-display.checkbox{display:flex;justify-content:center;align-items:center}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-control.is-disabled .sirio-input-group .sirio-input-group-text,.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text{border:0px}.sirio-control.is-readonly .sirio-form-control{background-color:#fff!important;color:#454d56}.sirio-form-control[type=number]:disabled{background-image:none}.sirio-control.light-readonly label:hover,.sirio-control.light-view div.sirio-label:hover{color:#454d56}.sirio-control.light-readonly input.sirio-form-control,.sirio-control.light-readonly .sirio-dropdown .sirio-dropdown-select,.sirio-control.light-readonly textarea.sirio-form-control,.sirio-control.light-view div.sirio-form-control{background:none!important;border:0px;padding-left:0}.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text{background:none}.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text span{color:#5b6571}.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text.prefix{padding-left:0}.sirio-upload.sirio-control.light-readonly label,.sirio-upload.sirio-control.is-disabled label{pointer-events:none}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.col-host .sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.col-host .sirio-accordion-body{overflow:unset!important}.sirio-dialog-title{display:flex;margin-top:0}.sirio-dialog-title span{margin-right:10px;margin-bottom:0!important}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-cell-value .btn-small-group{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.ag-cell-value .btn-small .sirio-btn{padding:.25rem .0625rem;margin:2px}.ag-selection-checkbox .ag-checkbox-input-wrapper.ag-disabled{display:none}ag-charts{display:block;height:100%;border-radius:8px;background-color:var(--chart-bg);border:1px solid var(--chart-border);overflow:hidden}.ag-cell.cell-component{padding:1px}.ag-cell.row-numbers-cell{text-align:center;background:#f2f6fc}.ag-header-cell.row-numbers-header .ag-header-cell-label{justify-content:center;text-align:center}\n"] }]
|
|
567
|
-
}], ctorParameters: () => [{ type: i1.SanitizeService }, { type: i2.MarkdownService }, { type: i3.MimeService }, { type: i4.ProgrammabilityService }, { type: i5.WeakService }, { type: i6.RegisterService }, { type: i7.MetadataService }, { type: i8.LanguageService }, { type: i9.GlobalService }, { type: i10.FormService }, { type: i11.GridService }, { type: i12.ChartService }, { type: i13.DialogService }, { type: i0.ElementRef }
|
|
577
|
+
], encapsulation: ViewEncapsulation.None, template: "<div [ngClass]=\"getFormAlignment()\">\r\n <ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [class]=\"getClass(component)\"\r\n [ngClass]=\"getComponentAlignment(component)\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-input type=\"text\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n [ngClass]=\"getTextAlignment(component)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"locale(Texts, 'TypeToSearch')\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-select [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ locale(option, 'label') }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-input type=\"number\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [ngClass]=\"getTextAlignment(component)\"\r\n [formControlName]=\"component.key\"\r\n number\r\n [defaultValue]=\"evaluateNumber(component.defaultValue)\"\r\n [minimum]=\"evaluateNumber(component.minimum)\"\r\n [maximum]=\"evaluateNumber(component.maximum)\"\r\n [decimalDigits]=\"evaluateNumber(component.decimalDigits)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaDateLabel') || locale(component, 'dateLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'dateLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n isoDate\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker [ariaLabel]=\"evaluateString(locale(component, 'ariaTimeLabel') || locale(component, 'timeLabel'))\"\r\n [label]=\"evaluateString(locale(component, 'timeLabel'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [refresh]=\"refreshValues(component)\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ locale(option, 'label') }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-input type=\"textarea\"\r\n [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [placeholder]=\"locale(component, 'placeholder') || ''\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n [textcase]=\"component.textCase\"\r\n [maxlength]=\"evaluateNumber(component.maxLength)\"\r\n [ngClass]=\"getTextAlignment(component)\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-file-upload [ariaLabel]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ locale(Texts, 'Upload') }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\"\r\n [rows]=\"createUploadTables(component)\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ngx-sirio-slider [label]=\"evaluateString(locale(component, 'label'))\"\r\n [labelPopover]=\"evaluateString(locale(component, 'tooltip'))\"\r\n [textHelp]=\"evaluateString(locale(component, 'description'))\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [properties]=\"component.properties\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region displayfield -->\r\n <ng-container *ngSwitchCase=\"'displayfield'\">\r\n <div class=\"sirio-control\"\r\n [ngClass]=\"[getTextAlignment(component), getLightView(component) ]\"\r\n #displayfield\r\n [register]=\"component\"\r\n [componentRef]=\"displayfield\">\r\n <div *ngIf=\"component.label\" class=\"sirio-label\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n <button *ngIf=\"component.tooltip\"\r\n sirioTooltip\r\n [content]=\"component.tooltip\"\r\n [hasPopover]=\"true\"\r\n [attr.aria-label]=\"evaluateString(locale(component, 'ariaLabel') || locale(component, 'label'))\"\r\n class=\"sirio-label-popover fas fa-info-circle\"></button>\r\n </div>\r\n <div class=\"sirio-form-control data-display\" [ngClass]=\"component.fieldtype\">\r\n <ng-container *ngIf=\"component.fieldtype === 'checkbox'; else defaultTemplate\">\r\n <i *ngIf=\"evaluate(component.expression)\" class=\"fas fa-check\"></i>\r\n </ng-container>\r\n <ng-template #defaultTemplate>\r\n <ng-container *ngIf=\"supportValues(component) && hasValues(component); else simpleTemplate\">\r\n <ng-container *ngIf=\"getValues(component) | async as values\">\r\n {{ toLabel(evaluate(component.expression), values) }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template #simpleTemplate>\r\n {{ evaluate(component.expression) }}\r\n </ng-template>\r\n </div>\r\n <p *ngIf=\"component.description\" class=\"sirio-helper-text\">\r\n {{ evaluateString(locale(component, 'description')) }}\r\n </p>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\" [formGroup]=\"resolvePath(component.path)\">\r\n <ng-container [formArrayName]=\"component.key\"\r\n [repeat]=\"evaluateNumber(component.repetitions)\"\r\n [allowAddRemove]=\"evaluateBoolean(component.allowAddRemove)\">\r\n <p *ngIf=\"component.description\">{{ evaluateString(locale(component, 'description')) }}</p>\r\n <ng-container *ngIf=\"getFormArray(resolvePath(component.path).get(component.key)) as formArray\">\r\n <ng-container *ngIf=\"formArray.controls.length > 0\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n [tabCount]=\"formArray.controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of formArray.controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\">\r\n <ng-container *ngIf=\"i === dynamiclisttab.activeIndex\">\r\n <div>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [readOnly]=\"readOnly\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"!readOnly && component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(formArray, i, true)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"formArray.controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of formArray.controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel #panel accordionPanel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(component, 'label')) + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <ng-container *ngIf=\"panel.panelIsOpen\">\r\n <div>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [readOnly]=\"readOnly\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"!readOnly && component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(formArray, i, true)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <ng-container *ngFor=\"let item of formArray.controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true, 'group-outline-repeat': true }\">\r\n <div>\r\n <label *ngIf=\"component.label\">{{ evaluateString(locale(component, 'label')) + ' ' + (i + 1) }}</label>\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\"\r\n [readOnly]=\"readOnly\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove || component.allowReorder\">\r\n <div style=\"text-align:right\">\r\n <ng-container *ngIf=\"!readOnly && component.allowReorder\">\r\n <ngx-sirio-button (click)=\"moveUpItem(formArray, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-arrow-up\">Sposta S\u00F9</ngx-sirio-button>\r\n <ngx-sirio-button (click)=\"moveDownItem(formArray, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-arrow-down\">Sposta Gi\u00F9</ngx-sirio-button>\r\n </ng-container>\r\n <ng-container *ngIf=\"!readOnly && component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"removeItem(formArray, i, true)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ evaluateString(locale(component, 'removeLabel') || locale(Texts, 'RemoveItem')) }}</ngx-sirio-button>\r\n </ng-container> \r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!readOnly && component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addItem(formArray)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ evaluateString(locale(component, 'addLabel') || locale(Texts, 'AddItem')) }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"getGroupOutline(component)\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"resolvePath(component.path)\"\r\n [readOnly]=\"readOnly || evaluateBoolean(component.readonly)\"\r\n [rows]=\"component.rows\"\r\n [alignment]=\"component.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <ngx-sirio-tab #tab\r\n [register]=\"component\"\r\n [componentRef]=\"tab\"\r\n [leftArrowLabel]=\"locale(Texts, 'ScrollLeft')\"\r\n [rightArrowLabel]=\"locale(Texts, 'ScrollRight')\"\r\n [isNavLine]=\"component.navigation\"\r\n [isVertical]=\"component.vertical\"\r\n tabControl>\r\n <ng-container *ngFor=\"let panel of component.panels; let i = index;\">\r\n <ngx-sirio-tab-item [label]=\"evaluateString(locale(panel, 'label'))\"\r\n [icon]=\"evaluateString(panel.icon)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled) ?? false\"\r\n tabItem\r\n [componentRef]=\"tab\"\r\n *ngIf=\"evaluateConditional(panel.conditional)\">\r\n <ng-container *ngIf=\"getTemplate(panel.template) as template\">\r\n <div *ngIf=\"i === tab.activeIndex\">\r\n <app-dynamic-fields [formGroup]=\"resolvePath(panel.path)\"\r\n [rows]=\"template?.rows\"\r\n [readOnly]=\"readOnly || evaluateBoolean(panel.readonly)\"\r\n [alignment]=\"template?.verticalAlignment\"></app-dynamic-fields>\r\n </div>\r\n </ng-container>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <ngx-sirio-accordion #accordion\r\n [register]=\"component\"\r\n [componentRef]=\"accordion\">\r\n <ng-container *ngFor=\"let panel of component.panels\">\r\n <ngx-sirio-accordion-panel *ngIf=\"evaluateConditional(panel.conditional)\"\r\n [disabled]=\"evaluateBoolean(panel.disabled)\">\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"evaluateString(locale(panel, 'label'))\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <div>\r\n <ng-container *ngIf=\"getTemplate(panel.template) as template\">\r\n <app-dynamic-fields [formGroup]=\"resolvePath(panel.path)\"\r\n [readOnly]=\"readOnly || evaluateBoolean(panel.readonly)\"\r\n [rows]=\"template?.rows\"\r\n [alignment]=\"template?.verticalAlignment\"></app-dynamic-fields>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [collapse]=\"component.collapseTo\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <!--Reset View Context-->\r\n <div tabindex=\"0\" style=\"display:none\"></div>\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n <ng-container *ngIf=\"component.tooltip\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [attr.aria-label]=\"locale(Texts, 'Information')\"\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'tooltip')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(locale(component, 'content')))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(locale(component, 'alt'))\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n [selectable]=\"evaluateBoolean(component.selectable)\"\r\n [multiSelect]=\"evaluateBoolean(component.multiSelect)\"\r\n (selectionChanged)=\"onGridSelectionChanged(component, $event)\"\r\n [suppressActions]=\"evaluateBoolean(component.suppressActions)\"\r\n [columnDefs]=\"component.columns || evaluate(component.columnsExpression) || []\"\r\n [rowSource]=\"getRowSource(component)\"\r\n [refresh]=\"refreshRowSource(component)\"\r\n [style.height]=\"evaluateHeight(component.height)\"\r\n [formGroup]=\"formGroup\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <div [ngClass]=\"getHorizontalAlignment(component)\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(locale(component, 'label')) }}\r\n </ngx-sirio-button>\r\n </div> \r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <label [for]=\"component.id\">{{ evaluateString(locale(component, 'label')) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(locale(component, 'label'))\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"locale(Texts, 'Close')\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(locale(component, 'title'))\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <p *ngIf=\"component.title\" class=\"sirio-tooltip-heading sirio-space-down\">\r\n {{ evaluateString(locale(component, 'title')) }}\r\n </p>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(locale(component, 'text')))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region chart -->\r\n <ng-container *ngSwitchCase=\"'chart'\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <ag-charts [options]=\"(getChartOptions(component) | async) ?? {}\"\r\n [observe]=\"getChartData(component)\"\r\n [callback]=\"invalidateChart(component)\"\r\n [style.height.px]=\"component.height\"\r\n #chart\r\n [register]=\"component\"\r\n [componentRef]=\"chart\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region component -->\r\n <ng-container *ngSwitchCase=\"'component'\">\r\n <ng-container *ngIf=\"component.isInput; else noInputTemplate\">\r\n <label>{{ evaluateString(locale(component, 'label')) }}</label>\r\n <app-dynamic-host [properties]=\"getFeelableProperties(component)\"\r\n [formGroup]=\"resolvePath(component.path)\"\r\n #componentHost\r\n [register]=\"component\"\r\n [componentRef]=\"componentHost\" />\r\n </ng-container>\r\n <ng-template #noInputTemplate>\r\n <app-dynamic-host [properties]=\"getFeelableProperties(component)\"\r\n #componentHost\r\n [register]=\"component\"\r\n [componentRef]=\"componentHost\" />\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n", styles: [".flex{display:flex}.field-set{align-items:start}.field-set>.col-host>*{margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-outline-repeat{margin-top:8px;margin-bottom:8px}.valign-start>.row{align-items:start}.valign-center>.row{align-items:center}.valign-end>.row{align-items:end}.component-start{align-self:start}.component-center{align-self:center}.component-end{align-self:end}.text-paragraph p{margin-bottom:0!important}.sirio-tab.sirio-tab-vertical .sirio-tab-body{margin-left:10px;margin-right:10px}.sirio-tab:not(.sirio-tab-vertical) .sirio-tab-body{margin-top:10px;margin-bottom:10px}.sirio-label{cursor:default}:root{--sirio-spinner-blue: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ccircle cx='50' cy='50' r='40' stroke='%2300368F' stroke-width='10' fill='none' stroke-linecap='round' stroke-dasharray='62.8 62.8' transform='rotate(-90 50 50)'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 50 50' to='360 50 50' dur='1s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/svg%3E\");--sirio-spinner-white: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ccircle cx='50' cy='50' r='40' stroke='white' stroke-width='10' fill='none' stroke-linecap='round' stroke-dasharray='62.8 62.8' transform='rotate(-90 50 50)'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 50 50' to='360 50 50' dur='1s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/svg%3E\")}.sirio-control .sirio-is-pending,.sirio-control.sirio-is-pending input.sirio-form-control,.sirio-control.sirio-is-pending .sirio-dropdown .sirio-form-control,.sirio-form-check.sirio-control.sirio-is-pending{background-image:var(--sirio-spinner-blue);background-position:right .9375rem center;background-repeat:no-repeat;background-size:1rem;padding-right:2.25rem}textarea.sirio-form-control.sirio-is-pending{background-position:top .9375rem right .9375rem}.sirio-control.sirio-is-pending input.sirio-form-control{background-position:right .9375rem top 50%}.sirio-upload.sirio-control.sirio-is-pending ngx-sirio-button .sirio-btn-primary{background-image:var(--sirio-spinner-white);background-position:right .9375rem center;background-repeat:no-repeat;background-size:1rem;padding-right:2.25rem}.sirio-control.sirio-is-pending fieldset{background-image:var(--sirio-spinner-blue);background-repeat:no-repeat;background-position:right .9375rem top 1rem;background-size:1rem;padding-right:2.25rem}.sirio-control.text-left input.sirio-form-control,.sirio-control.text-left textarea.sirio-form-control,.sirio-control.text-left div.sirio-form-control{text-align:left}.sirio-control.text-center input.sirio-form-control,.sirio-control.text-center textarea.sirio-form-control,.sirio-control.text-center div.sirio-form-control{text-align:center}.sirio-control.text-right input.sirio-form-control,.sirio-control.text-right textarea.sirio-form-control,.sirio-control.text-right div.sirio-form-control{text-align:right}.horizontal-left{text-align:left}.horizontal-center{text-align:center}.horizontal-right{text-align:right}.horizontal-fill button{width:100%}.sirio-control .sirio-form-control.data-display{border-color:#e3e5e8}.sirio-control .sirio-form-control.data-display.textarea{white-space:pre;overflow:auto;height:auto;line-height:140%;min-height:3rem;padding:1rem}.sirio-control .sirio-form-control.data-display.number{font-family:Roboto Mono,monospace}.sirio-control .sirio-form-control.data-display.checkbox{display:flex;justify-content:center;align-items:center}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-control.is-disabled .sirio-input-group .sirio-input-group-text,.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text{border:0px}.sirio-control.is-readonly .sirio-form-control{background-color:#fff!important;color:#454d56}.sirio-form-control[type=number]:disabled{background-image:none}.sirio-control.light-readonly label:hover,.sirio-control.light-view div.sirio-label:hover{color:#454d56}.sirio-control.light-readonly input.sirio-form-control,.sirio-control.light-readonly .sirio-dropdown .sirio-dropdown-select,.sirio-control.light-readonly textarea.sirio-form-control,.sirio-control.light-view div.sirio-form-control{background:none!important;border:0px;padding-left:0}.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text{background:none}.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text span{color:#5b6571}.sirio-control.light-readonly .sirio-input-group .sirio-input-group-text.prefix{padding-left:0}.sirio-upload.sirio-control.light-readonly label,.sirio-upload.sirio-control.is-disabled label{pointer-events:none}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.col-host .sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.col-host .sirio-accordion-body{overflow:unset!important}.sirio-dialog-title{display:flex;margin-top:0}.sirio-dialog-title span{margin-right:10px;margin-bottom:0!important}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-cell-value .btn-small-group{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.ag-cell-value .btn-small .sirio-btn{padding:.25rem .0625rem;margin:2px}.ag-selection-checkbox .ag-checkbox-input-wrapper.ag-disabled{display:none}ag-charts{display:block;height:100%;border-radius:8px;background-color:var(--chart-bg);border:1px solid var(--chart-border);overflow:hidden}.ag-cell.cell-component{padding:1px}.ag-cell.row-numbers-cell{text-align:center;background:#f2f6fc}.ag-header-cell.row-numbers-header .ag-header-cell-label{justify-content:center;text-align:center}\n"] }]
|
|
578
|
+
}], ctorParameters: () => [{ type: i1.SanitizeService }, { type: i2.MarkdownService }, { type: i3.MimeService }, { type: i4.ProgrammabilityService }, { type: i5.WeakService }, { type: i6.RegisterService }, { type: i7.MetadataService }, { type: i8.LanguageService }, { type: i9.GlobalService }, { type: i10.FormService }, { type: i11.GridService }, { type: i12.ChartService }, { type: i13.DialogService }, { type: i0.ElementRef }], propDecorators: { rows: [{
|
|
568
579
|
type: Input
|
|
569
580
|
}], formGroup: [{
|
|
570
581
|
type: Input
|
|
571
582
|
}], alignment: [{
|
|
572
583
|
type: Input
|
|
584
|
+
}], readOnly: [{
|
|
585
|
+
type: Input
|
|
573
586
|
}] } });
|
|
574
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsaUJBQWlCLEVBQWdELE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJbEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSS9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEQsT0FBTyxFQUNMLG1CQUFtQixFQUNqQixvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSx5QkFBeUIsRUFDM0UsMkJBQTJCLEVBQUUsc0JBQXNCLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQ3ZHLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUM3Rix1QkFBdUIsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBRSwyQkFBMkIsRUFDakgsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQzlDLG9CQUFvQixFQUFFLCtCQUErQixFQUFFLDRCQUE0QixFQUFFLHVCQUF1QixFQUM1RyxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBRSxvQkFBb0IsRUFDckUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsd0JBQXdCLEVBQ3BHLHFCQUFxQixFQUV4QixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSTdDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUM5QyxNQUFNLE9BQU8sc0JBQXNCO0lBT2I7SUFDUjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBcEJILElBQUksQ0FBeUI7SUFDN0IsU0FBUyxDQUFhO0lBQ3RCLFNBQVMsR0FBVyxFQUFFLENBQUM7SUFFaEMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUVkLFlBQW9CLFNBQTBCLEVBQ2xDLFFBQXlCLEVBQ3pCLElBQWlCLEVBQ2pCLGVBQXVDLEVBQ3ZDLElBQWlCLEVBQ2pCLFFBQXlCLEVBQ3pCLFFBQXlCLEVBQ3pCLGVBQWdDLEVBQ2hDLE1BQXFCLEVBQ3JCLFdBQXdCLEVBQ3hCLElBQWlCLEVBQ2pCLEtBQW1CLEVBQ25CLE1BQXFCLEVBQ3JCLEVBQWMsRUFDZCxHQUFzQjtRQWRkLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQ2xDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLFFBQUcsR0FBSCxHQUFHLENBQW1CO0lBR2xDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsZUFBZTtRQUNiLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsUUFBUSxDQUFDLFNBQWM7UUFDckIsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDO1FBQzVCLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM5QixPQUFPLE9BQU8sR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7UUFDekQsQ0FBQzthQUNJLENBQUM7WUFDSixPQUFPLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsU0FBYztRQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RixPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUNqRCxDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTLENBQUMsU0FBYztRQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RixPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQTtJQUMxRSxDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQWMsRUFBRSxHQUFXO1FBQ2hDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxjQUFjLENBQUMsS0FBb0I7UUFDakMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBOEI7UUFDNUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBNkI7UUFDMUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBb0I7UUFDOUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RSxNQUFNLFFBQVEsR0FBRyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQ25ELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBb0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFtQixFQUFFLFlBQXFCLElBQUk7UUFDckQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRTtZQUN6RCxTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQW9CO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLEtBQUssR0FBRyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQ25ELElBQUksS0FBSyxLQUFLLE9BQU87Z0JBQ25CLE9BQU8sSUFBSSxDQUFDO1lBQ2QsTUFBTSxXQUFXLEdBQW1CLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDckcsT0FBTyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUUsS0FBc0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzNGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLFdBQWdCO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXJELE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBYTtRQUN2QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBK0I7UUFDMUMsSUFBSSxDQUFDLENBQUMsT0FBTyxZQUFZLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQStCO1FBQzFDLElBQUksQ0FBQyxDQUFDLE9BQU8sWUFBWSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFtQjtRQUM3QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFZO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLGFBQWEsSUFBSSxHQUFHLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDbkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFBLENBQUM7SUFFRixRQUFRLENBQUMsSUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUFBLENBQUM7SUFFRixZQUFZLENBQUMsVUFBa0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQUEsQ0FBQztJQUVGLFdBQVcsQ0FBQyxTQUFjLEVBQUUsS0FBVTtRQUNwQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsU0FBYztRQUN0QixJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzdCLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsU0FBUyxDQUFDO1FBQzFELE9BQU8sQ0FDTCxZQUFZLENBQUMsTUFBTSxDQUFDO1lBQ3BCLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDdkIsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQy9CLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxDQUFDLFNBQWM7UUFDdEIsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckIsU0FBUztZQUNULE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QixDQUFDO2FBQ0ksSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDN0IsY0FBYztZQUNkLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDO2FBQ0ksSUFBSSxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNwQyxhQUFhO1lBQ2IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN6RCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQzthQUNJLENBQUM7WUFDSixVQUFVO1lBQ1YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLFNBQWM7UUFDMUIsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkMsQ0FBQztpQkFDSSxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVUsRUFBRSxJQUEwQztRQUM1RCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNuQyxDQUFDLENBQUE7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQzthQUNJLENBQUM7WUFDSixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxTQUFjO1FBQzFCLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDN0IsT0FBTyxTQUFTLENBQUMsU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsZUFBZSxDQUFDLFNBQWM7UUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFDL0QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxlQUFlLENBQUMsU0FBYztRQUM1QixPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFjO1FBQ3pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxjQUFjLENBQUMsU0FBYztRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUM5RCxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELGNBQWMsQ0FBQyxTQUFjO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsc0JBQXNCLENBQUMsU0FBYyxFQUFFLEtBQVU7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsWUFBWSxDQUFDLFNBQWM7UUFDekIsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDekIsYUFBYTtZQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELENBQUM7YUFDSSxDQUFDO1lBQ0osVUFBVTtZQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQWM7UUFDN0IsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLENBQUMsU0FBb0I7UUFDekIsU0FBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQW9CLEVBQUUsS0FBYSxFQUFFLFdBQW9CO1FBQ2xFLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEVBQUU7Z0JBQ3ZELE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUM7Z0JBQ3RDLFNBQVMsRUFBRSxlQUFlO2dCQUMxQixVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDckIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRSxDQUFDO3dCQUM1QixTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM1QixDQUFDO2dCQUNILENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQ0ksQ0FBQztZQUNKLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsU0FBb0IsRUFBRSxLQUFhO1FBQzVDLE1BQU0sT0FBTyxHQUFvQixTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBb0IsRUFBRSxLQUFhO1FBQzlDLE1BQU0sT0FBTyxHQUFvQixTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxTQUFjO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtZQUMxRCxPQUFPO2dCQUNMO29CQUNFLFVBQVUsRUFBRTt3QkFDVjs0QkFDRSxNQUFNLEVBQUUsT0FBTzs0QkFDZixRQUFRLEVBQUU7Z0NBQ1IsU0FBUyxFQUFFLElBQUk7NkJBQ2hCOzRCQUNELFNBQVMsRUFBRTtnQ0FDVDtvQ0FDRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO29DQUNuQyxLQUFLLEVBQUUsTUFBTTtvQ0FDYixNQUFNLEVBQUUsQ0FBQztpQ0FDVjtnQ0FDRDtvQ0FDRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO29DQUNuQyxLQUFLLEVBQUUsTUFBTTtvQ0FDYixRQUFRLEVBQUUsU0FBUztvQ0FDbkIsT0FBTyxFQUFFLE9BQU87aUNBQ2pCO2dDQUNEO29DQUNFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7b0NBQ25DLEtBQUssRUFBRSxNQUFNO2lDQUNkO2dDQUNEO29DQUNFLEtBQUssRUFBRSxLQUFLO29DQUNaLE9BQU8sRUFBRSxFQUFFO29DQUNYLE9BQU8sRUFBRSxFQUFFO29DQUNYLE9BQU8sRUFBRSxRQUFRO29DQUNqQixRQUFRLEVBQUUsV0FBVztpQ0FDdEI7Z0NBQ0Q7b0NBQ0UsT0FBTyxFQUFFLEVBQUU7b0NBQ1gsT0FBTyxFQUFFLEVBQUU7b0NBQ1gsT0FBTyxFQUFFLFFBQVE7b0NBQ2pCLFFBQVEsRUFBRSxXQUFXO2lDQUN0Qjs2QkFDRjs0QkFDRCxZQUFZLEVBQUUsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHOzRCQUNqQyxRQUFRLEVBQUUsR0FBRzs0QkFDYixhQUFhLEVBQUUsU0FBUyxDQUFDLFdBQVc7NEJBQ3BDLFVBQVUsRUFBRSxTQUFTLENBQUMsUUFBUTt5QkFDL0I7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQStDO1FBQzFELE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBVSxFQUFFLEVBQUU7WUFDaEMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM3QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ25FLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQixPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUE7UUFFRCxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQ2xDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUN4QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7d0JBQ3BDLEtBQUssRUFBRTs0QkFDTCxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ25CLENBQUM7d0JBQ0QsUUFBUSxFQUFFLEtBQUs7d0JBQ2YsVUFBVSxFQUFFLEtBQUs7cUJBQ2xCLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQscUJBQXFCLENBQUMsU0FBYztRQUNsQyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQ3hDLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDeEYsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNqRSxDQUFDO2FBQ0ksQ0FBQztZQUNKLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsU0FBYztRQUM1QixPQUFPO1lBQ0wsZUFBZSxFQUFFLFNBQVMsQ0FBQyxXQUFXLEtBQUssSUFBSTtTQUNoRCxDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELHFCQUFxQixDQUFDLFNBQWM7UUFDbEMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBYztRQUM3QixRQUFRLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM1QixLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU8sV0FBVyxDQUFBO1lBQy9CLEtBQUssUUFBUSxDQUFDLENBQUMsT0FBTyxhQUFhLENBQUE7WUFDbkMsS0FBSyxPQUFPLENBQUMsQ0FBQyxPQUFPLFlBQVksQ0FBQTtZQUNqQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLFNBQWM7UUFDbkMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLG1CQUFtQixDQUFDO1FBQ2hELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQztRQUM5QixPQUFPO1lBQ0wsQ0FBQyxHQUFHLFFBQVEsT0FBTyxDQUFDLEVBQUUsU0FBUyxLQUFLLE1BQU07WUFDMUMsQ0FBQyxHQUFHLFFBQVEsU0FBUyxDQUFDLEVBQUUsU0FBUyxLQUFLLFFBQVE7WUFDOUMsQ0FBQyxHQUFHLFFBQVEsUUFBUSxDQUFDLEVBQUUsU0FBUyxLQUFLLE9BQU87WUFDNUMsQ0FBQyxHQUFHLFFBQVEsT0FBTyxDQUFDLEVBQUUsU0FBUyxLQUFLLE1BQU07U0FDM0MsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBYztRQUN6QixNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0I7ZUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEQsSUFBSSxLQUFLLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxJQUFJO1lBQ25DLE9BQU8sU0FBUyxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFTyxNQUFNLEdBQW9CLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUV6QyxJQUFZLFFBQVE7UUFDbEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUFnQixFQUFFLFNBQWlCO1FBQzNELE9BQU87WUFDTCxDQUFDLEdBQUcsUUFBUSxRQUFRLENBQUMsRUFBRSxTQUFTLEtBQUssT0FBTztZQUM1QyxDQUFDLEdBQUcsUUFBUSxTQUFTLENBQUMsRUFBRSxTQUFTLEtBQUssUUFBUTtZQUM5QyxDQUFDLEdBQUcsUUFBUSxNQUFNLENBQUMsRUFBRSxTQUFTLEtBQUssS0FBSztTQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFtQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxJQUFtQjtRQUM1QyxNQUFNLE9BQU8sR0FBRyxJQUFJO1lBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDMUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFbkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsSUFBSSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDekcsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQzlELDBFQUEwRSxDQUMzRSxDQUFDO1FBRUYsS0FBSyxJQUFJLEVBQUUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBRSxFQUFrQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxFQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM1QixNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQVU7UUFDaEMsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVPLG1CQUFtQjtRQUN4QixVQUFVLENBQUMsT0FBZSxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ2xDLElBQUksRUFBRTtnQkFDSixVQUFVO2dCQUNWLFFBQVE7Z0JBQ1IsU0FBUztnQkFDVCxXQUFXO2dCQUNYLFNBQVM7Z0JBQ1QsU0FBUztnQkFDVCxRQUFRO2FBQ1Q7WUFDRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7WUFDMUQsTUFBTSxFQUFFO2dCQUNOLFNBQVM7Z0JBQ1QsVUFBVTtnQkFDVixPQUFPO2dCQUNQLFFBQVE7Z0JBQ1IsUUFBUTtnQkFDUixRQUFRO2dCQUNSLFFBQVE7Z0JBQ1IsUUFBUTtnQkFDUixXQUFXO2dCQUNYLFNBQVM7Z0JBQ1QsVUFBVTtnQkFDVixVQUFVO2FBQ1g7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsS0FBSztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7Z0JBQ0wsS0FBSztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7Z0JBQ0wsS0FBSztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7Z0JBQ0wsS0FBSztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7YUFDTjtZQUNELEtBQUssRUFBRSxNQUFNO1lBQ2IsS0FBSyxFQUFFLFNBQVM7WUFDaEIsTUFBTSxFQUFFLFlBQVk7WUFDcEIsU0FBUyxFQUFFLENBQUM7U0FDYixDQUFDO0lBQ0osQ0FBQztJQUFBLENBQUM7d0dBL2dCUyxzQkFBc0I7NEZBQXRCLHNCQUFzQiwySUFSdEI7WUFDVCxlQUFlO1lBQ2Ysc0JBQXNCO1lBQ3RCLFdBQVc7WUFDWCxZQUFZO1NBQ2IsMEJDbEdILHd3dERBdXpCQSw0aFFEbHRCYSxzQkFBc0IsMEdBekJ2QixZQUFZLHFxQkFBRSxtQkFBbUIsNDhCQUN2QyxnQkFBZ0IseUhBQUUsaUJBQWlCLDBIQUFFLGdCQUFnQixxRkFBRSxzQkFBc0IsdUZBQUUsd0JBQXdCLHlEQUN2RyxpQkFBaUIsdURBQUUsbUJBQW1CLHlEQUFFLGVBQWUsNkdBQUUsWUFBWSw2RUFBRSxhQUFhLG9JQUFFLGVBQWUsdUZBQ3JHLGlCQUFpQiw2RkFBRSxnQkFBZ0IsMkZBQUUsa0JBQWtCLHlGQUFFLGFBQWEsc0RBQUUsZUFBZSxzSEFBRSxhQUFhLHVHQUN0RyxtQkFBbUIseURBQUUsZ0JBQWdCLDRGQUFFLGlCQUFpQiw2RUFBRSx1QkFBdUIsNkRBQ2pGLG1CQUFtQiwyWEFDbkIsb0JBQW9CLGtUQUFFLDBCQUEwQixpSUFBRSx5QkFBeUIsOEhBQzNFLDJCQUEyQiw0UkFBRSxzQkFBc0IscVBBQUUsd0JBQXdCLG1YQUFFLHdCQUF3QixnV0FDdkcsd0JBQXdCLGtTQUFFLHlCQUF5QixzUEFBRSxpQkFBaUIseUtBQUUscUJBQXFCLHNHQUM3Rix1QkFBdUIsa0ZBQUUsNEJBQTRCLHFJQUFFLDZCQUE2Qix1RUFBRSwyQkFBMkIscUVBQ2pILG9CQUFvQixxWkFBRSx3QkFBd0IsdWFBQzlDLG9CQUFvQixvUEFBRSwrQkFBK0IsMFNBQUUsNEJBQTRCLHVTQUFFLHVCQUF1QixtUEFDNUcsbUJBQW1CLGtJQUFFLDBCQUEwQixvRUFBRSxvQkFBb0IsaVVBQ3JFLG9CQUFvQixpRkFBRSx3QkFBd0IscUZBQzlDLHFCQUFxQixvT0FDckIsd0JBQXdCLGtHQUFFLG9CQUFvQiw4R0FDOUMsYUFBYSx1clNBQUUsUUFBUTs7NEZBU2hCLHNCQUFzQjtrQkEvQmxDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBSWxCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUI7d0JBQ3ZDLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLHdCQUF3Qjt3QkFDdkcsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsZUFBZTt3QkFDckcsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxhQUFhO3dCQUN0RyxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUI7d0JBQ2pGLG1CQUFtQjt3QkFDbkIsb0JBQW9CLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCO3dCQUMzRSwyQkFBMkIsRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSx3QkFBd0I7d0JBQ3ZHLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQjt3QkFDN0YsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUUsNkJBQTZCLEVBQUUsMkJBQTJCO3dCQUNqSCxvQkFBb0IsRUFBRSx3QkFBd0I7d0JBQzlDLG9CQUFvQixFQUFFLCtCQUErQixFQUFFLDRCQUE0QixFQUFFLHVCQUF1Qjt3QkFDNUcsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CO3dCQUNyRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0I7d0JBQ3BHLHFCQUFxQjt3QkFDckIsd0JBQXdCLEVBQUUsb0JBQW9CO3dCQUM5QyxhQUFhLEVBQUUsUUFBUSxDQUFDLGFBQ2pCO3dCQUNULGVBQWU7d0JBQ2Ysc0JBQXNCO3dCQUN0QixXQUFXO3dCQUNYLFlBQVk7cUJBQ2IsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTt5ZUFHNUIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24sIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElEeW5hbWljRmllbGRzQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLWZpZWxkcy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTYWZlSHRtbCwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IERhdGVwaWNrZXIgfSBmcm9tICd2YW5pbGxhanMtZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IFNhbml0aXplU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Nhbml0aXplLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXJrZG93blNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYXJrZG93bi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWltZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9taW1lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXZWFrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3dlYWsuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlZ2lzdGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3JlZ2lzdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2dyaWQuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYXJ0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NoYXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCdXR0b25Db2xvcnMgfSBmcm9tICduZ3gtc2lyaW8tbGliJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvblBhdGNoRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy92YWxpZGF0aW9ucGF0Y2guZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQWRvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYWRvcm5lci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBSZWFkT25seURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcmVhZG9ubHkuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRGlzcGxheURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGlzcGxheS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBSZXBlYXREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3JlcGVhdC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGcmFtZVNlY3VyaXR5RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9mcmFtZXNlY3VyaXR5LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IERyb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kcm9wZG93bi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUYWJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RhYi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBBY2NvcmRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2FjY29yZGlvbi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBHcmlkRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9ncmlkLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENoYW5nZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY2hhbmdlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlZ2lzdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yZWdpc3Rlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBSZWZyZXNoRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yZWZyZXNoLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFVwZGF0ZUJsdXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3VwZGF0ZWJsdXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBOdW1iZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL251bWJlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90ZXh0LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRhYkNvbnRyb2xEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RhYmNvbnRyb2wuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVGFiSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGFiaXRlbS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb2xsYXBzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY29sbGFwc2UuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQWNjb3JkaW9uUGFuZWxEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2FjY29yZGlvbnBhbmVsLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlV3JhcHBlckNvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZC90ZW1wbGF0ZS13cmFwcGVyL3RlbXBsYXRlLXdyYXBwZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRHluYW1pY0hvc3RDb21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWhvc3QvZHluYW1pYy1ob3N0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHRvRXhwcmVzc2lvbiB9IGZyb20gJy4uL3V0aWxzL2ZlZWxhYmxlJztcclxuaW1wb3J0IHsgaXNNZWFuaW5nZnVsIH0gZnJvbSAnLi4vdXRpbHMvaXNNZWFuaW5nZnVsJztcclxuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTaXJpb0lucHV0Q29tcG9uZW50XHJcbiAgLCBTaXJpb1NlbGVjdENvbXBvbmVudCwgU2lyaW9TZWxlY3RPcHRpb25Db21wb25lbnQsIFNpcmlvU2VsZWN0UGFuZWxDb21wb25lbnRcclxuICAsIFNpcmlvQ2hlY2tib3hHcm91cENvbXBvbmVudCwgU2lyaW9DaGVja2JveENvbXBvbmVudCwgU2lyaW9EYXRlcGlja2VyQ29tcG9uZW50LCBTaXJpb1RpbWVwaWNrZXJDb21wb25lbnRcclxuICAsIFNpcmlvUmFkaW9Hcm91cENvbXBvbmVudCwgU2lyaW9SYWRpb0J1dHRvbkNvbXBvbmVudCwgU2lyaW9UYWJDb21wb25lbnQsIFNpcmlvVGFiSXRlbUNvbXBvbmVudFxyXG4gICwgU2lyaW9BY2NvcmRpb25Db21wb25lbnQsIFNpcmlvQWNjb3JkaW9uUGFuZWxDb21wb25lbnQsIFNpcmlvQWNjb3JkaW9uSGVhZGVyQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvbkJvZHlDb21wb25lbnRcclxuICAsIFNpcmlvQnV0dG9uQ29tcG9uZW50LCBTaXJpb0ZpbGVVcGxvYWRDb21wb25lbnRcclxuICAsIFNpcmlvVG9nZ2xlQ29tcG9uZW50LCBTaXJpb0NoaXBDaGVja2JveEdyb3VwQ29tcG9uZW50LCBTaXJpb0NoaXBSYWRpb0dyb3VwQ29tcG9uZW50LCBTaXJpb0lucHV0Q2hpcENvbXBvbmVudFxyXG4gICwgU2lyaW9BbGVydENvbXBvbmVudCwgU2lyaW9BbGVydE1lc3NhZ2VDb21wb25lbnQsIFNpcmlvU2xpZGVyQ29tcG9uZW50XHJcbiAgLCBTaXJpb05vdGlmeUNvbXBvbmVudCwgU2lyaW9Ob3RpZnlCb2R5Q29tcG9uZW50LCBTaXJpb05vdGlmeUFjdGlvbkNvbXBvbmVudCwgU2lyaW9Ob3RpZnlMaW5rQ29tcG9uZW50XHJcbiAgLCBTaXJpb1Rvb2x0aXBEaXJlY3RpdmVcclxuICAsIE5neFNpcmlvRXZlbnRcclxufSBmcm9tICduZ3gtc2lyaW8tbGliJztcclxuXHJcbmltcG9ydCB7IEFnR3JpZEFuZ3VsYXIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBNb2R1bGUsIEdyaWRPcHRpb25zIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xyXG5pbXBvcnQgeyBBZ0NoYXJ0cyB9IGZyb20gXCJhZy1jaGFydHMtYW5ndWxhclwiO1xyXG5pbXBvcnQgeyBBZ0NoYXJ0T3B0aW9ucyB9IGZyb20gJ2FnLWNoYXJ0cy1jb21tdW5pdHknO1xyXG5cclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQHdlbWFrZTR1L2ludGVyYWN0JztcclxuaW1wb3J0IHsgVGV4dHMgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxlJztcclxuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxpemUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZHluYW1pYy1maWVsZHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9keW5hbWljLWZpZWxkcy5jb21wb25lbnQuY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXHJcbiAgICAsIEFkb3JuZXJEaXJlY3RpdmUsIFJlYWRPbmx5RGlyZWN0aXZlLCBEaXNwbGF5RGlyZWN0aXZlLCBGcmFtZVNlY3VyaXR5RGlyZWN0aXZlLCBWYWxpZGF0aW9uUGF0Y2hEaXJlY3RpdmVcclxuICAgICwgRHJvcGRvd25EaXJlY3RpdmUsIFVwZGF0ZUJsdXJEaXJlY3RpdmUsIFJlcGVhdERpcmVjdGl2ZSwgVGFiRGlyZWN0aXZlLCBHcmlkRGlyZWN0aXZlLCBDaGFuZ2VEaXJlY3RpdmVcclxuICAgICwgUmVnaXN0ZXJEaXJlY3RpdmUsIFJlZnJlc2hEaXJlY3RpdmUsIEFjY29yZGlvbkRpcmVjdGl2ZSwgRGF0ZURpcmVjdGl2ZSwgTnVtYmVyRGlyZWN0aXZlLCBUZXh0RGlyZWN0aXZlXHJcbiAgICAsIFRhYkNvbnRyb2xEaXJlY3RpdmUsIFRhYkl0ZW1EaXJlY3RpdmUsIENvbGxhcHNlRGlyZWN0aXZlLCBBY2NvcmRpb25QYW5lbERpcmVjdGl2ZVxyXG4gICAgLCBTaXJpb0lucHV0Q29tcG9uZW50XHJcbiAgICAsIFNpcmlvU2VsZWN0Q29tcG9uZW50LCBTaXJpb1NlbGVjdE9wdGlvbkNvbXBvbmVudCwgU2lyaW9TZWxlY3RQYW5lbENvbXBvbmVudFxyXG4gICAgLCBTaXJpb0NoZWNrYm94R3JvdXBDb21wb25lbnQsIFNpcmlvQ2hlY2tib3hDb21wb25lbnQsIFNpcmlvRGF0ZXBpY2tlckNvbXBvbmVudCwgU2lyaW9UaW1lcGlja2VyQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvUmFkaW9Hcm91cENvbXBvbmVudCwgU2lyaW9SYWRpb0J1dHRvbkNvbXBvbmVudCwgU2lyaW9UYWJDb21wb25lbnQsIFNpcmlvVGFiSXRlbUNvbXBvbmVudFxyXG4gICAgLCBTaXJpb0FjY29yZGlvbkNvbXBvbmVudCwgU2lyaW9BY2NvcmRpb25QYW5lbENvbXBvbmVudCwgU2lyaW9BY2NvcmRpb25IZWFkZXJDb21wb25lbnQsIFNpcmlvQWNjb3JkaW9uQm9keUNvbXBvbmVudFxyXG4gICAgLCBTaXJpb0J1dHRvbkNvbXBvbmVudCwgU2lyaW9GaWxlVXBsb2FkQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvVG9nZ2xlQ29tcG9uZW50LCBTaXJpb0NoaXBDaGVja2JveEdyb3VwQ29tcG9uZW50LCBTaXJpb0NoaXBSYWRpb0dyb3VwQ29tcG9uZW50LCBTaXJpb0lucHV0Q2hpcENvbXBvbmVudFxyXG4gICAgLCBTaXJpb0FsZXJ0Q29tcG9uZW50LCBTaXJpb0FsZXJ0TWVzc2FnZUNvbXBvbmVudCwgU2lyaW9TbGlkZXJDb21wb25lbnRcclxuICAgICwgU2lyaW9Ob3RpZnlDb21wb25lbnQsIFNpcmlvTm90aWZ5Qm9keUNvbXBvbmVudCwgU2lyaW9Ob3RpZnlBY3Rpb25Db21wb25lbnQsIFNpcmlvTm90aWZ5TGlua0NvbXBvbmVudFxyXG4gICAgLCBTaXJpb1Rvb2x0aXBEaXJlY3RpdmVcclxuICAgICwgVGVtcGxhdGVXcmFwcGVyQ29tcG9uZW50LCBEeW5hbWljSG9zdENvbXBvbmVudFxyXG4gICAgLCBBZ0dyaWRBbmd1bGFyLCBBZ0NoYXJ0c10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBSZWdpc3RlclNlcnZpY2UsXHJcbiAgICBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlLFxyXG4gICAgR3JpZFNlcnZpY2UsXHJcbiAgICBDaGFydFNlcnZpY2VcclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNGaWVsZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIElEeW5hbWljRmllbGRzQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSByb3dzOiBBcnJheTxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBhbGlnbm1lbnQ6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIFRleHRzID0gVGV4dHM7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBTYW5pdGl6ZVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBtYXJrZG93bjogTWFya2Rvd25TZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgbWltZTogTWltZVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSB3ZWFrOiBXZWFrU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHJlZ2lzdGVyOiBSZWdpc3RlclNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBtZXRhZGF0YTogTWV0YWRhdGFTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBnbG9iYWw6IEdsb2JhbFNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBncmlkOiBHcmlkU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGNoYXJ0OiBDaGFydFNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBkaWFsb2c6IERpYWxvZ1NlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBlbDogRWxlbWVudFJlZlxyXG4gICAgLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApXHJcbiAge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7ICAgIFxyXG4gICAgdGhpcy5jb25maWd1cmVEYXRlcGlja2VyKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5mb2N1c0ZpcnN0KCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFJlZ2lzdGVyKCk6IFJlZ2lzdGVyU2VydmljZSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWdpc3RlcjtcclxuICB9XHJcblxyXG4gIGdldENsYXNzKGNvbXBvbmVudDogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNvbEhvc3QgPSBcImNvbC1ob3N0IFwiO1xyXG4gICAgaWYgKGNvbXBvbmVudC5sYXlvdXQ/LmNvbHVtbnMpIHtcclxuICAgICAgcmV0dXJuIGNvbEhvc3QgKyBcImNvbC1tZC1cIiArIGNvbXBvbmVudC5sYXlvdXQ/LmNvbHVtbnM7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIGNvbEhvc3QgKyBcImNvbFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudDogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1TZXJ2aWNlLmdldENvbnRyb2wodGhpcy5mb3JtR3JvdXAsIFtjb21wb25lbnQucGF0aCwgY29tcG9uZW50LmtleV0pO1xyXG4gICAgcmV0dXJuICFjb250cm9sIHx8IGNvbnRyb2wudmFsaWQgfHwgIWNvbnRyb2wuZXJyb3JzXHJcbiAgICAgID8gJydcclxuICAgICAgOiBjb250cm9sLmVycm9yc1snbWVzc2FnZSddOyBcclxuICB9XHJcblxyXG4gIGlzV2FybmluZyhjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybVNlcnZpY2UuZ2V0Q29udHJvbCh0aGlzLmZvcm1Hcm91cCwgW2NvbXBvbmVudC5wYXRoLCBjb21wb25lbnQua2V5XSk7XHJcbiAgICByZXR1cm4gKGNvbnRyb2wgJiYgY29udHJvbC5lcnJvcnMgJiYgY29udHJvbC5lcnJvcnNbJ3dhcm5pbmcnXSkgfHwgZmFsc2VcclxuICB9XHJcblxyXG4gIGxvY2FsZShjb21wb25lbnQ6IGFueSwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGxvY2FsaXplKHRoaXMubGFuZ3VhZ2UsIGNvbXBvbmVudCwga2V5KTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlU3RyaW5nKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZVN0cmluZyh0aGlzLmZvcm1Hcm91cCwgdmFsdWUpOyAgICBcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlQm9vbGVhbih2YWx1ZTogYm9vbGVhbiB8IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVCb29sZWFuKHRoaXMuZm9ybUdyb3VwLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZU51bWJlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCk6IG51bWJlciB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlTnVtYmVyKHRoaXMuZm9ybUdyb3VwLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZVVybCh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IFNhZmVSZXNvdXJjZVVybCB7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZVN0cmluZyh0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gICAgY29uc3Qgd2F0Y2hLZXkgPSBgOnNhZmVVcmwoJHt1cmx9KWA7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwodGhpcy5mb3JtR3JvdXAsIHdhdGNoS2V5LCAoKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5zYW5pdGl6ZVNhZmVVcmwodXJsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVUZW1wbGF0ZSh0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGUodGV4dDogc3RyaW5nIHwgbnVsbCwgY2FjaGVhYmxlOiBib29sZWFuID0gdHJ1ZSk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUodGhpcy5mb3JtR3JvdXAsIHRleHQsIHtcclxuICAgICAgY2FjaGVhYmxlOiBjYWNoZWFibGVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVDb2xvcih2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IEJ1dHRvbkNvbG9ycyB8IG51bGwge1xyXG4gICAgY29uc3QgY29sb3IgPSB0aGlzLmV2YWx1YXRlU3RyaW5nKHZhbHVlKTtcclxuICAgIGNvbnN0IHdhdGNoS2V5ID0gYDpidXR0b25Db2xvcigke2NvbG9yfSlgO1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKHRoaXMuZm9ybUdyb3VwLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICBpZiAoY29sb3IgPT09IFwiZ2hvc3RcIilcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgY29uc3QgdmFsaWRDb2xvcnM6IEJ1dHRvbkNvbG9yc1tdID0gWydwcmltYXJ5JywgJ3NlY29uZGFyeScsICd0ZXJ0aWFyeScsICd0ZXJ0aWFyeS1saWdodCcsICdkYW5nZXInXTtcclxuICAgICAgcmV0dXJuIHZhbGlkQ29sb3JzLmluY2x1ZGVzKGNvbG9yIGFzIEJ1dHRvbkNvbG9ycykgPyAoY29sb3IgYXMgQnV0dG9uQ29sb3JzKSA6ICdwcmltYXJ5JztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVDb25kaXRpb25hbChjb25kaXRpb25hbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBoaWRlID0gdGhpcy5ldmFsdWF0ZUJvb2xlYW4oY29uZGl0aW9uYWw/LmhpZGUpO1xyXG4gICAgY29uc3Qgc2hvdyA9IHRoaXMuZXZhbHVhdGVCb29sZWFuKGNvbmRpdGlvbmFsPy5zaG93KTtcclxuICAgIFxyXG4gICAgcmV0dXJuICEoaGlkZSA9PT0gdHJ1ZSB8fCBzaG93ID09PSBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm1ldGFkYXRhLmdldEZvcm1CeU5hbWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUdyb3VwKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwpOiBGb3JtR3JvdXAge1xyXG4gICAgaWYgKCEoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb250cm9sIGlzIG5vdCBhIEZvcm1Hcm91cCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtQXJyYXkoY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCk6IEZvcm1BcnJheSB7XHJcbiAgICBpZiAoIShjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRyb2wgaXMgbm90IGEgRm9ybUFycmF5Jyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udHJvbDtcclxuICB9XHJcblxyXG4gIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZyB8IG51bGwpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybUdyb3VwKHRoaXMuZ2V0Q29udHJvbEZyb21QYXRoKHBhdGgpKVxyXG4gIH1cclxuXHJcbiAgdG9IVE1MKHRleHQ6IHN0cmluZyk6IFNhZmVIdG1sIHtcclxuICAgIGNvbnN0IHdhdGNoS2V5ID0gYDpzYWZlSHRtbCgke3RleHR9KWA7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwodGhpcy5mb3JtR3JvdXAsIHdhdGNoS2V5LCAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGh0bWwgPSB0aGlzLm1hcmtkb3duLnRvSHRtbCh0ZXh0KTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLnNhbml0aXplU2FmZUh0bWwoaHRtbCk7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBzYW5pdGl6ZShodG1sOiBzdHJpbmcpOiBTYWZlSHRtbCB7XHJcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemVTYWZlSHRtbChodG1sKTtcclxuICB9O1xyXG5cclxuICBnZXRNaW1lVHlwZXMoZXh0ZW5zaW9uczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm1pbWUuZ2V0TWltZVR5cGVzKGV4dGVuc2lvbnMpO1xyXG4gIH07XHJcblxyXG4gIGNsaWNrQnV0dG9uKGNvbXBvbmVudDogYW55LCBldmVudDogYW55KSB7XHJcbiAgICBpZiAoY29tcG9uZW50LmNsaWNrKSB7XHJcbiAgICAgIHRoaXMuZXZhbHVhdGUoY29tcG9uZW50LmNsaWNrLCBmYWxzZSk7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgaGFzVmFsdWVzKGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWNvbXBvbmVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgeyB2YWx1ZXMsIHZhbHVlc0tleSwgdmFsdWVzRXhwcmVzc2lvbiB9ID0gY29tcG9uZW50O1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgaXNNZWFuaW5nZnVsKHZhbHVlcykgfHxcclxuICAgICAgaXNNZWFuaW5nZnVsKHZhbHVlc0tleSkgfHxcclxuICAgICAgaXNNZWFuaW5nZnVsKHZhbHVlc0V4cHJlc3Npb24pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmFsdWVzKGNvbXBvbmVudDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmIChjb21wb25lbnQudmFsdWVzKSB7XHJcbiAgICAgIC8vIFN0YXRpY1xyXG4gICAgICByZXR1cm4gb2YoY29tcG9uZW50LnZhbHVlcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb21wb25lbnQudmFsdWVzS2V5KSB7XHJcbiAgICAgIC8vIEZpZWxkIHZhbHVlXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZXZhbHVhdGUoY29tcG9uZW50LnZhbHVlc0tleSk7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEFzT2JzZXJ2YWJsZShyZXN1bHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29tcG9uZW50LnZhbHVlc0V4cHJlc3Npb24pIHtcclxuICAgICAgLy8gRXhwcmVzc2lvblxyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmV2YWx1YXRlKGNvbXBvbmVudC52YWx1ZXNFeHByZXNzaW9uKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXNPYnNlcnZhYmxlKHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gTm90aGluZ1xyXG4gICAgICByZXR1cm4gdGhpcy5ub0RhdGE7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFZhbHVlcyhjb21wb25lbnQ6IGFueSk6ICgpID0+IHZvaWQge1xyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgaWYgKGNvbXBvbmVudC52YWx1ZXNLZXkpIHtcclxuICAgICAgICB0aGlzLmludmFsaWRhdGUoY29tcG9uZW50LnZhbHVlc0tleSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoY29tcG9uZW50LnZhbHVlc0V4cHJlc3Npb24pIHtcclxuICAgICAgICB0aGlzLmludmFsaWRhdGUoY29tcG9uZW50LnZhbHVlc0V4cHJlc3Npb24pO1xyXG4gICAgICB9ICBcclxuICAgIH07ICBcclxuICB9XHJcblxyXG4gIHRvTGFiZWwodmFsdWU6IGFueSwgbGlzdDogQXJyYXk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogYW55IH0+KTogYW55IHtcclxuICAgIGlmICghbGlzdCB8fCAhQXJyYXkuaXNBcnJheShsaXN0KSB8fCBsaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBnZXRMYWJlbCA9ICh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSBsaXN0LmZpbmQoeCA9PiB4LnZhbHVlID09PSB2YWx1ZSk7XHJcbiAgICAgIHJldHVybiBpdGVtID8gaXRlbS5sYWJlbCA6IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAodiA9PiBnZXRMYWJlbCh2KSkuam9pbignLCAnKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gZ2V0TGFiZWwodmFsdWUpOyAgICAgIFxyXG4gICAgfSAgICBcclxuICB9XHJcblxyXG4gIHN1cHBvcnRWYWx1ZXMoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghY29tcG9uZW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gY29tcG9uZW50LmZpZWxkdHlwZSA9PT0gJ3NlbGVjdCcgfHwgY29tcG9uZW50LmZpZWxkdHlwZSA9PT0gJ3RhZ2xpc3QnO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hhcnRPcHRpb25zKGNvbXBvbmVudDogYW55KTogT2JzZXJ2YWJsZTxBZ0NoYXJ0T3B0aW9ucz4ge1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKGNvbXBvbmVudCwgYGdldENoYXJ0T3B0aW9uc18ke3RoaXMubGFuZ3VhZ2V9YFxyXG4gICAgICAsICgpID0+IHRoaXMuY2hhcnQuZ2V0T3B0aW9ucyhjb21wb25lbnQsIHRoaXMuZm9ybUdyb3VwKSk7XHJcbiAgfVxyXG5cclxuICBpbnZhbGlkYXRlQ2hhcnQoY29tcG9uZW50OiBhbnkpOiAoKSA9PiB2b2lkIHtcclxuICAgIHJldHVybiAoKSA9PiB0aGlzLndlYWsuaW52YWxpZGF0ZShjb21wb25lbnQsIGBnZXRDaGFydE9wdGlvbnNfJHt0aGlzLmxhbmd1YWdlfWApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hhcnREYXRhKGNvbXBvbmVudDogYW55KTogYW55IHtcclxuICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLmNoYXJ0LmdldERhdGFFeHByZXNzaW9uKGNvbXBvbmVudCk7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUodGhpcy5mb3JtR3JvdXAsIGV4cHJlc3Npb24pO1xyXG4gIH1cclxuXHJcbiAgZ2V0R3JpZE9wdGlvbnMoY29tcG9uZW50OiBhbnkpOiBHcmlkT3B0aW9ucyB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwoY29tcG9uZW50LCBgZ2V0R3JpZE9wdGlvbnNfJHt0aGlzLmxhbmd1YWdlfWBcclxuICAgICAgLCAoKSA9PiB0aGlzLmdyaWQuZ2V0T3B0aW9ucyhjb21wb25lbnQsIHRoaXMuZm9ybUdyb3VwKSk7XHJcbiAgfVxyXG5cclxuICBnZXRHcmlkTW9kdWxlcyhjb21wb25lbnQ6IGFueSk6IE1vZHVsZVtdIHtcclxuICAgIHJldHVybiB0aGlzLndlYWsuY2FsbChjb21wb25lbnQsICdnZXRHcmlkTW9kdWxlcycsICgpID0+IHRoaXMuZ3JpZC5nZXRNb2R1bGVzKCkpO1xyXG4gIH1cclxuXHJcbiAgb25HcmlkU2VsZWN0aW9uQ2hhbmdlZChjb21wb25lbnQ6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5ncmlkLm9uU2VsZWN0aW9uQ2hhbmdlZChjb21wb25lbnQsIHRoaXMuZm9ybUdyb3VwLCBldmVudCk7XHJcbiAgfVxyXG5cclxuICBnZXRSb3dTb3VyY2UoY29tcG9uZW50OiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGNvbXBvbmVudC5kYXRhU291cmNlKSB7XHJcbiAgICAgIC8vIEV4cHJlc3Npb25cclxuICAgICAgcmV0dXJuIHRoaXMuZXZhbHVhdGUoY29tcG9uZW50LmRhdGFTb3VyY2UsIHRydWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIE5vdGhpbmdcclxuICAgICAgcmV0dXJuIHRoaXMubm9EYXRhO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFJvd1NvdXJjZShjb21wb25lbnQ6IGFueSk6ICgpID0+IHZvaWQge1xyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgaWYgKGNvbXBvbmVudC5kYXRhU291cmNlKSB7XHJcbiAgICAgICAgdGhpcy5pbnZhbGlkYXRlKGNvbXBvbmVudC5kYXRhU291cmNlKTtcclxuICAgICAgfSAgXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgYWRkSXRlbShmb3JtQXJyYXk6IEZvcm1BcnJheSkge1xyXG4gICAgKGZvcm1BcnJheSBhcyBhbnkpLmFkZEl0ZW0oKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUl0ZW0oZm9ybUFycmF5OiBGb3JtQXJyYXksIGluZGV4OiBudW1iZXIsIHdpdGhDb25maXJtOiBib29sZWFuKSB7XHJcbiAgICBpZiAod2l0aENvbmZpcm0pIHtcclxuICAgICAgdGhpcy5kaWFsb2cuY29uZmlybSh0aGlzLmxvY2FsZShUZXh0cywgJ0NvbmZpcm1EZWxldGUnKSwge1xyXG4gICAgICAgIFwidGl0bGVcIjogdGhpcy5sb2NhbGUoVGV4dHMsICdDb25maXJtJyksXHJcbiAgICAgICAgXCJidXR0b25zXCI6IFwiQ29uZmlybUNhbmNlbFwiLFxyXG4gICAgICAgIFwib25SZXN1bHRcIjogKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC5hY3Rpb24gPT09IFwiWWVzXCIpIHtcclxuICAgICAgICAgICAgZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3ZlVXBJdGVtKGZvcm1BcnJheTogRm9ybUFycmF5LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgPSBmb3JtQXJyYXkuYXQoaW5kZXgpO1xyXG4gICAgZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICAgIGZvcm1BcnJheS5pbnNlcnQoaW5kZXggLSAxLCBjb250cm9sKTtcclxuICB9XHJcblxyXG4gIG1vdmVEb3duSXRlbShmb3JtQXJyYXk6IEZvcm1BcnJheSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgY29udHJvbDogQWJzdHJhY3RDb250cm9sID0gZm9ybUFycmF5LmF0KGluZGV4KTtcclxuICAgIGZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICBmb3JtQXJyYXkuaW5zZXJ0KGluZGV4ICsgMSwgY29udHJvbCk7ICAgIFxyXG4gIH1cclxuXHJcbiAgY3JlYXRlVXBsb2FkVGFibGVzKGNvbXBvbmVudDogYW55KTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLndlYWsuY2FsbChjb21wb25lbnQsICdjcmVhdGVVcGxvYWRUYWJsZXMnLCAoKSA9PiB7XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29tcG9uZW50czogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGFibGVcIixcclxuICAgICAgICAgICAgICBcImxheW91dFwiOiB7XHJcbiAgICAgICAgICAgICAgICBcImNvbHVtbnNcIjogbnVsbFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiB0aGlzLmxvY2FsZShUZXh0cywgJ05hbWUnKSxcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJuYW1lXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZmxleFwiOiAxXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IHRoaXMubG9jYWxlKFRleHRzLCAnU2l6ZScpLFxyXG4gICAgICAgICAgICAgICAgICBcImtleVwiOiBcInNpemVcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJpbnRlZ2VyXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiYWxpZ25cIjogXCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IHRoaXMubG9jYWxlKFRleHRzLCAnVHlwZScpLFxyXG4gICAgICAgICAgICAgICAgICBcImtleVwiOiBcInR5cGVcIiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJ1cmxcIixcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcIndpZHRoXCI6IDUwLFxyXG4gICAgICAgICAgICAgICAgICBcImFsaWduXCI6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwib2JqZWN0VVJMXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiA1MCxcclxuICAgICAgICAgICAgICAgICAgXCJhbGlnblwiOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvcm1hdFwiOiBcImRlbGV0ZVJvd1wiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBcImRhdGFTb3VyY2VcIjogXCI9XCIgKyBjb21wb25lbnQua2V5LFxyXG4gICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IDIwMCxcclxuICAgICAgICAgICAgICBcImNvbmRpdGlvbmFsXCI6IGNvbXBvbmVudC5jb25kaXRpb25hbCxcclxuICAgICAgICAgICAgICBcImRpc2FibGVkXCI6IGNvbXBvbmVudC5kaXNhYmxlZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgICBdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmaWxlVXBsb2FkZWQoJGV2ZW50OiBOZ3hTaXJpb0V2ZW50PFNpcmlvRmlsZVVwbG9hZENvbXBvbmVudD4pIHtcclxuICAgIGNvbnN0IHJlbW92ZUZpbGUgPSAoZmlsZTogRmlsZSkgPT4ge1xyXG4gICAgICBpZiAoJGV2ZW50LmNvbXBvbmVudC5jb250cm9sKSB7XHJcbiAgICAgICAgY29uc3QgbmV3RmlsZXMgPSAkZXZlbnQuY29tcG9uZW50LmZpbGVMaXN0LmZpbHRlcihmID0+IGYgIT09IGZpbGUpO1xyXG4gICAgICAgICRldmVudC5jb21wb25lbnQuY29udHJvbC5zZXRWYWx1ZShuZXdGaWxlcyk7XHJcbiAgICAgICAgYWRkUmVtb3ZlKG5ld0ZpbGVzKTtcclxuICAgICAgICByZXR1cm4gbmV3RmlsZXM7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFkZFJlbW92ZSA9IChmaWxlczogRmlsZVtdKSA9PiB7XHJcbiAgICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7XHJcbiAgICAgICAgaWYgKCEoJ3JlbW92ZScgaW4gZmlsZSkpIHtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWxlLCAncmVtb3ZlJywge1xyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJlbW92ZUZpbGUodGhpcyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgICB9KTsgXHJcbiAgICB9O1xyXG5cclxuICAgIGFkZFJlbW92ZSgkZXZlbnQuY29tcG9uZW50LmZpbGVMaXN0KTtcclxuICB9XHJcblxyXG4gIGdldEZlZWxhYmxlUHJvcGVydGllcyhjb21wb25lbnQ6IGFueSk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsIHtcclxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBjb21wb25lbnQucHJvcGVydGllcztcclxuICAgIGlmICh0eXBlb2YgcHJvcGVydGllcyA9PT0gJ29iamVjdCcgJiYgcHJvcGVydGllcyAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzKSkge1xyXG4gICAgICBjb25zdCBmZWVsYWJsZSA9IHRvRXhwcmVzc2lvbihwcm9wZXJ0aWVzKTtcclxuICAgICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKHRoaXMuZm9ybUdyb3VwLCBmZWVsYWJsZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRHcm91cE91dGxpbmUoY29tcG9uZW50OiBhbnkpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdncm91cC1vdXRsaW5lJzogY29tcG9uZW50LnNob3dPdXRsaW5lID09PSB0cnVlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUFsaWdubWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmdldEFsaWdubWVudFJ1bGVzKFwidmFsaWduXCIsIHRoaXMuYWxpZ25tZW50KTsgICAgICAgIFxyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50QWxpZ25tZW50KGNvbXBvbmVudDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRBbGlnbm1lbnRSdWxlcyhcImNvbXBvbmVudFwiLCBjb21wb25lbnQuc2VsZkFsaWdubWVudCk7ICAgIFxyXG4gIH1cclxuXHJcbiAgZ2V0VGV4dEFsaWdubWVudChjb21wb25lbnQ6IGFueSk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50ZXh0QWxpZ24pIHtcclxuICAgICAgY2FzZSAnbGVmdCc6IHJldHVybiBcInRleHQtbGVmdFwiXHJcbiAgICAgIGNhc2UgJ2NlbnRlcic6IHJldHVybiBcInRleHQtY2VudGVyXCJcclxuICAgICAgY2FzZSAncmlnaHQnOiByZXR1cm4gXCJ0ZXh0LXJpZ2h0XCJcclxuICAgICAgZGVmYXVsdDogcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRIb3Jpem9udGFsQWxpZ25tZW50KGNvbXBvbmVudDogYW55KSB7XHJcbiAgICBjb25zdCBhbGlnbm1lbnQgPSBjb21wb25lbnQuaG9yaXpvbnRhbEFsaWdubWVudDtcclxuICAgIGNvbnN0IHJ1bGVOYW1lID0gXCJob3Jpem9udGFsXCI7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBbYCR7cnVsZU5hbWV9LWxlZnRgXTogYWxpZ25tZW50ID09PSAnbGVmdCcsXHJcbiAgICAgIFtgJHtydWxlTmFtZX0tY2VudGVyYF06IGFsaWdubWVudCA9PT0gJ2NlbnRlcicsXHJcbiAgICAgIFtgJHtydWxlTmFtZX0tcmlnaHRgXTogYWxpZ25tZW50ID09PSAncmlnaHQnLFxyXG4gICAgICBbYCR7cnVsZU5hbWV9LWZpbGxgXTogYWxpZ25tZW50ID09PSAnZmlsbCdcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRMaWdodFZpZXcoY29tcG9uZW50OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY2xhc3NOYW1lID0gJ2xpZ2h0LXZpZXcnO1xyXG4gICAgY29uc3QgdmFsdWUgPSBjb21wb25lbnQucHJvcGVydGllcz8udXNlTGlnaHRSZWFkb25seVxyXG4gICAgICB8fCB0aGlzLmdsb2JhbC5nZXRQcm9wZXJ0eShcInVzZUxpZ2h0UmVhZG9ubHlcIiwgXCJ5ZXNcIik7XHJcbiAgICBpZiAodmFsdWUgIT09IFwieWVzXCIgJiYgdmFsdWUgIT09IFwibm9cIilcclxuICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcclxuICAgIHJldHVybiAodmFsdWUgPT09IFwieWVzXCIpID8gY2xhc3NOYW1lIDogXCJcIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbm9EYXRhOiBPYnNlcnZhYmxlPGFueT4gPSBvZihbXSk7XHJcblxyXG4gIHByaXZhdGUgZ2V0IGxhbmd1YWdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZVNlcnZpY2UuZ2V0TGFuZ3VhZ2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QWxpZ25tZW50UnVsZXMocnVsZU5hbWU6IHN0cmluZywgYWxpZ25tZW50OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIFtgJHtydWxlTmFtZX0tc3RhcnRgXTogYWxpZ25tZW50ID09PSAnc3RhcnQnLFxyXG4gICAgICBbYCR7cnVsZU5hbWV9LWNlbnRlcmBdOiBhbGlnbm1lbnQgPT09ICdjZW50ZXInLFxyXG4gICAgICBbYCR7cnVsZU5hbWV9LWVuZGBdOiBhbGlnbm1lbnQgPT09ICdlbmQnXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnZhbGlkYXRlKHRleHQ6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5pbnZhbGlkYXRlKHRleHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb250cm9sRnJvbVBhdGgocGF0aDogc3RyaW5nIHwgbnVsbCk6IEFic3RyYWN0Q29udHJvbCB8IG51bGwge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHBhdGhcclxuICAgICAgPyB0aGlzLmZvcm1Hcm91cC5nZXQocGF0aClcclxuICAgICAgOiB0aGlzLmZvcm1Hcm91cDtcclxuXHJcbiAgICBpZiAoIWNvbnRyb2wpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3JtR3JvdXAgZG9lcyBub3QgY29udGFpbiBhIGNvbnRyb2wgd2l0aCBwYXRoICcke3BhdGh9J2AsIHsgY2F1c2U6IHRoaXMuZm9ybUdyb3VwIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzRmlyc3QoKSB7XHJcbiAgICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAnYnV0dG9uLCBbaHJlZl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknXHJcbiAgICApO1xyXG5cclxuICAgIGZvciAobGV0IGVsIG9mIGZvY3VzYWJsZUVsZW1lbnRzKSB7XHJcbiAgICAgIGlmICghKGVsIGFzIEhUTUxFbGVtZW50KS5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHtcclxuICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gICAgICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QXNPYnNlcnZhYmxlKHZhbHVlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZURhdGVwaWNrZXIoKSB7XHJcbiAgICAoRGF0ZXBpY2tlci5sb2NhbGVzIGFzIGFueSlbJ2l0J10gPSB7XHJcbiAgICAgIGRheXM6IFtcclxuICAgICAgICAnRG9tZW5pY2EnLFxyXG4gICAgICAgICdMdW5lZMOsJyxcclxuICAgICAgICAnTWFydGVkw6wnLFxyXG4gICAgICAgICdNZXJjb2xlZMOsJyxcclxuICAgICAgICAnR2lvdmVkw6wnLFxyXG4gICAgICAgICdWZW5lcmTDrCcsXHJcbiAgICAgICAgJ1NhYmF0bycsXHJcbiAgICAgIF0sXHJcbiAgICAgIGRheXNNaW46IFsnRG9tJywgJ0x1bicsICdNYXInLCAnTWVyJywgJ0dpbycsICdWZW4nLCAnU2FiJ10sXHJcbiAgICAgIG1vbnRoczogW1xyXG4gICAgICAgICdHZW5uYWlvJyxcclxuICAgICAgICAnRmViYnJhaW8nLFxyXG4gICAgICAgICdNYXJ6bycsXHJcbiAgICAgICAgJ0FwcmlsZScsXHJcbiAgICAgICAgJ01hZ2dpbycsXHJcbiAgICAgICAgJ0dpdWdubycsXHJcbiAgICAgICAgJ0x1Z2xpbycsXHJcbiAgICAgICAgJ0Fnb3N0bycsXHJcbiAgICAgICAgJ1NldHRlbWJyZScsXHJcbiAgICAgICAgJ090dG9icmUnLFxyXG4gICAgICAgICdOb3ZlbWJyZScsXHJcbiAgICAgICAgJ0RpY2VtYnJlJyxcclxuICAgICAgXSxcclxuICAgICAgbW9udGhzU2hvcnQ6IFtcclxuICAgICAgICAnR2VuJyxcclxuICAgICAgICAnRmViJyxcclxuICAgICAgICAnTWFyJyxcclxuICAgICAgICAnQXByJyxcclxuICAgICAgICAnTWFnJyxcclxuICAgICAgICAnR2l1JyxcclxuICAgICAgICAnTHVnJyxcclxuICAgICAgICAnQWdvJyxcclxuICAgICAgICAnU2V0JyxcclxuICAgICAgICAnT3R0JyxcclxuICAgICAgICAnTm92JyxcclxuICAgICAgICAnRGljJyxcclxuICAgICAgXSxcclxuICAgICAgdG9kYXk6ICdPZ2dpJyxcclxuICAgICAgY2xlYXI6ICdQdWxpc2NpJyxcclxuICAgICAgZm9ybWF0OiAnZGQvbW0veXl5eScsXHJcbiAgICAgIHdlZWtTdGFydDogMVxyXG4gICAgfTtcclxuICB9O1xyXG59XHJcbiIsIjxkaXYgW25nQ2xhc3NdPVwiZ2V0Rm9ybUFsaWdubWVudCgpXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd3NcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBmaWVsZC1zZXRcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29tcG9uZW50IG9mIHJvdy5jb21wb25lbnRzXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnR5cGVcIj5cclxuICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImdldENsYXNzKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDb21wb25lbnRBbGlnbm1lbnQoY29tcG9uZW50KVwiPlxyXG4gICAgICAgICAgICA8ZGl2IFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0ZXh0ZmllbGQgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRmaWVsZCdcIiBbZm9ybUdyb3VwXT1cInJlc29sdmVQYXRoKGNvbXBvbmVudC5wYXRoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxvY2FsZShjb21wb25lbnQsICdwbGFjZWhvbGRlcicpIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4QWRvcm5lcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuYXBwZWFyYW5jZT8ucHJlZml4QWRvcm5lcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3VmZml4QWRvcm5lcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuYXBwZWFyYW5jZT8uc3VmZml4QWRvcm5lcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJjb21wb25lbnQucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0Y2FzZV09XCJjb21wb25lbnQudGV4dENhc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5tYXhMZW5ndGgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0VGV4dEFsaWdubWVudChjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQmx1clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RleHRmaWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0ZXh0ZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWlucHV0PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gc2VsZWN0IC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZWxlY3QnXCIgW2Zvcm1Hcm91cF09XCJyZXNvbHZlUGF0aChjb21wb25lbnQucGF0aClcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0IFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxvY2FsZShjb21wb25lbnQsICdwbGFjZWhvbGRlcicpIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiY29tcG9uZW50LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZnJlc2hdPVwicmVmcmVzaFZhbHVlcyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwic2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0LXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQgKm5nSWY9XCJjb21wb25lbnQuc2VhcmNoYWJsZVwiIGNsYXNzPVwic2VhcmNoYWJsZVwiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cImxvY2FsZShUZXh0cywgJ1R5cGVUb1NlYXJjaCcpXCI+PC9uZ3gtc2lyaW8taW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgKGdldFZhbHVlcyhjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPnt7IGxvY2FsZShvcHRpb24sICdsYWJlbCcpIH19PC9uZ3gtc2lyaW8tc2VsZWN0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tc2VsZWN0LXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdGFnbGlzdCAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFnbGlzdCdcIiBbZm9ybUdyb3VwXT1cInJlc29sdmVQYXRoKGNvbXBvbmVudC5wYXRoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3QgW2FyaWFMYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibG9jYWxlKGNvbXBvbmVudCwgJ3BsYWNlaG9sZGVyJykgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJjb21wb25lbnQucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNNdWx0aXBsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWZyZXNoXT1cInJlZnJlc2hWYWx1ZXMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGFnbGlzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRhZ2xpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3QtcGFuZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgKGdldFZhbHVlcyhjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPnt7IGxvY2FsZShvcHRpb24sICdsYWJlbCcpIH19PC9uZ3gtc2lyaW8tc2VsZWN0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tc2VsZWN0LXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gbnVtYmVyIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCIgW2Zvcm1Hcm91cF09XCJyZXNvbHZlUGF0aChjb21wb25lbnQucGF0aClcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxvY2FsZShjb21wb25lbnQsICdwbGFjZWhvbGRlcicpIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4QWRvcm5lcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuYXBwZWFyYW5jZT8ucHJlZml4QWRvcm5lcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3VmZml4QWRvcm5lcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuYXBwZWFyYW5jZT8uc3VmZml4QWRvcm5lcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJjb21wb25lbnQucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldFRleHRBbGlnbm1lbnQoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdFZhbHVlXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5kZWZhdWx0VmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbmltdW1dPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50Lm1pbmltdW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heGltdW1dPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50Lm1heGltdW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlY2ltYWxEaWdpdHNdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50LmRlY2ltYWxEaWdpdHMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQmx1clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI251bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJudW1iZXJcIj5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWlucHV0PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gZGF0ZXRpbWUgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGV0aW1lJ1wiIFtmb3JtR3JvdXBdPVwicmVzb2x2ZVBhdGgoY29tcG9uZW50LnBhdGgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gZGF0ZSAtLT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1kYXRlcGlja2VyIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFEYXRlTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnZGF0ZUxhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkYXRlTGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxvY2FsZShjb21wb25lbnQsICdwbGFjZWhvbGRlcicpIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJjb21wb25lbnQucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzb0RhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImRhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdGltZSAtLT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby10aW1lcGlja2VyIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFUaW1lTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAndGltZUxhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0aW1lTGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxvY2FsZShjb21wb25lbnQsICdwbGFjZWhvbGRlcicpIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJjb21wb25lbnQucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGltZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0aW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdGltZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gY2hlY2tib3ggLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiIFtmb3JtR3JvdXBdPVwicmVzb2x2ZVBhdGgoY29tcG9uZW50LnBhdGgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdG9nZ2xlIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndG9nZ2xlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tdG9nZ2xlIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJjb21wb25lbnQucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0b2dnbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRlZmF1bHQgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWNoZWNrYm94IFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImNvbXBvbmVudC5wcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSkgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gcmFkaW8gLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JhZGlvJ1wiIFtmb3JtR3JvdXBdPVwicmVzb2x2ZVBhdGgoY29tcG9uZW50LnBhdGgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gY2hpcCAtLT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoaXAnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGlwLXJhZGlvLWdyb3VwIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJjb21wb25lbnQucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVmcmVzaF09XCJyZWZyZXNoVmFsdWVzKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjY2hpcHJhZGlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoaXByYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dC1jaGlwICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgKGdldFZhbHVlcyhjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbG9jYWxlKG9wdGlvbiwgJ2xhYmVsJykgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWlucHV0LWNoaXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hpcC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRlZmF1bHQgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXJhZGlvLWdyb3VwIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJjb21wb25lbnQucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVmcmVzaF09XCJyZWZyZXNoVmFsdWVzKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3JhZGlvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwicmFkaW9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tcmFkaW8tYnV0dG9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgKGdldFZhbHVlcyhjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBsb2NhbGUob3B0aW9uLCAnbGFiZWwnKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBjaGVja2xpc3QgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrbGlzdCdcIiBbZm9ybUdyb3VwXT1cInJlc29sdmVQYXRoKGNvbXBvbmVudC5wYXRoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoaXAgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGlwJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tY2hpcC1jaGVja2JveC1ncm91cCBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiY29tcG9uZW50LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZnJlc2hdPVwicmVmcmVzaFZhbHVlcyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoaXBjaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJjaGlwY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQtY2hpcCAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxvY2FsZShvcHRpb24sICdsYWJlbCcpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1pbnB1dC1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWNoaXAtY2hlY2tib3gtZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkZWZhdWx0IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGVja2JveC1ncm91cCBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiY29tcG9uZW50LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZnJlc2hdPVwicmVmcmVzaFZhbHVlcyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWNoZWNrYm94ICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgKGdldFZhbHVlcyhjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBsb2NhbGUob3B0aW9uLCAnbGFiZWwnKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hlY2tib3gtZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHRleHRhcmVhIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0YXJlYSdcIiBbZm9ybUdyb3VwXT1cInJlc29sdmVQYXRoKGNvbXBvbmVudC5wYXRoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dCB0eXBlPVwidGV4dGFyZWFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsb2NhbGUoY29tcG9uZW50LCAncGxhY2Vob2xkZXInKSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImNvbXBvbmVudC5wcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dGNhc2VdPVwiY29tcG9uZW50LnRleHRDYXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heGxlbmd0aF09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQubWF4TGVuZ3RoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldFRleHRBbGlnbm1lbnQoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJsdXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0ZXh0YXJlYVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQ+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBmaWxlcGlja2VyIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmaWxlcGlja2VyJ1wiIFtmb3JtR3JvdXBdPVwicmVzb2x2ZVBhdGgoY29tcG9uZW50LnBhdGgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWZpbGUtdXBsb2FkIFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdF09XCJnZXRNaW1lVHlwZXMoY29tcG9uZW50LmFjY2VwdClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5tdWx0aXBsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZVVwbG9hZGVkRXZlbnQpPVwiZmlsZVVwbG9hZGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0ZpbGVsaXN0XT1cIiFjb21wb25lbnQuc2hvd0RldGFpbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImNvbXBvbmVudC5wcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNmaWxlcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImZpbGVwaWNrZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYXMgZmEtYXJyb3ctdXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGxvY2FsZShUZXh0cywgJ1VwbG9hZCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby1maWxlLXVwbG9hZD5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuc2hvd0RldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiY3JlYXRlVXBsb2FkVGFibGVzKGNvbXBvbmVudClcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gcmFuZ2UgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JhbmdlJ1wiIFtmb3JtR3JvdXBdPVwicmVzb2x2ZVBhdGgoY29tcG9uZW50LnBhdGgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNsaWRlciBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJjb21wb25lbnQucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5yYW5nZT8ubWluKSA/PyAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50LnJhbmdlPy5tYXgpID8/IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3JhbmdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwicmFuZ2VcIj5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNsaWRlcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRpc3BsYXlmaWVsZCAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGlzcGxheWZpZWxkJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpcmlvLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiW2dldFRleHRBbGlnbm1lbnQoY29tcG9uZW50KSwgZ2V0TGlnaHRWaWV3KGNvbXBvbmVudCkgXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAjZGlzcGxheWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZGlzcGxheWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb21wb25lbnQubGFiZWxcIiBjbGFzcz1cInNpcmlvLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbXBvbmVudC50b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmlvVG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiY29tcG9uZW50LnRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hhc1BvcG92ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaXJpby1sYWJlbC1wb3BvdmVyIGZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpcmlvLWZvcm0tY29udHJvbCBkYXRhLWRpc3BsYXlcIiBbbmdDbGFzc109XCJjb21wb25lbnQuZmllbGRUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudC5maWVsZFR5cGUgPT09ICdjaGVja2JveCc7IGVsc2UgZGVmYXVsdFRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImV2YWx1YXRlKGNvbXBvbmVudC5leHByZXNzaW9uKVwiIGNsYXNzPVwiZmFzIGZhLWNoZWNrXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1cHBvcnRWYWx1ZXMoY29tcG9uZW50KSAmJiBoYXNWYWx1ZXMoY29tcG9uZW50KTsgZWxzZSBzaW1wbGVUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYyBhcyB2YWx1ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0b0xhYmVsKGV2YWx1YXRlKGNvbXBvbmVudC5leHByZXNzaW9uKSwgdmFsdWVzKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaW1wbGVUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGV2YWx1YXRlKGNvbXBvbmVudC5leHByZXNzaW9uKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNvbXBvbmVudC5kZXNjcmlwdGlvblwiIGNsYXNzPVwic2lyaW8taGVscGVyLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSkgfX1cclxuICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkeW5hbWljbGlzdCAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZHluYW1pY2xpc3QnXCIgW2Zvcm1Hcm91cF09XCJyZXNvbHZlUGF0aChjb21wb25lbnQucGF0aClcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1BcnJheU5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXBlYXRdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50LnJlcGV0aXRpb25zKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxvd0FkZFJlbW92ZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmFsbG93QWRkUmVtb3ZlKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNvbXBvbmVudC5kZXNjcmlwdGlvblwiPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKSB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1BcnJheShyZXNvbHZlUGF0aChjb21wb25lbnQucGF0aCkuZ2V0KGNvbXBvbmVudC5rZXkpKSBhcyBmb3JtQXJyYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBvbmVudC5zdWJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0YWIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0YWInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZHluYW1pY2xpc3R0YWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tdGFiIFtsZWZ0QXJyb3dMYWJlbF09XCJsb2NhbGUoVGV4dHMsICdTY3JvbGxMZWZ0JylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JpZ2h0QXJyb3dMYWJlbF09XCJsb2NhbGUoVGV4dHMsICdTY3JvbGxSaWdodCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJDb3VudF09XCJmb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkeW5hbWljbGlzdHRhYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmb3JtQXJyYXkuY29udHJvbHM7IGxldCBpID0gaW5kZXg7XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tdGFiLWl0ZW0gW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSArICcgJyArIChpICsgMSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpID09PSBkeW5hbWljbGlzdHRhYi5hY3RpdmVJbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiY29tcG9uZW50LnJvd3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxpZ25tZW50XT1cImNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudFwiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuYWxsb3dBZGRSZW1vdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOnJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIChjbGljayk9XCJyZW1vdmVJdGVtKGZvcm1BcnJheSwgaSwgdHJ1ZSlcIiBjbGFzcz1cInJlbW92ZS1pdGVtXCIgW2NvbG9yXT1cIm51bGxcIiBpY29uPVwiZmFzIGZhLXRyYXNoXCI+e3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3JlbW92ZUxhYmVsJykgfHwgbG9jYWxlKFRleHRzLCAnUmVtb3ZlSXRlbScpKSB9fTwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXRhYi1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXRhYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGFjY29yZGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FjY29yZGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJkeW5hbWljbGlzdGFjY29yZGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24gW2FjY29yZGlvbkNvdW50XT1cImZvcm1BcnJheS5jb250cm9scy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2R5bmFtaWNsaXN0YWNjb3JkaW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZvcm1BcnJheS5jb250cm9sczsgbGV0IGkgPSBpbmRleDtcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24tcGFuZWwgI3BhbmVsIGFjY29yZGlvblBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24taGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJUZXh0XT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSArICcgJyArIChpICsgMSlcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24taGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24tYm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhbmVsLnBhbmVsSXNPcGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJnZXRGb3JtR3JvdXAoaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImNvbXBvbmVudC5yb3dzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxpZ25tZW50XT1cImNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudFwiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LmFsbG93QWRkUmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOnJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrKT1cInJlbW92ZUl0ZW0oZm9ybUFycmF5LCBpLCB0cnVlKVwiIGNsYXNzPVwicmVtb3ZlLWl0ZW1cIiBbY29sb3JdPVwibnVsbFwiIGljb249XCJmYXMgZmEtdHJhc2hcIj57eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAncmVtb3ZlTGFiZWwnKSB8fCBsb2NhbGUoVGV4dHMsICdSZW1vdmVJdGVtJykpIH19PC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbi1ib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkZWZhdWx0IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjZHluYW1pY2xpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJkeW5hbWljbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmb3JtQXJyYXkuY29udHJvbHM7IGxldCBpID0gaW5kZXg7XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZ3JvdXAtb3V0bGluZSc6IGNvbXBvbmVudC5zaG93T3V0bGluZSA9PT0gdHJ1ZSwgJ2dyb3VwLW91dGxpbmUtcmVwZWF0JzogdHJ1ZSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cImNvbXBvbmVudC5sYWJlbFwiPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSArICcgJyArIChpICsgMSkgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiY29tcG9uZW50LnJvd3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGlnbm1lbnRdPVwiY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50XCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuYWxsb3dBZGRSZW1vdmUgfHwgY29tcG9uZW50LmFsbG93UmVvcmRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuYWxsb3dSZW9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2spPVwibW92ZVVwSXRlbShmb3JtQXJyYXksIGkpXCIgY2xhc3M9XCJyZW1vdmUtaXRlbVwiIFtjb2xvcl09XCJudWxsXCIgaWNvbj1cImZhcyBmYS1hcnJvdy11cFwiPlNwb3N0YSBTw7k8L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2spPVwibW92ZURvd25JdGVtKGZvcm1BcnJheSwgaSlcIiBjbGFzcz1cInJlbW92ZS1pdGVtXCIgW2NvbG9yXT1cIm51bGxcIiBpY29uPVwiZmFzIGZhLWFycm93LWRvd25cIj5TcG9zdGEgR2nDuTwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LmFsbG93QWRkUmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlSXRlbShmb3JtQXJyYXksIGksIHRydWUpXCIgY2xhc3M9XCJyZW1vdmUtaXRlbVwiIFtjb2xvcl09XCJudWxsXCIgaWNvbj1cImZhcyBmYS10cmFzaFwiPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdyZW1vdmVMYWJlbCcpIHx8IGxvY2FsZShUZXh0cywgJ1JlbW92ZUl0ZW0nKSkgfX08L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuYWxsb3dBZGRSZW1vdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIChjbGljayk9XCJhZGRJdGVtKGZvcm1BcnJheSlcIiBjbGFzcz1cImFkZC1pdGVtXCIgW2NvbG9yXT1cIm51bGxcIiBpY29uPVwiZmFzIGZhLXBsdXNcIj57eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYWRkTGFiZWwnKSB8fCBsb2NhbGUoVGV4dHMsICdBZGRJdGVtJykpIH19PC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gZ3JvdXAgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2dyb3VwJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJnZXRHcm91cE91dGxpbmUoY29tcG9uZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAjZ3JvdXBcclxuICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cInJlc29sdmVQYXRoKGNvbXBvbmVudC5wYXRoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93c109XCJjb21wb25lbnQucm93c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxpZ25tZW50XT1cImNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudFwiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdGFiIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0YWInXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRhYiAjdGFiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGFiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsZWZ0QXJyb3dMYWJlbF09XCJsb2NhbGUoVGV4dHMsICdTY3JvbGxMZWZ0JylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JpZ2h0QXJyb3dMYWJlbF09XCJsb2NhbGUoVGV4dHMsICdTY3JvbGxSaWdodCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc05hdkxpbmVdPVwiY29tcG9uZW50Lm5hdmlnYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzVmVydGljYWxdPVwiY29tcG9uZW50LnZlcnRpY2FsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYkNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhbmVsIG9mIGNvbXBvbmVudC5wYW5lbHM7IGxldCBpID0gaW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby10YWItaXRlbSBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKHBhbmVsLCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiZXZhbHVhdGVTdHJpbmcocGFuZWwuaWNvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImV2YWx1YXRlQm9vbGVhbihwYW5lbC5kaXNhYmxlZCkgPz8gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0YWJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJldmFsdWF0ZUNvbmRpdGlvbmFsKHBhbmVsLmNvbmRpdGlvbmFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFRlbXBsYXRlKHBhbmVsLnRlbXBsYXRlKSBhcyB0ZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA9PT0gdGFiLmFjdGl2ZUluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cInJlc29sdmVQYXRoKHBhbmVsLnBhdGgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cInRlbXBsYXRlPy5yb3dzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGlnbm1lbnRdPVwidGVtcGxhdGU/LnZlcnRpY2FsQWxpZ25tZW50XCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdGFiLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdGFiPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gYWNjb3JkaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhY2NvcmRpb24nXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbiAjYWNjb3JkaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiYWNjb3JkaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhbmVsIG9mIGNvbXBvbmVudC5wYW5lbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbi1wYW5lbCAqbmdJZj1cImV2YWx1YXRlQ29uZGl0aW9uYWwocGFuZWwuY29uZGl0aW9uYWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZXZhbHVhdGVCb29sZWFuKHBhbmVsLmRpc2FibGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24taGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJUZXh0XT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShwYW5lbCwgJ2xhYmVsJykpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uLWJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFRlbXBsYXRlKHBhbmVsLnRlbXBsYXRlKSBhcyB0ZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cInJlc29sdmVQYXRoKHBhbmVsLnBhdGgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwidGVtcGxhdGU/LnJvd3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxpZ25tZW50XT1cInRlbXBsYXRlPy52ZXJ0aWNhbEFsaWdubWVudFwiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbi1ib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0ZXh0IC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbY29sbGFwc2VdPVwiY29tcG9uZW50LmNvbGxhcHNlVG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAjdGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS1SZXNldCBWaWV3IENvbnRleHQtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiB0YWJpbmRleD1cIjBcIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICd0ZXh0JykpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQudG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGFwcC10ZW1wbGF0ZS13cmFwcGVyICN0b29sdGlwV3JhcHBlciBbdGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlXCIgW2NvbnRleHRdPVwieyBjb21wb25lbnQ6IGNvbXBvbmVudCB9XCI+PC9hcHAtdGVtcGxhdGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzaXJpby1sYWJlbC1wb3BvdmVyIGZhcyBmYS1pbmZvLWNpcmNsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpcmlvVG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxvY2FsZShUZXh0cywgJ0luZm9ybWF0aW9uJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGFzUG9wb3Zlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbVRlbXBsYXRlXT1cInRvb2x0aXBXcmFwcGVyLmdldFRlbXBsYXRlUmVmKClcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbHRpcFRlbXBsYXRlIGxldC1jb21wb25lbnQ9XCJjb21wb25lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpcmlvLXRvb2x0aXAtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBodG1sIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidodG1sJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImh0bWwtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJzYW5pdGl6ZShldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICdjb250ZW50JykpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICNodG1sXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImh0bWxcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gaW1hZ2UgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ltYWdlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5zb3VyY2UpXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYWx0JykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7XCJcclxuICAgICAgICAgICAgICAgICAgICAgI2ltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImltYWdlXCI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0YWJsZSAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFibGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+e3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgW21vZHVsZXNdPVwiZ2V0R3JpZE1vZHVsZXMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncmlkT3B0aW9uc109XCJnZXRHcmlkT3B0aW9ucyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZWQpPVwib25HcmlkU2VsZWN0aW9uQ2hhbmdlZChjb21wb25lbnQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uRGVmc109XCJjb21wb25lbnQuY29sdW1ucyB8fCBldmFsdWF0ZShjb21wb25lbnQuY29sdW1uc0V4cHJlc3Npb24pIHx8IFtdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd1NvdXJjZV09XCJnZXRSb3dTb3VyY2UoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWZyZXNoXT1cInJlZnJlc2hSb3dTb3VyY2UoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50LmhlaWdodClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0YWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0YWJsZVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBidXR0b24gLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbidcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZ2V0SG9yaXpvbnRhbEFsaWdubWVudChjb21wb25lbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIChjbGlja0V2ZW50KT1cImNsaWNrQnV0dG9uKGNvbXBvbmVudCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJldmFsdWF0ZUNvbG9yKGNvbXBvbmVudC5jb2xvcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuaWNvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBzZXBhcmF0b3IgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlcGFyYXRvcidcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAjc2VwYXJhdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInNlcGFyYXRvclwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBzcGFjZXIgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NwYWNlcidcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29tcG9uZW50LmhlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICNzcGFjZXJcclxuICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwic3BhY2VyXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGlmcmFtZSAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaWZyYW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiY29tcG9uZW50LmlkXCI+e3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpZnJhbWUgW3NyY109XCJldmFsdWF0ZVVybChjb21wb25lbnQudXJsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiJzEwMCUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjb21wb25lbnQuaGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZyYW1lU2VjdXJpdHldPVwiY29tcG9uZW50LnNlY3VyaXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgI2lmcmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJpZnJhbWVcIj5cclxuICAgICAgICAgICAgICAgIDwvaWZyYW1lPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gYWxlcnQgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FsZXJ0J1wiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1hbGVydCBbdHlwZV09XCJjb21wb25lbnQucm9sZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENsb3NlXT1cImxvY2FsZShUZXh0cywgJ0Nsb3NlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYWxlcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiYWxlcnRcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hbGVydC1tZXNzYWdlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICd0ZXh0JykpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hbGVydC1tZXNzYWdlPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWxlcnQ+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBub3RpY2UgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ25vdGljZSdcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tbm90aWZ5ICNub3RpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJub3RpY2VcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1ub3RpZnktYm9keSBbdGl0bGVdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3RpdGxlJykpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidG9IVE1MKGV2YWx1YXRlVGVtcGxhdGUobG9jYWxlKGNvbXBvbmVudCwgJ3RleHQnKSkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLW5vdGlmeS1ib2R5PlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tbm90aWZ5PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdG9vbHRpcCAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndG9vbHRpcCdcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtdGVtcGxhdGUtd3JhcHBlciAjdG9vbHRpcFdyYXBwZXIgW3RlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZVwiIFtjb250ZXh0XT1cInsgY29tcG9uZW50OiBjb21wb25lbnQgfVwiPjwvYXBwLXRlbXBsYXRlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2lyaW8tbGFiZWwtcG9wb3ZlciBmYXMgZmEtaW5mby1jaXJjbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXJpb1Rvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2hhc1BvcG92ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21UZW1wbGF0ZV09XCJ0b29sdGlwV3JhcHBlci5nZXRUZW1wbGF0ZVJlZigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgI3Rvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidG9vbHRpcFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0b29sdGlwVGVtcGxhdGUgbGV0LWNvbXBvbmVudD1cImNvbXBvbmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lyaW8tdG9vbHRpcC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjb21wb25lbnQudGl0bGVcIiBjbGFzcz1cInNpcmlvLXRvb2x0aXAtaGVhZGluZyBzaXJpby1zcGFjZS1kb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndGl0bGUnKSkgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidG9IVE1MKGV2YWx1YXRlVGVtcGxhdGUobG9jYWxlKGNvbXBvbmVudCwgJ3RleHQnKSkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoYXJ0IC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGFydCdcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSkgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGFnLWNoYXJ0cyBbb3B0aW9uc109XCIoZ2V0Q2hhcnRPcHRpb25zKGNvbXBvbmVudCkgfCBhc3luYykgPz8ge31cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbb2JzZXJ2ZV09XCJnZXRDaGFydERhdGEoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYWxsYmFja109XCJpbnZhbGlkYXRlQ2hhcnQoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29tcG9uZW50LmhlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICNjaGFydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJjaGFydFwiIC8+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBjb21wb25lbnQgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NvbXBvbmVudCdcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuaXNJbnB1dDsgZWxzZSBub0lucHV0VGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1ob3N0IFtwcm9wZXJ0aWVzXT1cImdldEZlZWxhYmxlUHJvcGVydGllcyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJyZXNvbHZlUGF0aChjb21wb25lbnQucGF0aClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjY29tcG9uZW50SG9zdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJjb21wb25lbnRIb3N0XCIgLz5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0lucHV0VGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1ob3N0IFtwcm9wZXJ0aWVzXT1cImdldEZlZWxhYmxlUHJvcGVydGllcyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NvbXBvbmVudEhvc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiY29tcG9uZW50SG9zdFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcblxyXG4iXX0=
|
|
587
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsaUJBQWlCLEVBQWdELE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJbEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFHN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSS9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUs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QUFFLDBCQUEwQixFQUFFLG9CQUFvQjt3QkFDckUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsd0JBQXdCO3dCQUNwRyxxQkFBcUI7d0JBQ3JCLHdCQUF3QixFQUFFLG9CQUFvQjt3QkFDOUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUNqQjt3QkFDVCxlQUFlO3dCQUNmLHNCQUFzQjt3QkFDdEIsV0FBVzt3QkFDWCxZQUFZO3FCQUNiLGlCQUNjLGlCQUFpQixDQUFDLElBQUk7eWNBRzVCLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24sIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElEeW5hbWljRmllbGRzQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLWZpZWxkcy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTYWZlSHRtbCwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IERhdGVwaWNrZXIgfSBmcm9tICd2YW5pbGxhanMtZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IFNhbml0aXplU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Nhbml0aXplLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXJrZG93blNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tYXJrZG93bi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWltZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9taW1lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXZWFrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3dlYWsuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlZ2lzdGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3JlZ2lzdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2dyaWQuc2VydmljZSc7XHJcbmltcG9ydCB7IENoYXJ0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NoYXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCdXR0b25Db2xvcnMgfSBmcm9tICduZ3gtc2lyaW8tbGliJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvblBhdGNoRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy92YWxpZGF0aW9ucGF0Y2guZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQWRvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYWRvcm5lci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBSZWFkT25seURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcmVhZG9ubHkuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRGlzcGxheURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGlzcGxheS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBSZXBlYXREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3JlcGVhdC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGcmFtZVNlY3VyaXR5RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9mcmFtZXNlY3VyaXR5LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IERyb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kcm9wZG93bi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUYWJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RhYi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBBY2NvcmRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2FjY29yZGlvbi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBHcmlkRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9ncmlkLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENoYW5nZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY2hhbmdlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlZ2lzdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yZWdpc3Rlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBSZWZyZXNoRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yZWZyZXNoLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFVwZGF0ZUJsdXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3VwZGF0ZWJsdXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBOdW1iZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL251bWJlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90ZXh0LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRhYkNvbnRyb2xEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RhYmNvbnRyb2wuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVGFiSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGFiaXRlbS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb2xsYXBzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY29sbGFwc2UuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQWNjb3JkaW9uUGFuZWxEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2FjY29yZGlvbnBhbmVsLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlV3JhcHBlckNvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZC90ZW1wbGF0ZS13cmFwcGVyL3RlbXBsYXRlLXdyYXBwZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRHluYW1pY0hvc3RDb21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWhvc3QvZHluYW1pYy1ob3N0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHRvRXhwcmVzc2lvbiB9IGZyb20gJy4uL3V0aWxzL2ZlZWxhYmxlJztcclxuaW1wb3J0IHsgaXNNZWFuaW5nZnVsIH0gZnJvbSAnLi4vdXRpbHMvaXNNZWFuaW5nZnVsJztcclxuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBTaXJpb0lucHV0Q29tcG9uZW50XHJcbiAgLCBTaXJpb1NlbGVjdENvbXBvbmVudCwgU2lyaW9TZWxlY3RPcHRpb25Db21wb25lbnQsIFNpcmlvU2VsZWN0UGFuZWxDb21wb25lbnRcclxuICAsIFNpcmlvQ2hlY2tib3hHcm91cENvbXBvbmVudCwgU2lyaW9DaGVja2JveENvbXBvbmVudCwgU2lyaW9EYXRlcGlja2VyQ29tcG9uZW50LCBTaXJpb1RpbWVwaWNrZXJDb21wb25lbnRcclxuICAsIFNpcmlvUmFkaW9Hcm91cENvbXBvbmVudCwgU2lyaW9SYWRpb0J1dHRvbkNvbXBvbmVudCwgU2lyaW9UYWJDb21wb25lbnQsIFNpcmlvVGFiSXRlbUNvbXBvbmVudFxyXG4gICwgU2lyaW9BY2NvcmRpb25Db21wb25lbnQsIFNpcmlvQWNjb3JkaW9uUGFuZWxDb21wb25lbnQsIFNpcmlvQWNjb3JkaW9uSGVhZGVyQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvbkJvZHlDb21wb25lbnRcclxuICAsIFNpcmlvQnV0dG9uQ29tcG9uZW50LCBTaXJpb0ZpbGVVcGxvYWRDb21wb25lbnRcclxuICAsIFNpcmlvVG9nZ2xlQ29tcG9uZW50LCBTaXJpb0NoaXBDaGVja2JveEdyb3VwQ29tcG9uZW50LCBTaXJpb0NoaXBSYWRpb0dyb3VwQ29tcG9uZW50LCBTaXJpb0lucHV0Q2hpcENvbXBvbmVudFxyXG4gICwgU2lyaW9BbGVydENvbXBvbmVudCwgU2lyaW9BbGVydE1lc3NhZ2VDb21wb25lbnQsIFNpcmlvU2xpZGVyQ29tcG9uZW50XHJcbiAgLCBTaXJpb05vdGlmeUNvbXBvbmVudCwgU2lyaW9Ob3RpZnlCb2R5Q29tcG9uZW50LCBTaXJpb05vdGlmeUFjdGlvbkNvbXBvbmVudCwgU2lyaW9Ob3RpZnlMaW5rQ29tcG9uZW50XHJcbiAgLCBTaXJpb1Rvb2x0aXBEaXJlY3RpdmVcclxuICAsIE5neFNpcmlvRXZlbnRcclxufSBmcm9tICduZ3gtc2lyaW8tbGliJztcclxuXHJcbmltcG9ydCB7IEFnR3JpZEFuZ3VsYXIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBNb2R1bGUsIEdyaWRPcHRpb25zIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xyXG5pbXBvcnQgeyBBZ0NoYXJ0cyB9IGZyb20gXCJhZy1jaGFydHMtYW5ndWxhclwiO1xyXG5pbXBvcnQgeyBBZ0NoYXJ0T3B0aW9ucyB9IGZyb20gJ2FnLWNoYXJ0cy1jb21tdW5pdHknO1xyXG5cclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQHdlbWFrZTR1L2ludGVyYWN0JztcclxuaW1wb3J0IHsgVGV4dHMgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxlJztcclxuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxpemUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZHluYW1pYy1maWVsZHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9keW5hbWljLWZpZWxkcy5jb21wb25lbnQuY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXHJcbiAgICAsIEFkb3JuZXJEaXJlY3RpdmUsIFJlYWRPbmx5RGlyZWN0aXZlLCBEaXNwbGF5RGlyZWN0aXZlLCBGcmFtZVNlY3VyaXR5RGlyZWN0aXZlLCBWYWxpZGF0aW9uUGF0Y2hEaXJlY3RpdmVcclxuICAgICwgRHJvcGRvd25EaXJlY3RpdmUsIFVwZGF0ZUJsdXJEaXJlY3RpdmUsIFJlcGVhdERpcmVjdGl2ZSwgVGFiRGlyZWN0aXZlLCBHcmlkRGlyZWN0aXZlLCBDaGFuZ2VEaXJlY3RpdmVcclxuICAgICwgUmVnaXN0ZXJEaXJlY3RpdmUsIFJlZnJlc2hEaXJlY3RpdmUsIEFjY29yZGlvbkRpcmVjdGl2ZSwgRGF0ZURpcmVjdGl2ZSwgTnVtYmVyRGlyZWN0aXZlLCBUZXh0RGlyZWN0aXZlXHJcbiAgICAsIFRhYkNvbnRyb2xEaXJlY3RpdmUsIFRhYkl0ZW1EaXJlY3RpdmUsIENvbGxhcHNlRGlyZWN0aXZlLCBBY2NvcmRpb25QYW5lbERpcmVjdGl2ZVxyXG4gICAgLCBTaXJpb0lucHV0Q29tcG9uZW50XHJcbiAgICAsIFNpcmlvU2VsZWN0Q29tcG9uZW50LCBTaXJpb1NlbGVjdE9wdGlvbkNvbXBvbmVudCwgU2lyaW9TZWxlY3RQYW5lbENvbXBvbmVudFxyXG4gICAgLCBTaXJpb0NoZWNrYm94R3JvdXBDb21wb25lbnQsIFNpcmlvQ2hlY2tib3hDb21wb25lbnQsIFNpcmlvRGF0ZXBpY2tlckNvbXBvbmVudCwgU2lyaW9UaW1lcGlja2VyQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvUmFkaW9Hcm91cENvbXBvbmVudCwgU2lyaW9SYWRpb0J1dHRvbkNvbXBvbmVudCwgU2lyaW9UYWJDb21wb25lbnQsIFNpcmlvVGFiSXRlbUNvbXBvbmVudFxyXG4gICAgLCBTaXJpb0FjY29yZGlvbkNvbXBvbmVudCwgU2lyaW9BY2NvcmRpb25QYW5lbENvbXBvbmVudCwgU2lyaW9BY2NvcmRpb25IZWFkZXJDb21wb25lbnQsIFNpcmlvQWNjb3JkaW9uQm9keUNvbXBvbmVudFxyXG4gICAgLCBTaXJpb0J1dHRvbkNvbXBvbmVudCwgU2lyaW9GaWxlVXBsb2FkQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvVG9nZ2xlQ29tcG9uZW50LCBTaXJpb0NoaXBDaGVja2JveEdyb3VwQ29tcG9uZW50LCBTaXJpb0NoaXBSYWRpb0dyb3VwQ29tcG9uZW50LCBTaXJpb0lucHV0Q2hpcENvbXBvbmVudFxyXG4gICAgLCBTaXJpb0FsZXJ0Q29tcG9uZW50LCBTaXJpb0FsZXJ0TWVzc2FnZUNvbXBvbmVudCwgU2lyaW9TbGlkZXJDb21wb25lbnRcclxuICAgICwgU2lyaW9Ob3RpZnlDb21wb25lbnQsIFNpcmlvTm90aWZ5Qm9keUNvbXBvbmVudCwgU2lyaW9Ob3RpZnlBY3Rpb25Db21wb25lbnQsIFNpcmlvTm90aWZ5TGlua0NvbXBvbmVudFxyXG4gICAgLCBTaXJpb1Rvb2x0aXBEaXJlY3RpdmVcclxuICAgICwgVGVtcGxhdGVXcmFwcGVyQ29tcG9uZW50LCBEeW5hbWljSG9zdENvbXBvbmVudFxyXG4gICAgLCBBZ0dyaWRBbmd1bGFyLCBBZ0NoYXJ0c10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBSZWdpc3RlclNlcnZpY2UsXHJcbiAgICBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlLFxyXG4gICAgR3JpZFNlcnZpY2UsXHJcbiAgICBDaGFydFNlcnZpY2VcclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIER5bmFtaWNGaWVsZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIElEeW5hbWljRmllbGRzQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSByb3dzOiBBcnJheTxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBhbGlnbm1lbnQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgcmVhZE9ubHk6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgVGV4dHMgPSBUZXh0cztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IFNhbml0aXplU2VydmljZVxyXG4gICAgLCBwcml2YXRlIG1hcmtkb3duOiBNYXJrZG93blNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBtaW1lOiBNaW1lU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHByb2dyYW1tYWJpbGl0eTogUHJvZ3JhbW1hYmlsaXR5U2VydmljZVxyXG4gICAgLCBwcml2YXRlIHdlYWs6IFdlYWtTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgcmVnaXN0ZXI6IFJlZ2lzdGVyU2VydmljZVxyXG4gICAgLCBwcml2YXRlIG1ldGFkYXRhOiBNZXRhZGF0YVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGdsb2JhbDogR2xvYmFsU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGdyaWQ6IEdyaWRTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgY2hhcnQ6IENoYXJ0U2VydmljZVxyXG4gICAgLCBwcml2YXRlIGRpYWxvZzogRGlhbG9nU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGVsOiBFbGVtZW50UmVmXHJcbiAgKVxyXG4gIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQgeyAgICBcclxuICAgIHRoaXMuY29uZmlndXJlRGF0ZXBpY2tlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9jdXNGaXJzdCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRSZWdpc3RlcigpOiBSZWdpc3RlclNlcnZpY2Uge1xyXG4gICAgcmV0dXJuIHRoaXMucmVnaXN0ZXI7XHJcbiAgfVxyXG5cclxuICBnZXRDbGFzcyhjb21wb25lbnQ6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb2xIb3N0ID0gXCJjb2wtaG9zdCBcIjtcclxuICAgIGlmIChjb21wb25lbnQubGF5b3V0Py5jb2x1bW5zKSB7XHJcbiAgICAgIHJldHVybiBjb2xIb3N0ICsgXCJjb2wtbWQtXCIgKyBjb21wb25lbnQubGF5b3V0Py5jb2x1bW5zO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBjb2xIb3N0ICsgXCJjb2xcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRleHRGZWVkYmFjayhjb21wb25lbnQ6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtU2VydmljZS5nZXRDb250cm9sKHRoaXMuZm9ybUdyb3VwLCBbY29tcG9uZW50LnBhdGgsIGNvbXBvbmVudC5rZXldKTtcclxuICAgIHJldHVybiAhY29udHJvbCB8fCBjb250cm9sLnZhbGlkIHx8ICFjb250cm9sLmVycm9yc1xyXG4gICAgICA/ICcnXHJcbiAgICAgIDogY29udHJvbC5lcnJvcnNbJ21lc3NhZ2UnXTsgXHJcbiAgfVxyXG5cclxuICBpc1dhcm5pbmcoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1TZXJ2aWNlLmdldENvbnRyb2wodGhpcy5mb3JtR3JvdXAsIFtjb21wb25lbnQucGF0aCwgY29tcG9uZW50LmtleV0pO1xyXG4gICAgcmV0dXJuIChjb250cm9sICYmIGNvbnRyb2wuZXJyb3JzICYmIGNvbnRyb2wuZXJyb3JzWyd3YXJuaW5nJ10pIHx8IGZhbHNlXHJcbiAgfVxyXG5cclxuICBsb2NhbGUoY29tcG9uZW50OiBhbnksIGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbGl6ZSh0aGlzLmxhbmd1YWdlLCBjb21wb25lbnQsIGtleSk7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZVN0cmluZyh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVTdHJpbmcodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTsgICAgXHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZUJvb2xlYW4odmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlQm9vbGVhbih0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVOdW1iZXIodmFsdWU6IG51bWJlciB8IHN0cmluZyB8IG51bGwpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZU51bWJlcih0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVVcmwodmFsdWU6IHN0cmluZyB8IG51bGwpOiBTYWZlUmVzb3VyY2VVcmwge1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVTdHJpbmcodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTtcclxuICAgIGNvbnN0IHdhdGNoS2V5ID0gYDpzYWZlVXJsKCR7dXJsfSlgO1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKHRoaXMuZm9ybUdyb3VwLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemVTYWZlVXJsKHVybCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlSGVpZ2h0KHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZSArIFwicHhcIjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZSh0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIHJldHVybiByZXN1bHQgKyBcInB4XCI7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcblxyXG4gIGV2YWx1YXRlVGVtcGxhdGUodmFsdWU6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlVGVtcGxhdGUodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlKHRleHQ6IHN0cmluZyB8IG51bGwsIGNhY2hlYWJsZTogYm9vbGVhbiA9IHRydWUpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKHRoaXMuZm9ybUdyb3VwLCB0ZXh0LCB7XHJcbiAgICAgIGNhY2hlYWJsZTogY2FjaGVhYmxlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlQ29sb3IodmFsdWU6IHN0cmluZyB8IG51bGwpOiBCdXR0b25Db2xvcnMgfCBudWxsIHtcclxuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5ldmFsdWF0ZVN0cmluZyh2YWx1ZSk7XHJcbiAgICBjb25zdCB3YXRjaEtleSA9IGA6YnV0dG9uQ29sb3IoJHtjb2xvcn0pYDtcclxuICAgIHJldHVybiB0aGlzLndlYWsuY2FsbCh0aGlzLmZvcm1Hcm91cCwgd2F0Y2hLZXksICgpID0+IHtcclxuICAgICAgaWYgKGNvbG9yID09PSBcImdob3N0XCIpXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNvbnN0IHZhbGlkQ29sb3JzOiBCdXR0b25Db2xvcnNbXSA9IFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAndGVydGlhcnknLCAndGVydGlhcnktbGlnaHQnLCAnZGFuZ2VyJ107XHJcbiAgICAgIHJldHVybiB2YWxpZENvbG9ycy5pbmNsdWRlcyhjb2xvciBhcyBCdXR0b25Db2xvcnMpID8gKGNvbG9yIGFzIEJ1dHRvbkNvbG9ycykgOiAncHJpbWFyeSc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlQ29uZGl0aW9uYWwoY29uZGl0aW9uYWw6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaGlkZSA9IHRoaXMuZXZhbHVhdGVCb29sZWFuKGNvbmRpdGlvbmFsPy5oaWRlKTtcclxuICAgIGNvbnN0IHNob3cgPSB0aGlzLmV2YWx1YXRlQm9vbGVhbihjb25kaXRpb25hbD8uc2hvdyk7XHJcbiAgICBcclxuICAgIHJldHVybiAhKGhpZGUgPT09IHRydWUgfHwgc2hvdyA9PT0gZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcGxhdGUodmFsdWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZXRhZGF0YS5nZXRGb3JtQnlOYW1lKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1Hcm91cChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsKTogRm9ybUdyb3VwIHtcclxuICAgIGlmICghKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29udHJvbCBpcyBub3QgYSBGb3JtR3JvdXAnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb250cm9sO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUFycmF5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwpOiBGb3JtQXJyYXkge1xyXG4gICAgaWYgKCEoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb250cm9sIGlzIG5vdCBhIEZvcm1BcnJheScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICByZXNvbHZlUGF0aChwYXRoOiBzdHJpbmcgfCBudWxsKTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLmdldEZvcm1Hcm91cCh0aGlzLmdldENvbnRyb2xGcm9tUGF0aChwYXRoKSlcclxuICB9XHJcblxyXG4gIHRvSFRNTCh0ZXh0OiBzdHJpbmcpOiBTYWZlSHRtbCB7XHJcbiAgICBjb25zdCB3YXRjaEtleSA9IGA6c2FmZUh0bWwoJHt0ZXh0fSlgO1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKHRoaXMuZm9ybUdyb3VwLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICBjb25zdCBodG1sID0gdGhpcy5tYXJrZG93bi50b0h0bWwodGV4dCk7XHJcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5zYW5pdGl6ZVNhZmVIdG1sKGh0bWwpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgc2FuaXRpemUoaHRtbDogc3RyaW5nKTogU2FmZUh0bWwge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLnNhbml0aXplU2FmZUh0bWwoaHRtbCk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0TWltZVR5cGVzKGV4dGVuc2lvbnM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5taW1lLmdldE1pbWVUeXBlcyhleHRlbnNpb25zKTtcclxuICB9O1xyXG5cclxuICBjbGlja0J1dHRvbihjb21wb25lbnQ6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudC5jbGljaykge1xyXG4gICAgICB0aGlzLmV2YWx1YXRlKGNvbXBvbmVudC5jbGljaywgZmFsc2UpO1xyXG4gICAgfSAgICBcclxuICB9XHJcblxyXG4gIGhhc1ZhbHVlcyhjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFjb21wb25lbnQpIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IHsgdmFsdWVzLCB2YWx1ZXNLZXksIHZhbHVlc0V4cHJlc3Npb24gfSA9IGNvbXBvbmVudDtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGlzTWVhbmluZ2Z1bCh2YWx1ZXMpIHx8XHJcbiAgICAgIGlzTWVhbmluZ2Z1bCh2YWx1ZXNLZXkpIHx8XHJcbiAgICAgIGlzTWVhbmluZ2Z1bCh2YWx1ZXNFeHByZXNzaW9uKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFZhbHVlcyhjb21wb25lbnQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoY29tcG9uZW50LnZhbHVlcykge1xyXG4gICAgICAvLyBTdGF0aWNcclxuICAgICAgcmV0dXJuIG9mKGNvbXBvbmVudC52YWx1ZXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29tcG9uZW50LnZhbHVlc0tleSkge1xyXG4gICAgICAvLyBGaWVsZCB2YWx1ZVxyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmV2YWx1YXRlKGNvbXBvbmVudC52YWx1ZXNLZXkpO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRBc09ic2VydmFibGUocmVzdWx0KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbXBvbmVudC52YWx1ZXNFeHByZXNzaW9uKSB7XHJcbiAgICAgIC8vIEV4cHJlc3Npb25cclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ldmFsdWF0ZShjb21wb25lbnQudmFsdWVzRXhwcmVzc2lvbik7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEFzT2JzZXJ2YWJsZShyZXN1bHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIE5vdGhpbmdcclxuICAgICAgcmV0dXJuIHRoaXMubm9EYXRhO1xyXG4gICAgfSAgICBcclxuICB9XHJcblxyXG4gIHJlZnJlc2hWYWx1ZXMoY29tcG9uZW50OiBhbnkpOiAoKSA9PiB2b2lkIHtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIGlmIChjb21wb25lbnQudmFsdWVzS2V5KSB7XHJcbiAgICAgICAgdGhpcy5pbnZhbGlkYXRlKGNvbXBvbmVudC52YWx1ZXNLZXkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGNvbXBvbmVudC52YWx1ZXNFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgdGhpcy5pbnZhbGlkYXRlKGNvbXBvbmVudC52YWx1ZXNFeHByZXNzaW9uKTtcclxuICAgICAgfSAgXHJcbiAgICB9OyAgXHJcbiAgfVxyXG5cclxuICB0b0xhYmVsKHZhbHVlOiBhbnksIGxpc3Q6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IGFueSB9Pik6IGFueSB7XHJcbiAgICBpZiAoIWxpc3QgfHwgIUFycmF5LmlzQXJyYXkobGlzdCkgfHwgbGlzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ2V0TGFiZWwgPSAodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBpdGVtID0gbGlzdC5maW5kKHggPT4geC52YWx1ZSA9PT0gdmFsdWUpO1xyXG4gICAgICByZXR1cm4gaXRlbSA/IGl0ZW0ubGFiZWwgOiB2YWx1ZTtcclxuICAgIH1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWUubWFwKHYgPT4gZ2V0TGFiZWwodikpLmpvaW4oJywgJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIGdldExhYmVsKHZhbHVlKTsgICAgICBcclxuICAgIH0gICAgXHJcbiAgfVxyXG5cclxuICBzdXBwb3J0VmFsdWVzKGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWNvbXBvbmVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIGNvbXBvbmVudC5maWVsZHR5cGUgPT09ICdzZWxlY3QnIHx8IGNvbXBvbmVudC5maWVsZHR5cGUgPT09ICd0YWdsaXN0JztcclxuICB9XHJcblxyXG4gIGdldENoYXJ0T3B0aW9ucyhjb21wb25lbnQ6IGFueSk6IE9ic2VydmFibGU8QWdDaGFydE9wdGlvbnM+IHtcclxuICAgIHJldHVybiB0aGlzLndlYWsuY2FsbChjb21wb25lbnQsIGBnZXRDaGFydE9wdGlvbnNfJHt0aGlzLmxhbmd1YWdlfWBcclxuICAgICAgLCAoKSA9PiB0aGlzLmNoYXJ0LmdldE9wdGlvbnMoY29tcG9uZW50LCB0aGlzLmZvcm1Hcm91cCkpO1xyXG4gIH1cclxuXHJcbiAgaW52YWxpZGF0ZUNoYXJ0KGNvbXBvbmVudDogYW55KTogKCkgPT4gdm9pZCB7XHJcbiAgICByZXR1cm4gKCkgPT4gdGhpcy53ZWFrLmludmFsaWRhdGUoY29tcG9uZW50LCBgZ2V0Q2hhcnRPcHRpb25zXyR7dGhpcy5sYW5ndWFnZX1gKTtcclxuICB9XHJcblxyXG4gIGdldENoYXJ0RGF0YShjb21wb25lbnQ6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5jaGFydC5nZXREYXRhRXhwcmVzc2lvbihjb21wb25lbnQpO1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKHRoaXMuZm9ybUdyb3VwLCBleHByZXNzaW9uKTtcclxuICB9XHJcblxyXG4gIGdldEdyaWRPcHRpb25zKGNvbXBvbmVudDogYW55KTogR3JpZE9wdGlvbnMgeyAgICBcclxuICAgIHJldHVybiB0aGlzLndlYWsuY2FsbChjb21wb25lbnQsIHRoaXMuZ3JpZC5nZXRDYWNoZUtleSgpXHJcbiAgICAgICwgKCkgPT4gdGhpcy5ncmlkLmdldE9wdGlvbnMoY29tcG9uZW50LCB0aGlzLmZvcm1Hcm91cCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0R3JpZE1vZHVsZXMoY29tcG9uZW50OiBhbnkpOiBNb2R1bGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwoY29tcG9uZW50LCAnZ2V0R3JpZE1vZHVsZXMnLCAoKSA9PiB0aGlzLmdyaWQuZ2V0TW9kdWxlcygpKTtcclxuICB9XHJcblxyXG4gIG9uR3JpZFNlbGVjdGlvbkNoYW5nZWQoY29tcG9uZW50OiBhbnksIGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuZ3JpZC5vblNlbGVjdGlvbkNoYW5nZWQoY29tcG9uZW50LCB0aGlzLmZvcm1Hcm91cCwgZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um93U291cmNlKGNvbXBvbmVudDogYW55KTogYW55IHtcclxuICAgIGlmIChjb21wb25lbnQuZGF0YVNvdXJjZSkge1xyXG4gICAgICAvLyBFeHByZXNzaW9uXHJcbiAgICAgIHJldHVybiB0aGlzLmV2YWx1YXRlKGNvbXBvbmVudC5kYXRhU291cmNlLCB0cnVlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBOb3RoaW5nXHJcbiAgICAgIHJldHVybiB0aGlzLm5vRGF0YTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZnJlc2hSb3dTb3VyY2UoY29tcG9uZW50OiBhbnkpOiAoKSA9PiB2b2lkIHtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIGlmIChjb21wb25lbnQuZGF0YVNvdXJjZSkge1xyXG4gICAgICAgIHRoaXMuaW52YWxpZGF0ZShjb21wb25lbnQuZGF0YVNvdXJjZSk7XHJcbiAgICAgIH0gIFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGFkZEl0ZW0oZm9ybUFycmF5OiBGb3JtQXJyYXkpIHtcclxuICAgIChmb3JtQXJyYXkgYXMgYW55KS5hZGRJdGVtKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVJdGVtKGZvcm1BcnJheTogRm9ybUFycmF5LCBpbmRleDogbnVtYmVyLCB3aXRoQ29uZmlybTogYm9vbGVhbikge1xyXG4gICAgaWYgKHdpdGhDb25maXJtKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nLmNvbmZpcm0odGhpcy5sb2NhbGUoVGV4dHMsICdDb25maXJtRGVsZXRlJyksIHtcclxuICAgICAgICBcInRpdGxlXCI6IHRoaXMubG9jYWxlKFRleHRzLCAnQ29uZmlybScpLFxyXG4gICAgICAgIFwiYnV0dG9uc1wiOiBcIkNvbmZpcm1DYW5jZWxcIixcclxuICAgICAgICBcIm9uUmVzdWx0XCI6IChyZXN1bHQpID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQuYWN0aW9uID09PSBcIlllc1wiKSB7XHJcbiAgICAgICAgICAgIGZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBmb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbW92ZVVwSXRlbShmb3JtQXJyYXk6IEZvcm1BcnJheSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgY29udHJvbDogQWJzdHJhY3RDb250cm9sID0gZm9ybUFycmF5LmF0KGluZGV4KTtcclxuICAgIGZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICBmb3JtQXJyYXkuaW5zZXJ0KGluZGV4IC0gMSwgY29udHJvbCk7XHJcbiAgfVxyXG5cclxuICBtb3ZlRG93bkl0ZW0oZm9ybUFycmF5OiBGb3JtQXJyYXksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCA9IGZvcm1BcnJheS5hdChpbmRleCk7XHJcbiAgICBmb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgZm9ybUFycmF5Lmluc2VydChpbmRleCArIDEsIGNvbnRyb2wpOyAgICBcclxuICB9XHJcblxyXG4gIGNyZWF0ZVVwbG9hZFRhYmxlcyhjb21wb25lbnQ6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwoY29tcG9uZW50LCAnY3JlYXRlVXBsb2FkVGFibGVzJywgKCkgPT4ge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbXBvbmVudHM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInRhYmxlXCIsXHJcbiAgICAgICAgICAgICAgXCJsYXlvdXRcIjoge1xyXG4gICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IG51bGxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogdGhpcy5sb2NhbGUoVGV4dHMsICdOYW1lJyksXHJcbiAgICAgICAgICAgICAgICAgIFwia2V5XCI6IFwibmFtZVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZsZXhcIjogMVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiB0aGlzLmxvY2FsZShUZXh0cywgJ1NpemUnKSxcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJzaXplXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICAgICAgICBcImFsaWduXCI6IFwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiB0aGlzLmxvY2FsZShUZXh0cywgJ1R5cGUnKSxcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJ0eXBlXCIgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwia2V5XCI6IFwidXJsXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiA1MCxcclxuICAgICAgICAgICAgICAgICAgXCJhbGlnblwiOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvcm1hdFwiOiBcIm9iamVjdFVSTFwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwid2lkdGhcIjogNTAsXHJcbiAgICAgICAgICAgICAgICAgIFwiYWxpZ25cIjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJkZWxldGVSb3dcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgXCJkYXRhU291cmNlXCI6IFwiPVwiICsgY29tcG9uZW50LmtleSxcclxuICAgICAgICAgICAgICBcImhlaWdodFwiOiAyMDAsXHJcbiAgICAgICAgICAgICAgXCJjb25kaXRpb25hbFwiOiBjb21wb25lbnQuY29uZGl0aW9uYWwsXHJcbiAgICAgICAgICAgICAgXCJkaXNhYmxlZFwiOiBjb21wb25lbnQuZGlzYWJsZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmlsZVVwbG9hZGVkKCRldmVudDogTmd4U2lyaW9FdmVudDxTaXJpb0ZpbGVVcGxvYWRDb21wb25lbnQ+KSB7XHJcbiAgICBjb25zdCByZW1vdmVGaWxlID0gKGZpbGU6IEZpbGUpID0+IHtcclxuICAgICAgaWYgKCRldmVudC5jb21wb25lbnQuY29udHJvbCkge1xyXG4gICAgICAgIGNvbnN0IG5ld0ZpbGVzID0gJGV2ZW50LmNvbXBvbmVudC5maWxlTGlzdC5maWx0ZXIoZiA9PiBmICE9PSBmaWxlKTtcclxuICAgICAgICAkZXZlbnQuY29tcG9uZW50LmNvbnRyb2wuc2V0VmFsdWUobmV3RmlsZXMpO1xyXG4gICAgICAgIGFkZFJlbW92ZShuZXdGaWxlcyk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0ZpbGVzO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhZGRSZW1vdmUgPSAoZmlsZXM6IEZpbGVbXSkgPT4ge1xyXG4gICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAgIGlmICghKCdyZW1vdmUnIGluIGZpbGUpKSB7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmlsZSwgJ3JlbW92ZScsIHtcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZW1vdmVGaWxlKHRoaXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgfSk7IFxyXG4gICAgfTtcclxuXHJcbiAgICBhZGRSZW1vdmUoJGV2ZW50LmNvbXBvbmVudC5maWxlTGlzdCk7XHJcbiAgfVxyXG5cclxuICBnZXRGZWVsYWJsZVByb3BlcnRpZXMoY29tcG9uZW50OiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCB7XHJcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gY29tcG9uZW50LnByb3BlcnRpZXM7XHJcbiAgICBpZiAodHlwZW9mIHByb3BlcnRpZXMgPT09ICdvYmplY3QnICYmIHByb3BlcnRpZXMgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkocHJvcGVydGllcykpIHtcclxuICAgICAgY29uc3QgZmVlbGFibGUgPSB0b0V4cHJlc3Npb24ocHJvcGVydGllcyk7XHJcbiAgICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZSh0aGlzLmZvcm1Hcm91cCwgZmVlbGFibGUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0R3JvdXBPdXRsaW5lKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnZ3JvdXAtb3V0bGluZSc6IGNvbXBvbmVudC5zaG93T3V0bGluZSA9PT0gdHJ1ZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1BbGlnbm1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRBbGlnbm1lbnRSdWxlcyhcInZhbGlnblwiLCB0aGlzLmFsaWdubWVudCk7ICAgICAgICBcclxuICB9XHJcblxyXG4gIGdldENvbXBvbmVudEFsaWdubWVudChjb21wb25lbnQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxpZ25tZW50UnVsZXMoXCJjb21wb25lbnRcIiwgY29tcG9uZW50LnNlbGZBbGlnbm1lbnQpOyAgICBcclxuICB9XHJcblxyXG4gIGdldFRleHRBbGlnbm1lbnQoY29tcG9uZW50OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChjb21wb25lbnQudGV4dEFsaWduKSB7XHJcbiAgICAgIGNhc2UgJ2xlZnQnOiByZXR1cm4gXCJ0ZXh0LWxlZnRcIlxyXG4gICAgICBjYXNlICdjZW50ZXInOiByZXR1cm4gXCJ0ZXh0LWNlbnRlclwiXHJcbiAgICAgIGNhc2UgJ3JpZ2h0JzogcmV0dXJuIFwidGV4dC1yaWdodFwiXHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SG9yaXpvbnRhbEFsaWdubWVudChjb21wb25lbnQ6IGFueSkge1xyXG4gICAgY29uc3QgYWxpZ25tZW50ID0gY29tcG9uZW50Lmhvcml6b250YWxBbGlnbm1lbnQ7XHJcbiAgICBjb25zdCBydWxlTmFtZSA9IFwiaG9yaXpvbnRhbFwiO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgW2Ake3J1bGVOYW1lfS1sZWZ0YF06IGFsaWdubWVudCA9PT0gJ2xlZnQnLFxyXG4gICAgICBbYCR7cnVsZU5hbWV9LWNlbnRlcmBdOiBhbGlnbm1lbnQgPT09ICdjZW50ZXInLFxyXG4gICAgICBbYCR7cnVsZU5hbWV9LXJpZ2h0YF06IGFsaWdubWVudCA9PT0gJ3JpZ2h0JyxcclxuICAgICAgW2Ake3J1bGVOYW1lfS1maWxsYF06IGFsaWdubWVudCA9PT0gJ2ZpbGwnXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0TGlnaHRWaWV3KGNvbXBvbmVudDogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNsYXNzTmFtZSA9ICdsaWdodC12aWV3JztcclxuICAgIGNvbnN0IHZhbHVlID0gY29tcG9uZW50LnByb3BlcnRpZXM/LnVzZUxpZ2h0UmVhZG9ubHlcclxuICAgICAgfHwgdGhpcy5nbG9iYWwuZ2V0UHJvcGVydHkoXCJ1c2VMaWdodFJlYWRvbmx5XCIsIFwieWVzXCIpO1xyXG4gICAgaWYgKHZhbHVlICE9PSBcInllc1wiICYmIHZhbHVlICE9PSBcIm5vXCIpXHJcbiAgICAgIHJldHVybiBjbGFzc05hbWU7XHJcbiAgICByZXR1cm4gKHZhbHVlID09PSBcInllc1wiKSA/IGNsYXNzTmFtZSA6IFwiXCI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5vRGF0YTogT2JzZXJ2YWJsZTxhbnk+ID0gb2YoW10pO1xyXG5cclxuICBwcml2YXRlIGdldCBsYW5ndWFnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmd1YWdlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFsaWdubWVudFJ1bGVzKHJ1bGVOYW1lOiBzdHJpbmcsIGFsaWdubWVudDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBbYCR7cnVsZU5hbWV9LXN0YXJ0YF06IGFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuICAgICAgW2Ake3J1bGVOYW1lfS1jZW50ZXJgXTogYWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuICAgICAgW2Ake3J1bGVOYW1lfS1lbmRgXTogYWxpZ25tZW50ID09PSAnZW5kJ1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW52YWxpZGF0ZSh0ZXh0OiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuaW52YWxpZGF0ZSh0ZXh0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29udHJvbEZyb21QYXRoKHBhdGg6IHN0cmluZyB8IG51bGwpOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSBwYXRoXHJcbiAgICAgID8gdGhpcy5mb3JtR3JvdXAuZ2V0KHBhdGgpXHJcbiAgICAgIDogdGhpcy5mb3JtR3JvdXA7XHJcblxyXG4gICAgaWYgKCFjb250cm9sKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRm9ybUdyb3VwIGRvZXMgbm90IGNvbnRhaW4gYSBjb250cm9sIHdpdGggcGF0aCAnJHtwYXRofSdgLCB7IGNhdXNlOiB0aGlzLmZvcm1Hcm91cCB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb250cm9sO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c0ZpcnN0KCkge1xyXG4gICAgY29uc3QgZm9jdXNhYmxlRWxlbWVudHMgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgJ2J1dHRvbiwgW2hyZWZdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJ1xyXG4gICAgKTtcclxuXHJcbiAgICBmb3IgKGxldCBlbCBvZiBmb2N1c2FibGVFbGVtZW50cykge1xyXG4gICAgICBpZiAoIShlbCBhcyBIVE1MRWxlbWVudCkuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XHJcbiAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5mb2N1cygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFzT2JzZXJ2YWJsZSh2YWx1ZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmIChpc09ic2VydmFibGUodmFsdWUpKVxyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICByZXR1cm4gb2YodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25maWd1cmVEYXRlcGlja2VyKCkge1xyXG4gICAgKERhdGVwaWNrZXIubG9jYWxlcyBhcyBhbnkpWydpdCddID0ge1xyXG4gICAgICBkYXlzOiBbXHJcbiAgICAgICAgJ0RvbWVuaWNhJyxcclxuICAgICAgICAnTHVuZWTDrCcsXHJcbiAgICAgICAgJ01hcnRlZMOsJyxcclxuICAgICAgICAnTWVyY29sZWTDrCcsXHJcbiAgICAgICAgJ0dpb3ZlZMOsJyxcclxuICAgICAgICAnVmVuZXJkw6wnLFxyXG4gICAgICAgICdTYWJhdG8nLFxyXG4gICAgICBdLFxyXG4gICAgICBkYXlzTWluOiBbJ0RvbScsICdMdW4nLCAnTWFyJywgJ01lcicsICdHaW8nLCAnVmVuJywgJ1NhYiddLFxyXG4gICAgICBtb250aHM6IFtcclxuICAgICAgICAnR2VubmFpbycsXHJcbiAgICAgICAgJ0ZlYmJyYWlvJyxcclxuICAgICAgICAnTWFyem8nLFxyXG4gICAgICAgICdBcHJpbGUnLFxyXG4gICAgICAgICdNYWdnaW8nLFxyXG4gICAgICAgICdHaXVnbm8nLFxyXG4gICAgICAgICdMdWdsaW8nLFxyXG4gICAgICAgICdBZ29zdG8nLFxyXG4gICAgICAgICdTZXR0ZW1icmUnLFxyXG4gICAgICAgICdPdHRvYnJlJyxcclxuICAgICAgICAnTm92ZW1icmUnLFxyXG4gICAgICAgICdEaWNlbWJyZScsXHJcbiAgICAgIF0sXHJcbiAgICAgIG1vbnRoc1Nob3J0OiBbXHJcbiAgICAgICAgJ0dlbicsXHJcbiAgICAgICAgJ0ZlYicsXHJcbiAgICAgICAgJ01hcicsXHJcbiAgICAgICAgJ0FwcicsXHJcbiAgICAgICAgJ01hZycsXHJcbiAgICAgICAgJ0dpdScsXHJcbiAgICAgICAgJ0x1ZycsXHJcbiAgICAgICAgJ0FnbycsXHJcbiAgICAgICAgJ1NldCcsXHJcbiAgICAgICAgJ090dCcsXHJcbiAgICAgICAgJ05vdicsXHJcbiAgICAgICAgJ0RpYycsXHJcbiAgICAgIF0sXHJcbiAgICAgIHRvZGF5OiAnT2dnaScsXHJcbiAgICAgIGNsZWFyOiAnUHVsaXNjaScsXHJcbiAgICAgIGZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG4gICAgICB3ZWVrU3RhcnQ6IDFcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG4iLCI8ZGl2IFtuZ0NsYXNzXT1cImdldEZvcm1BbGlnbm1lbnQoKVwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dzXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZmllbGQtc2V0XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbXBvbmVudCBvZiByb3cuY29tcG9uZW50c1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBvbmVudC50eXBlXCI+XHJcbiAgICAgICAgICA8ZGl2IFtjbGFzc109XCJnZXRDbGFzcyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q29tcG9uZW50QWxpZ25tZW50KGNvbXBvbmVudClcIj5cclxuICAgICAgICAgICAgPGRpdiBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIj5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdGV4dGZpZWxkIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0ZmllbGQnXCIgW2Zvcm1Hcm91cF09XCJyZXNvbHZlUGF0aChjb21wb25lbnQucGF0aClcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsb2NhbGUoY29tcG9uZW50LCAncGxhY2Vob2xkZXInKSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeEFkb3JuZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmFwcGVhcmFuY2U/LnByZWZpeEFkb3JuZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1ZmZpeEFkb3JuZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmFwcGVhcmFuY2U/LnN1ZmZpeEFkb3JuZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRPbmx5IHx8IGV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiY29tcG9uZW50LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dGNhc2VdPVwiY29tcG9uZW50LnRleHRDYXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heGxlbmd0aF09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQubWF4TGVuZ3RoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldFRleHRBbGlnbm1lbnQoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJsdXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0ZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGV4dGZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby1pbnB1dD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHNlbGVjdCAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiIFtmb3JtR3JvdXBdPVwicmVzb2x2ZVBhdGgoY29tcG9uZW50LnBhdGgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdCBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsb2NhbGUoY29tcG9uZW50LCAncGxhY2Vob2xkZXInKSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRPbmx5IHx8IGV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImNvbXBvbmVudC5wcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWZyZXNoXT1cInJlZnJlc2hWYWx1ZXMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wZG93blxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3NlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdC1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWlucHV0ICpuZ0lmPVwiY29tcG9uZW50LnNlYXJjaGFibGVcIiBjbGFzcz1cInNlYXJjaGFibGVcIiB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJsb2NhbGUoVGV4dHMsICdUeXBlVG9TZWFyY2gnKVwiPjwvbmd4LXNpcmlvLWlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj57eyBsb2NhbGUob3B0aW9uLCAnbGFiZWwnKSB9fTwvbmd4LXNpcmlvLXNlbGVjdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNlbGVjdC1wYW5lbD5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNlbGVjdD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHRhZ2xpc3QgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhZ2xpc3QnXCIgW2Zvcm1Hcm91cF09XCJyZXNvbHZlUGF0aChjb21wb25lbnQucGF0aClcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0IFthcmlhTGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FyaWFMYWJlbCcpIHx8IGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxvY2FsZShjb21wb25lbnQsICdwbGFjZWhvbGRlcicpIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZE9ubHkgfHwgZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiY29tcG9uZW50LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTXVsdGlwbGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVmcmVzaF09XCJyZWZyZXNoVmFsdWVzKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RhZ2xpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0YWdsaXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0LXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj57eyBsb2NhbGUob3B0aW9uLCAnbGFiZWwnKSB9fTwvbmd4LXNpcmlvLXNlbGVjdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNlbGVjdC1wYW5lbD5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNlbGVjdD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIG51bWJlciAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiIFtmb3JtR3JvdXBdPVwicmVzb2x2ZVBhdGgoY29tcG9uZW50LnBhdGgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsb2NhbGUoY29tcG9uZW50LCAncGxhY2Vob2xkZXInKSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeEFkb3JuZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmFwcGVhcmFuY2U/LnByZWZpeEFkb3JuZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1ZmZpeEFkb3JuZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmFwcGVhcmFuY2U/LnN1ZmZpeEFkb3JuZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRPbmx5IHx8IGV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiY29tcG9uZW50LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRUZXh0QWxpZ25tZW50KGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQuZGVmYXVsdFZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5pbXVtXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5taW5pbXVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhpbXVtXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5tYXhpbXVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWNpbWFsRGlnaXRzXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5kZWNpbWFsRGlnaXRzKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJsdXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNudW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwibnVtYmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby1pbnB1dD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRhdGV0aW1lIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRldGltZSdcIiBbZm9ybUdyb3VwXT1cInJlc29sdmVQYXRoKGNvbXBvbmVudC5wYXRoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRhdGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tZGF0ZXBpY2tlciBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhRGF0ZUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ2RhdGVMYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGF0ZUxhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsb2NhbGUoY29tcG9uZW50LCAncGxhY2Vob2xkZXInKSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRPbmx5IHx8IGV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiY29tcG9uZW50LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc29EYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJkYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHRpbWUgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tdGltZXBpY2tlciBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhVGltZUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ3RpbWVMYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndGltZUxhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsb2NhbGUoY29tcG9uZW50LCAncGxhY2Vob2xkZXInKSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRPbmx5IHx8IGV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiY29tcG9uZW50LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RpbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXRpbWVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoZWNrYm94IC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIiBbZm9ybUdyb3VwXT1cInJlc29sdmVQYXRoKGNvbXBvbmVudC5wYXRoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHRvZ2dsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RvZ2dsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRvZ2dsZSBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkT25seSB8fCBldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiY29tcG9uZW50LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidG9nZ2xlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSkgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkZWZhdWx0IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGVja2JveCBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkT25seSB8fCBldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJjb21wb25lbnQucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHJhZGlvIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidyYWRpbydcIiBbZm9ybUdyb3VwXT1cInJlc29sdmVQYXRoKGNvbXBvbmVudC5wYXRoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoaXAgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGlwJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tY2hpcC1yYWRpby1ncm91cCBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRPbmx5IHx8IGV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiY29tcG9uZW50LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZnJlc2hdPVwicmVmcmVzaFZhbHVlcyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoaXByYWRpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJjaGlwcmFkaW9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQtY2hpcCAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxvY2FsZShvcHRpb24sICdsYWJlbCcpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1pbnB1dC1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWNoaXAtcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkZWZhdWx0IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1yYWRpby1ncm91cCBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZE9ubHkgfHwgZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiY29tcG9uZW50LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZnJlc2hdPVwicmVmcmVzaFZhbHVlcyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNyYWRpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXJhZGlvLWJ1dHRvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbG9jYWxlKG9wdGlvbiwgJ2xhYmVsJykgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gY2hlY2tsaXN0IC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2xpc3QnXCIgW2Zvcm1Hcm91cF09XCJyZXNvbHZlUGF0aChjb21wb25lbnQucGF0aClcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBvbmVudC5zdWJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBjaGlwIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hpcCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWNoaXAtY2hlY2tib3gtZ3JvdXAgW2FyaWFMYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkT25seSB8fCBldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImNvbXBvbmVudC5wcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWZyZXNoXT1cInJlZnJlc2hWYWx1ZXMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjaGlwY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiY2hpcGNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWlucHV0LWNoaXAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAoZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBsb2NhbGUob3B0aW9uLCAnbGFiZWwnKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQtY2hpcD5cclxuICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1jaGlwLWNoZWNrYm94LWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gZGVmYXVsdCAtLT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tY2hlY2tib3gtZ3JvdXAgW2FyaWFMYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRPbmx5IHx8IGV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImNvbXBvbmVudC5wcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWZyZXNoXT1cInJlZnJlc2hWYWx1ZXMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGVja2JveCAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbG9jYWxlKG9wdGlvbiwgJ2xhYmVsJykgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWNoZWNrYm94LWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0ZXh0YXJlYSAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dGFyZWEnXCIgW2Zvcm1Hcm91cF09XCJyZXNvbHZlUGF0aChjb21wb25lbnQucGF0aClcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQgdHlwZT1cInRleHRhcmVhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3Rvb2x0aXAnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibG9jYWxlKGNvbXBvbmVudCwgJ3BsYWNlaG9sZGVyJykgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZE9ubHkgfHwgZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJjb21wb25lbnQucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRjYXNlXT1cImNvbXBvbmVudC50ZXh0Q2FzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50Lm1heExlbmd0aClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRUZXh0QWxpZ25tZW50KGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVCbHVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGV4dGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGV4dGFyZWFcIj5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWlucHV0PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gZmlsZXBpY2tlciAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZmlsZXBpY2tlcidcIiBbZm9ybUdyb3VwXT1cInJlc29sdmVQYXRoKGNvbXBvbmVudC5wYXRoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1maWxlLXVwbG9hZCBbYXJpYUxhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdhcmlhTGFiZWwnKSB8fCBsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRdPVwiZ2V0TWltZVR5cGVzKGNvbXBvbmVudC5hY2NlcHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQubXVsdGlwbGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVVcGxvYWRlZEV2ZW50KT1cImZpbGVVcGxvYWRlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dGaWxlbGlzdF09XCIhY29tcG9uZW50LnNob3dEZXRhaWxzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdkZXNjcmlwdGlvbicpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZE9ubHkgfHwgZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJjb21wb25lbnQucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZmlsZXBpY2tlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJmaWxlcGlja2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFzIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7eyBsb2NhbGUoVGV4dHMsICdVcGxvYWQnKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tZmlsZS11cGxvYWQ+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LnNob3dEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImNyZWF0ZVVwbG9hZFRhYmxlcyhjb21wb25lbnQpXCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHJhbmdlIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidyYW5nZSdcIiBbZm9ybUdyb3VwXT1cInJlc29sdmVQYXRoKGNvbXBvbmVudC5wYXRoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1zbGlkZXIgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0b29sdGlwJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZE9ubHkgfHwgZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiY29tcG9uZW50LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbl09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQucmFuZ2U/Lm1pbikgPz8gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5yYW5nZT8ubWF4KSA/PyAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNyYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInJhbmdlXCI+XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby1zbGlkZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkaXNwbGF5ZmllbGQgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Rpc3BsYXlmaWVsZCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaXJpby1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltnZXRUZXh0QWxpZ25tZW50KGNvbXBvbmVudCksIGdldExpZ2h0Vmlldyhjb21wb25lbnQpIF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgI2Rpc3BsYXlmaWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImRpc3BsYXlmaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29tcG9uZW50LmxhYmVsXCIgY2xhc3M9XCJzaXJpby1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb21wb25lbnQudG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJpb1Rvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cImNvbXBvbmVudC50b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoYXNQb3BvdmVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnYXJpYUxhYmVsJykgfHwgbG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2lyaW8tbGFiZWwtcG9wb3ZlciBmYXMgZmEtaW5mby1jaXJjbGVcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaXJpby1mb3JtLWNvbnRyb2wgZGF0YS1kaXNwbGF5XCIgW25nQ2xhc3NdPVwiY29tcG9uZW50LmZpZWxkdHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuZmllbGR0eXBlID09PSAnY2hlY2tib3gnOyBlbHNlIGRlZmF1bHRUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJldmFsdWF0ZShjb21wb25lbnQuZXhwcmVzc2lvbilcIiBjbGFzcz1cImZhcyBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdXBwb3J0VmFsdWVzKGNvbXBvbmVudCkgJiYgaGFzVmFsdWVzKGNvbXBvbmVudCk7IGVsc2Ugc2ltcGxlVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFZhbHVlcyhjb21wb25lbnQpIHwgYXN5bmMgYXMgdmFsdWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdG9MYWJlbChldmFsdWF0ZShjb21wb25lbnQuZXhwcmVzc2lvbiksIHZhbHVlcykgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2ltcGxlVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBldmFsdWF0ZShjb21wb25lbnQuZXhwcmVzc2lvbikgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjb21wb25lbnQuZGVzY3JpcHRpb25cIiBjbGFzcz1cInNpcmlvLWhlbHBlci10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2Rlc2NyaXB0aW9uJykpIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gZHluYW1pY2xpc3QgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2R5bmFtaWNsaXN0J1wiIFtmb3JtR3JvdXBdPVwicmVzb2x2ZVBhdGgoY29tcG9uZW50LnBhdGgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtQXJyYXlOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVwZWF0XT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5yZXBldGl0aW9ucylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dBZGRSZW1vdmVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5hbGxvd0FkZFJlbW92ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjb21wb25lbnQuZGVzY3JpcHRpb25cIj57eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnZGVzY3JpcHRpb24nKSkgfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtQXJyYXkocmVzb2x2ZVBhdGgoY29tcG9uZW50LnBhdGgpLmdldChjb21wb25lbnQua2V5KSkgYXMgZm9ybUFycmF5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1BcnJheS5jb250cm9scy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdGFiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFiJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImR5bmFtaWNsaXN0dGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRhYiBbbGVmdEFycm93TGFiZWxdPVwibG9jYWxlKFRleHRzLCAnU2Nyb2xsTGVmdCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyaWdodEFycm93TGFiZWxdPVwibG9jYWxlKFRleHRzLCAnU2Nyb2xsUmlnaHQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFiQ291bnRdPVwiZm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZHluYW1pY2xpc3R0YWI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZm9ybUFycmF5LmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4O1wiIFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRhYi1pdGVtIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSkgKyAnICcgKyAoaSArIDEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaSA9PT0gZHluYW1pY2xpc3R0YWIuYWN0aXZlSW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJyZWFkT25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImNvbXBvbmVudC5yb3dzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsaWdubWVudF09XCJjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnRcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJlYWRPbmx5ICYmIGNvbXBvbmVudC5hbGxvd0FkZFJlbW92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246cmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrKT1cInJlbW92ZUl0ZW0oZm9ybUFycmF5LCBpLCB0cnVlKVwiIGNsYXNzPVwicmVtb3ZlLWl0ZW1cIiBbY29sb3JdPVwibnVsbFwiIGljb249XCJmYXMgZmEtdHJhc2hcIj57eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAncmVtb3ZlTGFiZWwnKSB8fCBsb2NhbGUoVGV4dHMsICdSZW1vdmVJdGVtJykpIH19PC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdGFiLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gYWNjb3JkaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYWNjb3JkaW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImR5bmFtaWNsaXN0YWNjb3JkaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbiBbYWNjb3JkaW9uQ291bnRdPVwiZm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZHluYW1pY2xpc3RhY2NvcmRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZm9ybUFycmF5LmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4O1wiIFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbi1wYW5lbCAjcGFuZWwgYWNjb3JkaW9uUGFuZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbi1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lclRleHRdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpICsgJyAnICsgKGkgKyAxKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbi1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbi1ib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFuZWwucGFuZWxJc09wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cChpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRPbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93c109XCJjb21wb25lbnQucm93c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsaWdubWVudF09XCJjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnRcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyZWFkT25seSAmJiBjb21wb25lbnQuYWxsb3dBZGRSZW1vdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246cmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlSXRlbShmb3JtQXJyYXksIGksIHRydWUpXCIgY2xhc3M9XCJyZW1vdmUtaXRlbVwiIFtjb2xvcl09XCJudWxsXCIgaWNvbj1cImZhcyBmYS10cmFzaFwiPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdyZW1vdmVMYWJlbCcpIHx8IGxvY2FsZShUZXh0cywgJ1JlbW92ZUl0ZW0nKSkgfX08L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uLWJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRlZmF1bHQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNkeW5hbWljbGlzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImR5bmFtaWNsaXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZvcm1BcnJheS5jb250cm9sczsgbGV0IGkgPSBpbmRleDtcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydncm91cC1vdXRsaW5lJzogY29tcG9uZW50LnNob3dPdXRsaW5lID09PSB0cnVlLCAnZ3JvdXAtb3V0bGluZS1yZXBlYXQnOiB0cnVlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiY29tcG9uZW50LmxhYmVsXCI+e3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpICsgJyAnICsgKGkgKyAxKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGl0ZW0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwicmVhZE9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImNvbXBvbmVudC5yb3dzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxpZ25tZW50XT1cImNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudFwiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LmFsbG93QWRkUmVtb3ZlIHx8IGNvbXBvbmVudC5hbGxvd1Jlb3JkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246cmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJlYWRPbmx5ICYmIGNvbXBvbmVudC5hbGxvd1Jlb3JkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIChjbGljayk9XCJtb3ZlVXBJdGVtKGZvcm1BcnJheSwgaSlcIiBjbGFzcz1cInJlbW92ZS1pdGVtXCIgW2NvbG9yXT1cIm51bGxcIiBpY29uPVwiZmFzIGZhLWFycm93LXVwXCI+U3Bvc3RhIFPDuTwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIChjbGljayk9XCJtb3ZlRG93bkl0ZW0oZm9ybUFycmF5LCBpKVwiIGNsYXNzPVwicmVtb3ZlLWl0ZW1cIiBbY29sb3JdPVwibnVsbFwiIGljb249XCJmYXMgZmEtYXJyb3ctZG93blwiPlNwb3N0YSBHacO5PC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVhZE9ubHkgJiYgY29tcG9uZW50LmFsbG93QWRkUmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlSXRlbShmb3JtQXJyYXksIGksIHRydWUpXCIgY2xhc3M9XCJyZW1vdmUtaXRlbVwiIFtjb2xvcl09XCJudWxsXCIgaWNvbj1cImZhcyBmYS10cmFzaFwiPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdyZW1vdmVMYWJlbCcpIHx8IGxvY2FsZShUZXh0cywgJ1JlbW92ZUl0ZW0nKSkgfX08L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVhZE9ubHkgJiYgY29tcG9uZW50LmFsbG93QWRkUmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2spPVwiYWRkSXRlbShmb3JtQXJyYXkpXCIgY2xhc3M9XCJhZGQtaXRlbVwiIFtjb2xvcl09XCJudWxsXCIgaWNvbj1cImZhcyBmYS1wbHVzXCI+e3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FkZExhYmVsJykgfHwgbG9jYWxlKFRleHRzLCAnQWRkSXRlbScpKSB9fTwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGdyb3VwIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidncm91cCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZ2V0R3JvdXBPdXRsaW5lKGNvbXBvbmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgI2dyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJyZXNvbHZlUGF0aChjb21wb25lbnQucGF0aClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRPbmx5IHx8IGV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImNvbXBvbmVudC5yb3dzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGlnbm1lbnRdPVwiY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50XCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0YWIgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhYidcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tdGFiICN0YWJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0YWJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xlZnRBcnJvd0xhYmVsXT1cImxvY2FsZShUZXh0cywgJ1Njcm9sbExlZnQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmlnaHRBcnJvd0xhYmVsXT1cImxvY2FsZShUZXh0cywgJ1Njcm9sbFJpZ2h0JylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTmF2TGluZV09XCJjb21wb25lbnQubmF2aWdhdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNWZXJ0aWNhbF09XCJjb21wb25lbnQudmVydGljYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiQ29udHJvbD5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgY29tcG9uZW50LnBhbmVsczsgbGV0IGkgPSBpbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRhYi1pdGVtIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhsb2NhbGUocGFuZWwsICdsYWJlbCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJldmFsdWF0ZVN0cmluZyhwYW5lbC5pY29uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZXZhbHVhdGVCb29sZWFuKHBhbmVsLmRpc2FibGVkKSA/PyBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJJdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRhYlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV2YWx1YXRlQ29uZGl0aW9uYWwocGFuZWwuY29uZGl0aW9uYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0VGVtcGxhdGUocGFuZWwudGVtcGxhdGUpIGFzIHRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpID09PSB0YWIuYWN0aXZlSW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwicmVzb2x2ZVBhdGgocGFuZWwucGF0aClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwidGVtcGxhdGU/LnJvd3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRPbmx5IHx8IGV2YWx1YXRlQm9vbGVhbihwYW5lbC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsaWdubWVudF09XCJ0ZW1wbGF0ZT8udmVydGljYWxBbGlnbm1lbnRcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby10YWItaXRlbT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby10YWI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBhY2NvcmRpb24gLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FjY29yZGlvbidcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uICNhY2NvcmRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJhY2NvcmRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgY29tcG9uZW50LnBhbmVsc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uLXBhbmVsICpuZ0lmPVwiZXZhbHVhdGVDb25kaXRpb25hbChwYW5lbC5jb25kaXRpb25hbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJldmFsdWF0ZUJvb2xlYW4ocGFuZWwuZGlzYWJsZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbi1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lclRleHRdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKHBhbmVsLCAnbGFiZWwnKSlcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24taGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24tYm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0VGVtcGxhdGUocGFuZWwudGVtcGxhdGUpIGFzIHRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwicmVzb2x2ZVBhdGgocGFuZWwucGF0aClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwicmVhZE9ubHkgfHwgZXZhbHVhdGVCb29sZWFuKHBhbmVsLnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cInRlbXBsYXRlPy5yb3dzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsaWdubWVudF09XCJ0ZW1wbGF0ZT8udmVydGljYWxBbGlnbm1lbnRcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24tYm9keT5cclxuICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdGV4dCAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2NvbGxhcHNlXT1cImNvbXBvbmVudC5jb2xsYXBzZVRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgI3RleHRcclxuICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tUmVzZXQgVmlldyBDb250ZXh0LS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgdGFiaW5kZXg9XCIwXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ0b0hUTUwoZXZhbHVhdGVUZW1wbGF0ZShsb2NhbGUoY29tcG9uZW50LCAndGV4dCcpKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LnRvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhcHAtdGVtcGxhdGUtd3JhcHBlciAjdG9vbHRpcFdyYXBwZXIgW3RlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZVwiIFtjb250ZXh0XT1cInsgY29tcG9uZW50OiBjb21wb25lbnQgfVwiPjwvYXBwLXRlbXBsYXRlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2lyaW8tbGFiZWwtcG9wb3ZlciBmYXMgZmEtaW5mby1jaXJjbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJpb1Rvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsb2NhbGUoVGV4dHMsICdJbmZvcm1hdGlvbicpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hhc1BvcG92ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21UZW1wbGF0ZV09XCJ0b29sdGlwV3JhcHBlci5nZXRUZW1wbGF0ZVJlZigpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Rvb2x0aXBUZW1wbGF0ZSBsZXQtY29tcG9uZW50PVwiY29tcG9uZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaXJpby10b29sdGlwLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ0b0hUTUwoZXZhbHVhdGVUZW1wbGF0ZShsb2NhbGUoY29tcG9uZW50LCAndG9vbHRpcCcpKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gaHRtbCAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaHRtbCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJodG1sLXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwic2FuaXRpemUoZXZhbHVhdGVUZW1wbGF0ZShsb2NhbGUoY29tcG9uZW50LCAnY29udGVudCcpKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAjaHRtbFxyXG4gICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJodG1sXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGltYWdlIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbWFnZSdcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuc291cmNlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFthbHRdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2FsdCcpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICNpbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJpbWFnZVwiPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhYmxlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8YWctZ3JpZC1hbmd1bGFyIFttb2R1bGVzXT1cImdldEdyaWRNb2R1bGVzKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwiZ2V0R3JpZE9wdGlvbnMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RhYmxlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuc2VsZWN0YWJsZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlTZWxlY3RdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5tdWx0aVNlbGVjdClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlZCk9XCJvbkdyaWRTZWxlY3Rpb25DaGFuZ2VkKGNvbXBvbmVudCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdXBwcmVzc0FjdGlvbnNdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5zdXBwcmVzc0FjdGlvbnMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbkRlZnNdPVwiY29tcG9uZW50LmNvbHVtbnMgfHwgZXZhbHVhdGUoY29tcG9uZW50LmNvbHVtbnNFeHByZXNzaW9uKSB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dTb3VyY2VdPVwiZ2V0Um93U291cmNlKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVmcmVzaF09XCJyZWZyZXNoUm93U291cmNlKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImV2YWx1YXRlSGVpZ2h0KGNvbXBvbmVudC5oZWlnaHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGFibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGFibGVcIiAvPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gYnV0dG9uIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIididXR0b24nXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImdldEhvcml6b250YWxBbGlnbm1lbnQoY29tcG9uZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2tFdmVudCk9XCJjbGlja0J1dHRvbihjb21wb25lbnQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiZXZhbHVhdGVDb2xvcihjb21wb25lbnQuY29sb3IpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50Lmljb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2J1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJidXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSkgfX1cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gc2VwYXJhdG9yIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZXBhcmF0b3InXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgI3NlcGFyYXRvclxyXG4gICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJzZXBhcmF0b3JcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gc3BhY2VyIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzcGFjZXInXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDEwMCVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImNvbXBvbmVudC5oZWlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAjc3BhY2VyXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInNwYWNlclwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBpZnJhbWUgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2lmcmFtZSdcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cImNvbXBvbmVudC5pZFwiPnt7IGV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICdsYWJlbCcpKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aWZyYW1lIFtzcmNdPVwiZXZhbHVhdGVVcmwoY29tcG9uZW50LnVybClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIicxMDAlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29tcG9uZW50LmhlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmcmFtZVNlY3VyaXR5XT1cImNvbXBvbmVudC5zZWN1cml0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICNpZnJhbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiaWZyYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8L2lmcmFtZT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGFsZXJ0IC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhbGVydCdcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWxlcnQgW3R5cGVdPVwiY29tcG9uZW50LnJvbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxDbG9zZV09XCJsb2NhbGUoVGV4dHMsICdDbG9zZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FsZXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImFsZXJ0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWxlcnQtbWVzc2FnZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ0b0hUTUwoZXZhbHVhdGVUZW1wbGF0ZShsb2NhbGUoY29tcG9uZW50LCAndGV4dCcpKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWxlcnQtbWVzc2FnZT5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFsZXJ0PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gbm90aWNlIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidub3RpY2UnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLW5vdGlmeSAjbm90aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwibm90aWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tbm90aWZ5LWJvZHkgW3RpdGxlXT1cImV2YWx1YXRlU3RyaW5nKGxvY2FsZShjb21wb25lbnQsICd0aXRsZScpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICd0ZXh0JykpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1ub3RpZnktYm9keT5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLW5vdGlmeT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHRvb2x0aXAgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3Rvb2x0aXAnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLXRlbXBsYXRlLXdyYXBwZXIgI3Rvb2x0aXBXcmFwcGVyIFt0ZW1wbGF0ZV09XCJ0b29sdGlwVGVtcGxhdGVcIiBbY29udGV4dF09XCJ7IGNvbXBvbmVudDogY29tcG9uZW50IH1cIj48L2FwcC10ZW1wbGF0ZS13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNpcmlvLWxhYmVsLXBvcG92ZXIgZmFzIGZhLWluZm8tY2lyY2xlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lyaW9Ub29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoYXNQb3BvdmVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tVGVtcGxhdGVdPVwidG9vbHRpcFdyYXBwZXIuZ2V0VGVtcGxhdGVSZWYoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICN0b29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRvb2x0aXBcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbHRpcFRlbXBsYXRlIGxldC1jb21wb25lbnQ9XCJjb21wb25lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpcmlvLXRvb2x0aXAtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiY29tcG9uZW50LnRpdGxlXCIgY2xhc3M9XCJzaXJpby10b29sdGlwLWhlYWRpbmcgc2lyaW8tc3BhY2UtZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ3RpdGxlJykpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGxvY2FsZShjb21wb25lbnQsICd0ZXh0JykpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBjaGFydCAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hhcnQnXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+e3sgZXZhbHVhdGVTdHJpbmcobG9jYWxlKGNvbXBvbmVudCwgJ2xhYmVsJykpIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxhZy1jaGFydHMgW29wdGlvbnNdPVwiKGdldENoYXJ0T3B0aW9ucyhjb21wb25lbnQpIHwgYXN5bmMpID8/IHt9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW29ic2VydmVdPVwiZ2V0Q2hhcnREYXRhKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FsbGJhY2tdPVwiaW52YWxpZGF0ZUNoYXJ0KGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImNvbXBvbmVudC5oZWlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAjY2hhcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiY2hhcnRcIiAvPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gY29tcG9uZW50IC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjb21wb25lbnQnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LmlzSW5wdXQ7IGVsc2Ugbm9JbnB1dFRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyBldmFsdWF0ZVN0cmluZyhsb2NhbGUoY29tcG9uZW50LCAnbGFiZWwnKSkgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtaG9zdCBbcHJvcGVydGllc109XCJnZXRGZWVsYWJsZVByb3BlcnRpZXMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwicmVzb2x2ZVBhdGgoY29tcG9uZW50LnBhdGgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NvbXBvbmVudEhvc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiY29tcG9uZW50SG9zdFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JbnB1dFRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtaG9zdCBbcHJvcGVydGllc109XCJnZXRGZWVsYWJsZVByb3BlcnRpZXMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjb21wb25lbnRIb3N0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNvbXBvbmVudEhvc3RcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuIl19
|