@sumaris-net/ngx-components 18.9.3 → 18.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/doc/changelog.md +6 -0
- package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +10 -1
- package/esm2022/src/app/shared/form/field.component.mjs +3 -3
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +12 -13
- package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +16 -5
- package/fesm2022/sumaris-net.ngx-components.mjs +30 -14
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/form/text-popover/text-popover.component.d.ts +9 -0
- package/src/app/shared/inputs.d.ts +1 -1
- package/src/app/shared/material/boolean/material.boolean.d.ts +2 -3
- package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +5 -1
- package/src/assets/manifest.json +1 -1
- package/src/theme/_ngx-components.forms.scss +14 -1
|
@@ -7,8 +7,11 @@ import * as i2 from "@angular/common";
|
|
|
7
7
|
import * as i3 from "@ionic/angular";
|
|
8
8
|
import * as i4 from "@angular/material/form-field";
|
|
9
9
|
import * as i5 from "@angular/material/icon";
|
|
10
|
-
import * as i6 from "@angular/material/
|
|
11
|
-
import * as i7 from "
|
|
10
|
+
import * as i6 from "@angular/material/select";
|
|
11
|
+
import * as i7 from "@angular/material/core";
|
|
12
|
+
import * as i8 from "@angular/material/tabs";
|
|
13
|
+
import * as i9 from "../material.boolean";
|
|
14
|
+
import * as i10 from "../../../pipes/string.pipes";
|
|
12
15
|
export class BooleanTestPage extends AppForm {
|
|
13
16
|
injector;
|
|
14
17
|
formBuilder;
|
|
@@ -16,6 +19,8 @@ export class BooleanTestPage extends AppForm {
|
|
|
16
19
|
stringify = JSON.stringify;
|
|
17
20
|
mode = 'radio';
|
|
18
21
|
styles = ['radio', 'checkbox', 'button'];
|
|
22
|
+
floatLabel = 'auto';
|
|
23
|
+
floatLabels = ['auto', 'always', 'never'];
|
|
19
24
|
constructor(injector, formBuilder, cd) {
|
|
20
25
|
super(injector);
|
|
21
26
|
this.injector = injector;
|
|
@@ -44,6 +49,12 @@ export class BooleanTestPage extends AppForm {
|
|
|
44
49
|
this.markForCheck();
|
|
45
50
|
}
|
|
46
51
|
}
|
|
52
|
+
toggleFloatLabel(value) {
|
|
53
|
+
if (this.floatLabel !== value) {
|
|
54
|
+
this.floatLabel = value;
|
|
55
|
+
this.markForCheck();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
47
58
|
markForCheck() {
|
|
48
59
|
this.cd.markForCheck();
|
|
49
60
|
}
|
|
@@ -52,10 +63,10 @@ export class BooleanTestPage extends AppForm {
|
|
|
52
63
|
this.form.get(path)?.setValue(null);
|
|
53
64
|
}
|
|
54
65
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BooleanTestPage, deps: [{ token: i0.Injector }, { token: i1.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
55
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BooleanTestPage, selector: "app-boolean-test-page", usesInheritance: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Boolean field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a mat-tab-link [active]=\"mode === 'radio'\" (click)=\"toggleMode('radio')\">\n <mat-label>Radio</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode === 'checkbox'\" (click)=\"toggleMode('checkbox')\">\n <mat-label>Checkbox</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode === 'button'\" (click)=\"toggleMode('button')\">\n <mat-label>Button</mat-label>\n </a>\n </nav>\n\n <form #tabPanel [formGroup]=\"form\" class=\"form-container ion-padding\">\n @for (style of styles; track style) {\n <ng-container [ngTemplateOutlet]=\"components\" [ngTemplateOutletContext]=\"{ style: style }\"></ng-container>\n }\n\n <ng-template #components let-style=\"style\">\n @if (style === mode) {\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled + readonly</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledTrue\"\n placeholder=\"Placeholder\"\n readonly=\"true\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty + required</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{\n form.controls.enabledEmptyRequired?.value | json\n }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledEmptyRequired\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledEmpty\"></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledFalse\"></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledTrue\"></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty + clearable</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n [clearable]=\"true\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false + floatLabel=\"always\"</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledFalse\"\n placeholder=\"Placeholder\"\n floatLabel=\"always\"\n [clearable]=\"true\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">appearance=\"outline\" + icon + clearable</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledTrue\"\n placeholder=\"Placeholder\"\n appearance=\"outline\"\n [clearable]=\"true\"\n >\n <mat-icon matPrefix>room</mat-icon>\n </mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n @if (style === 'button') {\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty + showButtonIcons: false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n [showButtonIcons]=\"false\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n }\n </ng-template>\n </form>\n</ion-content>\n", dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i3.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i3.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i3.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i6.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }, { kind: "component", type: i7.MatBooleanField, selector: "mat-boolean-field", inputs: ["disabled", "formControl", "formControlName", "placeholder", "floatLabel", "appearance", "subscriptSizing", "readonly", "required", "compact", "autofocus", "style", "buttonsColCount", "class", "yesLabel", "noLabel", "showButtonIcons", "yesIcon", "noIcon", "clearable", "labelPosition", "tabindex", "showRadio", "value"], outputs: ["keyup.enter", "focus", "blur"] }, { kind: "pipe", type: i2.JsonPipe, name: "json" }] });
|
|
66
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BooleanTestPage, selector: "app-boolean-test-page", usesInheritance: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Boolean field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n @for (style of styles; track style) {\n <a mat-tab-link [active]=\"mode === style\" (click)=\"toggleMode(style)\">\n <mat-label>{{ style | capitalize }}</mat-label>\n </a>\n }\n\n <a mat-tab-link [active]=\"mode === 'temp'\" (click)=\"toggleMode('temp')\">\n <mat-label>Temp</mat-label>\n </a>\n </nav>\n\n <form #tabPanel [formGroup]=\"form\" class=\"form-container ion-padding\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col size=\"4\">\n <mat-form-field>\n <mat-label>Float label</mat-label>\n <mat-select [(value)]=\"floatLabel\">\n @for (floatLabel of floatLabels; track floatLabel) {\n <mat-option [value]=\"floatLabel\">{{ floatLabel | capitalize }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n @if (mode === 'temp') {\n <ng-container [ngTemplateOutlet]=\"temp\"></ng-container>\n } @else {\n @for (style of styles; track style) {\n <ng-container [ngTemplateOutlet]=\"components\" [ngTemplateOutletContext]=\"{ style: style }\"></ng-container>\n }\n }\n\n <ng-template #components let-style=\"style\">\n @if (style === mode) {\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"disabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"disabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"disabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled + readonly</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"disabledTrue\"\n placeholder=\"Placeholder\"\n readonly=\"true\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty + required</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{\n form.controls.enabledEmptyRequired?.value | json\n }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmptyRequired\"\n placeholder=\"Placeholder\"\n [required]=\"true\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmpty\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledFalse\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledTrue\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty + clearable</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n [clearable]=\"true\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false + floatLabel=\"always\"</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledFalse\"\n placeholder=\"Placeholder\"\n floatLabel=\"always\"\n [clearable]=\"true\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">appearance=\"outline\" + icon + clearable</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledTrue\"\n placeholder=\"Placeholder\"\n appearance=\"outline\"\n [clearable]=\"true\"\n >\n <mat-icon matPrefix>room</mat-icon>\n </mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n @if (style === 'button') {\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty + showButtonIcons: false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n [showButtonIcons]=\"false\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n }\n </ng-template>\n\n <ng-template #temp>\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <mat-boolean-field\n [style]=\"'radio'\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-col>\n <ion-col size=\"4\">\n <mat-boolean-field\n [style]=\"'checkbox'\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-col>\n <ion-col size=\"4\">\n <mat-boolean-field\n [style]=\"'button'\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ng-template>\n </form>\n</ion-content>\n", dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i3.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i3.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i3.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i3.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i8.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i8.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }, { kind: "component", type: i9.MatBooleanField, selector: "mat-boolean-field", inputs: ["disabled", "formControl", "formControlName", "placeholder", "floatLabel", "appearance", "subscriptSizing", "readonly", "required", "compact", "autofocus", "style", "buttonsColCount", "class", "yesLabel", "noLabel", "showButtonIcons", "yesIcon", "noIcon", "clearable", "labelPosition", "tabindex", "showRadio", "value"], outputs: ["keyup.enter", "focus", "blur"] }, { kind: "pipe", type: i2.JsonPipe, name: "json" }, { kind: "pipe", type: i10.CapitalizePipe, name: "capitalize" }] });
|
|
56
67
|
}
|
|
57
68
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BooleanTestPage, decorators: [{
|
|
58
69
|
type: Component,
|
|
59
|
-
args: [{ selector: 'app-boolean-test-page', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Boolean field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a mat-tab-link [active]=\"mode === 'radio'\" (click)=\"toggleMode('radio')\">\n <mat-label>Radio</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode === 'checkbox'\" (click)=\"toggleMode('checkbox')\">\n <mat-label>Checkbox</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode === 'button'\" (click)=\"toggleMode('button')\">\n <mat-label>Button</mat-label>\n </a>\n </nav>\n\n <form #tabPanel [formGroup]=\"form\" class=\"form-container ion-padding\">\n @for (style of styles; track style) {\n <ng-container [ngTemplateOutlet]=\"components\" [ngTemplateOutletContext]=\"{ style: style }\"></ng-container>\n }\n\n <ng-template #components let-style=\"style\">\n @if (style === mode) {\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled + readonly</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"disabledTrue\"\n placeholder=\"Placeholder\"\n readonly=\"true\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty + required</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{\n form.controls.enabledEmptyRequired?.value | json\n }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledEmptyRequired\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledEmpty\"></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledFalse\"></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field [style]=\"style\" formControlName=\"enabledTrue\"></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty + clearable</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n [clearable]=\"true\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false + floatLabel=\"always\"</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledFalse\"\n placeholder=\"Placeholder\"\n floatLabel=\"always\"\n [clearable]=\"true\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">appearance=\"outline\" + icon + clearable</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledTrue\"\n placeholder=\"Placeholder\"\n appearance=\"outline\"\n [clearable]=\"true\"\n >\n <mat-icon matPrefix>room</mat-icon>\n </mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n @if (style === 'button') {\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty + showButtonIcons: false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n [showButtonIcons]=\"false\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n }\n </ng-template>\n </form>\n</ion-content>\n" }]
|
|
70
|
+
args: [{ selector: 'app-boolean-test-page', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Boolean field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n @for (style of styles; track style) {\n <a mat-tab-link [active]=\"mode === style\" (click)=\"toggleMode(style)\">\n <mat-label>{{ style | capitalize }}</mat-label>\n </a>\n }\n\n <a mat-tab-link [active]=\"mode === 'temp'\" (click)=\"toggleMode('temp')\">\n <mat-label>Temp</mat-label>\n </a>\n </nav>\n\n <form #tabPanel [formGroup]=\"form\" class=\"form-container ion-padding\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col size=\"4\">\n <mat-form-field>\n <mat-label>Float label</mat-label>\n <mat-select [(value)]=\"floatLabel\">\n @for (floatLabel of floatLabels; track floatLabel) {\n <mat-option [value]=\"floatLabel\">{{ floatLabel | capitalize }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n @if (mode === 'temp') {\n <ng-container [ngTemplateOutlet]=\"temp\"></ng-container>\n } @else {\n @for (style of styles; track style) {\n <ng-container [ngTemplateOutlet]=\"components\" [ngTemplateOutletContext]=\"{ style: style }\"></ng-container>\n }\n }\n\n <ng-template #components let-style=\"style\">\n @if (style === mode) {\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"disabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"disabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"disabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled + readonly</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.disabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"disabledTrue\"\n placeholder=\"Placeholder\"\n readonly=\"true\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty + required</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{\n form.controls.enabledEmptyRequired?.value | json\n }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmptyRequired\"\n placeholder=\"Placeholder\"\n [required]=\"true\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledFalse\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledTrue\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmpty\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledFalse\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled true (no placeholder)</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledTrue\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty + clearable</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n [clearable]=\"true\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled false + floatLabel=\"always\"</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledFalse?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledFalse\"\n placeholder=\"Placeholder\"\n floatLabel=\"always\"\n [clearable]=\"true\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">appearance=\"outline\" + icon + clearable</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledTrue?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledTrue\"\n placeholder=\"Placeholder\"\n appearance=\"outline\"\n [clearable]=\"true\"\n >\n <mat-icon matPrefix>room</mat-icon>\n </mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n @if (style === 'button') {\n <ion-col size=\"4\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Enabled empty + showButtonIcons: false</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: break-spaces\">{{ form.controls.enabledEmpty?.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-boolean-field\n [style]=\"style\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n [showButtonIcons]=\"false\"\n ></mat-boolean-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n }\n </ng-template>\n\n <ng-template #temp>\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <mat-boolean-field\n [style]=\"'radio'\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-col>\n <ion-col size=\"4\">\n <mat-boolean-field\n [style]=\"'checkbox'\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-col>\n <ion-col size=\"4\">\n <mat-boolean-field\n [style]=\"'button'\"\n [floatLabel]=\"floatLabel\"\n formControlName=\"enabledEmpty\"\n placeholder=\"Placeholder\"\n ></mat-boolean-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ng-template>\n </form>\n</ion-content>\n" }]
|
|
60
71
|
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }] });
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi50ZXN0LnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9ib29sZWFuL3Rlc3RpbmcvYm9vbGVhbi50ZXN0LnBhZ2UudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9ib29sZWFuL3Rlc3RpbmcvYm9vbGVhbi50ZXN0LnBhZ2UuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNELE9BQU8sRUFBc0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQU1oRSxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxPQUFZO0lBTW5DO0lBQ0E7SUFDQTtJQVBaLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzNCLElBQUksR0FBb0MsT0FBTyxDQUFDO0lBQ2hELE1BQU0sR0FBYSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFbkQsWUFDWSxRQUFrQixFQUNsQixXQUErQixFQUMvQixFQUFxQjtRQUUvQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKTixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUcvQixJQUFJLENBQUMsT0FBTyxDQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3JCLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQztZQUNyQixhQUFhLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDdEIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ3BCLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQztZQUNwQixvQkFBb0IsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ2pELFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNyQixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDcEIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLO1FBQ2QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRVMsWUFBWTtRQUNwQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsS0FBYTtRQUNyRCxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7d0dBOUNVLGVBQWU7NEZBQWYsZUFBZSxvRkNSNUIsbzFmQTBZQTs7NEZEbFlhLGVBQWU7a0JBSjNCLFNBQVM7K0JBQ0UsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwRm9ybSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZm9ybS9mb3JtLmNsYXNzJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWJvb2xlYW4tdGVzdC1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jvb2xlYW4udGVzdC5wYWdlLmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBCb29sZWFuVGVzdFBhZ2UgZXh0ZW5kcyBBcHBGb3JtPGFueT4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBzdHJpbmdpZnkgPSBKU09OLnN0cmluZ2lmeTtcbiAgbW9kZTogJ3JhZGlvJyB8ICdjaGVja2JveCcgfCAnYnV0dG9uJyA9ICdyYWRpbyc7XG4gIHN0eWxlczogc3RyaW5nW10gPSBbJ3JhZGlvJywgJ2NoZWNrYm94JywgJ2J1dHRvbiddO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgdGhpcy5zZXRGb3JtKFxuICAgICAgdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIGRpc2FibGVkRW1wdHk6IFtudWxsXSxcbiAgICAgICAgZGlzYWJsZWRGYWxzZTogW2ZhbHNlXSxcbiAgICAgICAgZGlzYWJsZWRUcnVlOiBbdHJ1ZV0sXG4gICAgICAgIGVuYWJsZWRFbXB0eTogW251bGxdLFxuICAgICAgICBlbmFibGVkRW1wdHlSZXF1aXJlZDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICBlbmFibGVkRmFsc2U6IFtmYWxzZV0sXG4gICAgICAgIGVuYWJsZWRUcnVlOiBbdHJ1ZV0sXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLmdldCgnZW5hYmxlZEVtcHR5JykuZW5hYmxlKCk7XG4gICAgdGhpcy5mb3JtLmdldCgnZW5hYmxlZEZhbHNlJykuZW5hYmxlKCk7XG4gICAgdGhpcy5mb3JtLmdldCgnZW5hYmxlZFRydWUnKS5lbmFibGUoKTtcbiAgICB0aGlzLmZvcm0uZ2V0KCdlbmFibGVkRW1wdHlSZXF1aXJlZCcpLmVuYWJsZSgpO1xuICB9XG5cbiAgdG9nZ2xlTW9kZSh2YWx1ZSkge1xuICAgIGlmICh0aGlzLm1vZGUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLm1vZGUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYXJDb250cm9sVmFsdWUocGF0aDogc3RyaW5nLCBldmVudD86IEV2ZW50KSB7XG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5mb3JtLmdldChwYXRoKT8uc2V0VmFsdWUobnVsbCk7XG4gIH1cbn1cbiIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgPGlvbi1iYWNrLWJ1dHRvbj48L2lvbi1iYWNrLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuXG4gICAgPGlvbi10aXRsZT5Cb29sZWFuIGZpZWxkIHRlc3QgcGFnZTwvaW9uLXRpdGxlPlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuXG48aW9uLWNvbnRlbnQ+XG4gIDxuYXYgbWF0LXRhYi1uYXYtYmFyIFt0YWJQYW5lbF09XCJ0YWJQYW5lbFwiPlxuICAgIDxhIG1hdC10YWItbGluayBbYWN0aXZlXT1cIm1vZGUgPT09ICdyYWRpbydcIiAoY2xpY2spPVwidG9nZ2xlTW9kZSgncmFkaW8nKVwiPlxuICAgICAgPG1hdC1sYWJlbD5SYWRpbzwvbWF0LWxhYmVsPlxuICAgIDwvYT5cbiAgICA8YSBtYXQtdGFiLWxpbmsgW2FjdGl2ZV09XCJtb2RlID09PSAnY2hlY2tib3gnXCIgKGNsaWNrKT1cInRvZ2dsZU1vZGUoJ2NoZWNrYm94JylcIj5cbiAgICAgIDxtYXQtbGFiZWw+Q2hlY2tib3g8L21hdC1sYWJlbD5cbiAgICA8L2E+XG4gICAgPGEgbWF0LXRhYi1saW5rIFthY3RpdmVdPVwibW9kZSA9PT0gJ2J1dHRvbidcIiAoY2xpY2spPVwidG9nZ2xlTW9kZSgnYnV0dG9uJylcIj5cbiAgICAgIDxtYXQtbGFiZWw+QnV0dG9uPC9tYXQtbGFiZWw+XG4gICAgPC9hPlxuICA8L25hdj5cblxuICA8Zm9ybSAjdGFiUGFuZWwgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJmb3JtLWNvbnRhaW5lciBpb24tcGFkZGluZ1wiPlxuICAgIEBmb3IgKHN0eWxlIG9mIHN0eWxlczsgdHJhY2sgc3R5bGUpIHtcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29tcG9uZW50c1wiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHN0eWxlOiBzdHlsZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuXG4gICAgPG5nLXRlbXBsYXRlICNjb21wb25lbnRzIGxldC1zdHlsZT1cInN0eWxlXCI+XG4gICAgICBAaWYgKHN0eWxlID09PSBtb2RlKSB7XG4gICAgICAgIDxpb24tZ3JpZD5cbiAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkRpc2FibGVkIGVtcHR5PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IGZvcm0uY29udHJvbHMuZGlzYWJsZWRFbXB0eT8udmFsdWUgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGlzYWJsZWRFbXB0eVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+RGlzYWJsZWQgZmFsc2U8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCI+e3sgZm9ybS5jb250cm9scy5kaXNhYmxlZEZhbHNlPy52YWx1ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNhYmxlZEZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5EaXNhYmxlZCB0cnVlPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IGZvcm0uY29udHJvbHMuZGlzYWJsZWRUcnVlPy52YWx1ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNhYmxlZFRydWVcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkRpc2FibGVkICsgcmVhZG9ubHk8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCI+e3sgZm9ybS5jb250cm9scy5kaXNhYmxlZFRydWU/LnZhbHVlIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJzdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRpc2FibGVkVHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICByZWFkb25seT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCIzXCI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkVuYWJsZWQgZW1wdHk8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCI+e3sgZm9ybS5jb250cm9scy5lbmFibGVkRW1wdHk/LnZhbHVlIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJzdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZWRFbXB0eVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjNcIj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+RW5hYmxlZCBlbXB0eSArIHJlcXVpcmVkPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uY29udHJvbHMuZW5hYmxlZEVtcHR5UmVxdWlyZWQ/LnZhbHVlIHwganNvblxuICAgICAgICAgICAgICAgICAgICAgICAgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkRW1wdHlSZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjNcIj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+RW5hYmxlZCBmYWxzZTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIj57eyBmb3JtLmNvbnRyb2xzLmVuYWJsZWRGYWxzZT8udmFsdWUgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZEZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5FbmFibGVkIHRydWU8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCI+e3sgZm9ybS5jb250cm9scy5lbmFibGVkVHJ1ZT8udmFsdWUgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZFRydWVcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5FbmFibGVkIGVtcHR5IChubyBwbGFjZWhvbGRlcik8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCI+e3sgZm9ybS5jb250cm9scy5lbmFibGVkRW1wdHk/LnZhbHVlIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkIFtzdHlsZV09XCJzdHlsZVwiIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZWRFbXB0eVwiPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+RW5hYmxlZCBmYWxzZSAobm8gcGxhY2Vob2xkZXIpPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IGZvcm0uY29udHJvbHMuZW5hYmxlZEZhbHNlPy52YWx1ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZCBbc3R5bGVdPVwic3R5bGVcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkRmFsc2VcIj48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkVuYWJsZWQgdHJ1ZSAobm8gcGxhY2Vob2xkZXIpPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IGZvcm0uY29udHJvbHMuZW5hYmxlZFRydWU/LnZhbHVlIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkIFtzdHlsZV09XCJzdHlsZVwiIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZWRUcnVlXCI+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgPC9pb24tcm93PlxuXG4gICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5FbmFibGVkIGVtcHR5ICsgY2xlYXJhYmxlPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IGZvcm0uY29udHJvbHMuZW5hYmxlZEVtcHR5Py52YWx1ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkRW1wdHlcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+RW5hYmxlZCBmYWxzZSArIGZsb2F0TGFiZWw9XCJhbHdheXNcIjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIj57eyBmb3JtLmNvbnRyb2xzLmVuYWJsZWRGYWxzZT8udmFsdWUgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZEZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIGZsb2F0TGFiZWw9XCJhbHdheXNcIlxuICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5hcHBlYXJhbmNlPVwib3V0bGluZVwiICsgaWNvbiArIGNsZWFyYWJsZTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIj57eyBmb3JtLmNvbnRyb2xzLmVuYWJsZWRUcnVlPy52YWx1ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkVHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+cm9vbTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICAgICAgQGlmIChzdHlsZSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5FbmFibGVkIGVtcHR5ICsgc2hvd0J1dHRvbkljb25zOiBmYWxzZTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCI+e3sgZm9ybS5jb250cm9scy5lbmFibGVkRW1wdHk/LnZhbHVlIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkRW1wdHlcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93QnV0dG9uSWNvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICA+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICA8L2lvbi1ncmlkPlxuICAgICAgfVxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZm9ybT5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi50ZXN0LnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9ib29sZWFuL3Rlc3RpbmcvYm9vbGVhbi50ZXN0LnBhZ2UudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9ib29sZWFuL3Rlc3RpbmcvYm9vbGVhbi50ZXN0LnBhZ2UuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNELE9BQU8sRUFBc0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7OztBQU9oRSxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxPQUFZO0lBUW5DO0lBQ0E7SUFDQTtJQVRaLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzNCLElBQUksR0FBNkMsT0FBTyxDQUFDO0lBQ3pELE1BQU0sR0FBYSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkQsVUFBVSxHQUFzQixNQUFNLENBQUM7SUFDdkMsV0FBVyxHQUFhLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVwRCxZQUNZLFFBQWtCLEVBQ2xCLFdBQStCLEVBQy9CLEVBQXFCO1FBRS9CLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUpOLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBRy9CLElBQUksQ0FBQyxPQUFPLENBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDckIsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ3JCLGFBQWEsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN0QixZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDcEIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ3BCLG9CQUFvQixFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDakQsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3JCLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQztTQUNwQixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQUs7UUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFDbEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUF3QjtRQUN2QyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRVMsWUFBWTtRQUNwQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsS0FBYTtRQUNyRCxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7d0dBdkRVLGVBQWU7NEZBQWYsZUFBZSxvRkNUNUIsMnlrQkFxZEE7OzRGRDVjYSxlQUFlO2tCQUozQixTQUFTOytCQUNFLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcEZvcm0gfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2Zvcm0vZm9ybS5jbGFzcyc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBcHBGbG9hdExhYmVsVHlwZSB9IGZyb20gJy4uLy4uLy4uL2Zvcm0vZmllbGQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYm9vbGVhbi10ZXN0LXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vYm9vbGVhbi50ZXN0LnBhZ2UuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEJvb2xlYW5UZXN0UGFnZSBleHRlbmRzIEFwcEZvcm08YW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHN0cmluZ2lmeSA9IEpTT04uc3RyaW5naWZ5O1xuICBtb2RlOiAncmFkaW8nIHwgJ2NoZWNrYm94JyB8ICdidXR0b24nIHwgJ3RlbXAnID0gJ3JhZGlvJztcbiAgc3R5bGVzOiBzdHJpbmdbXSA9IFsncmFkaW8nLCAnY2hlY2tib3gnLCAnYnV0dG9uJ107XG4gIGZsb2F0TGFiZWw6IEFwcEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xuICBmbG9hdExhYmVsczogc3RyaW5nW10gPSBbJ2F1dG8nLCAnYWx3YXlzJywgJ25ldmVyJ107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB0aGlzLnNldEZvcm0oXG4gICAgICB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgZGlzYWJsZWRFbXB0eTogW251bGxdLFxuICAgICAgICBkaXNhYmxlZEZhbHNlOiBbZmFsc2VdLFxuICAgICAgICBkaXNhYmxlZFRydWU6IFt0cnVlXSxcbiAgICAgICAgZW5hYmxlZEVtcHR5OiBbbnVsbF0sXG4gICAgICAgIGVuYWJsZWRFbXB0eVJlcXVpcmVkOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIGVuYWJsZWRGYWxzZTogW2ZhbHNlXSxcbiAgICAgICAgZW5hYmxlZFRydWU6IFt0cnVlXSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0uZ2V0KCdlbmFibGVkRW1wdHknKS5lbmFibGUoKTtcbiAgICB0aGlzLmZvcm0uZ2V0KCdlbmFibGVkRmFsc2UnKS5lbmFibGUoKTtcbiAgICB0aGlzLmZvcm0uZ2V0KCdlbmFibGVkVHJ1ZScpLmVuYWJsZSgpO1xuICAgIHRoaXMuZm9ybS5nZXQoJ2VuYWJsZWRFbXB0eVJlcXVpcmVkJykuZW5hYmxlKCk7XG4gIH1cblxuICB0b2dnbGVNb2RlKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMubW9kZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMubW9kZSA9IHZhbHVlO1xuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUZsb2F0TGFiZWwodmFsdWU6IEFwcEZsb2F0TGFiZWxUeXBlKSB7XG4gICAgaWYgKHRoaXMuZmxvYXRMYWJlbCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuZmxvYXRMYWJlbCA9IHZhbHVlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYXJDb250cm9sVmFsdWUocGF0aDogc3RyaW5nLCBldmVudD86IEV2ZW50KSB7XG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5mb3JtLmdldChwYXRoKT8uc2V0VmFsdWUobnVsbCk7XG4gIH1cbn1cbiIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgPGlvbi1iYWNrLWJ1dHRvbj48L2lvbi1iYWNrLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuXG4gICAgPGlvbi10aXRsZT5Cb29sZWFuIGZpZWxkIHRlc3QgcGFnZTwvaW9uLXRpdGxlPlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuXG48aW9uLWNvbnRlbnQ+XG4gIDxuYXYgbWF0LXRhYi1uYXYtYmFyIFt0YWJQYW5lbF09XCJ0YWJQYW5lbFwiPlxuICAgIEBmb3IgKHN0eWxlIG9mIHN0eWxlczsgdHJhY2sgc3R5bGUpIHtcbiAgICAgIDxhIG1hdC10YWItbGluayBbYWN0aXZlXT1cIm1vZGUgPT09IHN0eWxlXCIgKGNsaWNrKT1cInRvZ2dsZU1vZGUoc3R5bGUpXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgc3R5bGUgfCBjYXBpdGFsaXplIH19PC9tYXQtbGFiZWw+XG4gICAgICA8L2E+XG4gICAgfVxuXG4gICAgPGEgbWF0LXRhYi1saW5rIFthY3RpdmVdPVwibW9kZSA9PT0gJ3RlbXAnXCIgKGNsaWNrKT1cInRvZ2dsZU1vZGUoJ3RlbXAnKVwiPlxuICAgICAgPG1hdC1sYWJlbD5UZW1wPC9tYXQtbGFiZWw+XG4gICAgPC9hPlxuICA8L25hdj5cblxuICA8Zm9ybSAjdGFiUGFuZWwgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJmb3JtLWNvbnRhaW5lciBpb24tcGFkZGluZ1wiPlxuICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICA8aW9uLXJvdz5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPkZsb2F0IGxhYmVsPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJmbG9hdExhYmVsXCI+XG4gICAgICAgICAgICAgIEBmb3IgKGZsb2F0TGFiZWwgb2YgZmxvYXRMYWJlbHM7IHRyYWNrIGZsb2F0TGFiZWwpIHtcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmxvYXRMYWJlbFwiPnt7IGZsb2F0TGFiZWwgfCBjYXBpdGFsaXplIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG5cbiAgICBAaWYgKG1vZGUgPT09ICd0ZW1wJykge1xuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wXCI+PC9uZy1jb250YWluZXI+XG4gICAgfSBAZWxzZSB7XG4gICAgICBAZm9yIChzdHlsZSBvZiBzdHlsZXM7IHRyYWNrIHN0eWxlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29tcG9uZW50c1wiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHN0eWxlOiBzdHlsZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgfVxuXG4gICAgPG5nLXRlbXBsYXRlICNjb21wb25lbnRzIGxldC1zdHlsZT1cInN0eWxlXCI+XG4gICAgICBAaWYgKHN0eWxlID09PSBtb2RlKSB7XG4gICAgICAgIDxpb24tZ3JpZD5cbiAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkRpc2FibGVkIGVtcHR5PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IGZvcm0uY29udHJvbHMuZGlzYWJsZWRFbXB0eT8udmFsdWUgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRpc2FibGVkRW1wdHlcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkRpc2FibGVkIGZhbHNlPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IGZvcm0uY29udHJvbHMuZGlzYWJsZWRGYWxzZT8udmFsdWUgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRpc2FibGVkRmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkRpc2FibGVkIHRydWU8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCI+e3sgZm9ybS5jb250cm9scy5kaXNhYmxlZFRydWU/LnZhbHVlIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJzdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNhYmxlZFRydWVcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkRpc2FibGVkICsgcmVhZG9ubHk8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCI+e3sgZm9ybS5jb250cm9scy5kaXNhYmxlZFRydWU/LnZhbHVlIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJzdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNhYmxlZFRydWVcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5FbmFibGVkIGVtcHR5PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IGZvcm0uY29udHJvbHMuZW5hYmxlZEVtcHR5Py52YWx1ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZEVtcHR5XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5FbmFibGVkIGVtcHR5ICsgcmVxdWlyZWQ8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5jb250cm9scy5lbmFibGVkRW1wdHlSZXF1aXJlZD8udmFsdWUgfCBqc29uXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJzdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVkRW1wdHlSZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5FbmFibGVkIGZhbHNlPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IGZvcm0uY29udHJvbHMuZW5hYmxlZEZhbHNlPy52YWx1ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZEZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5FbmFibGVkIHRydWU8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCI+e3sgZm9ybS5jb250cm9scy5lbmFibGVkVHJ1ZT8udmFsdWUgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZWRUcnVlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+RW5hYmxlZCBlbXB0eSAobm8gcGxhY2Vob2xkZXIpPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IGZvcm0uY29udHJvbHMuZW5hYmxlZEVtcHR5Py52YWx1ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZEVtcHR5XCJcbiAgICAgICAgICAgICAgICAgID48L21hdC1ib29sZWFuLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkVuYWJsZWQgZmFsc2UgKG5vIHBsYWNlaG9sZGVyKTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIj57eyBmb3JtLmNvbnRyb2xzLmVuYWJsZWRGYWxzZT8udmFsdWUgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZWRGYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5FbmFibGVkIHRydWUgKG5vIHBsYWNlaG9sZGVyKTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIj57eyBmb3JtLmNvbnRyb2xzLmVuYWJsZWRUcnVlPy52YWx1ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZFRydWVcIlxuICAgICAgICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+RW5hYmxlZCBlbXB0eSArIGNsZWFyYWJsZTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIj57eyBmb3JtLmNvbnRyb2xzLmVuYWJsZWRFbXB0eT8udmFsdWUgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZWRFbXB0eVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5FbmFibGVkIGZhbHNlICsgZmxvYXRMYWJlbD1cImFsd2F5c1wiPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IGZvcm0uY29udHJvbHMuZW5hYmxlZEZhbHNlPy52YWx1ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZEZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIGZsb2F0TGFiZWw9XCJhbHdheXNcIlxuICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5hcHBlYXJhbmNlPVwib3V0bGluZVwiICsgaWNvbiArIGNsZWFyYWJsZTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIj57eyBmb3JtLmNvbnRyb2xzLmVuYWJsZWRUcnVlPy52YWx1ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwic3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZFRydWVcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgICAgIEBpZiAoc3R5bGUgPT09ICdidXR0b24nKSB7XG4gICAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+RW5hYmxlZCBlbXB0eSArIHNob3dCdXR0b25JY29uczogZmFsc2U8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwid2hpdGUtc3BhY2U6IGJyZWFrLXNwYWNlc1wiPnt7IGZvcm0uY29udHJvbHMuZW5hYmxlZEVtcHR5Py52YWx1ZSB8IGpzb24gfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJzdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZEVtcHR5XCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd0J1dHRvbkljb25zXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgPC9pb24tZ3JpZD5cbiAgICAgIH1cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICN0ZW1wPlxuICAgICAgPGlvbi1ncmlkPlxuICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgICAgPG1hdC1ib29sZWFuLWZpZWxkXG4gICAgICAgICAgICAgIFtzdHlsZV09XCIncmFkaW8nXCJcbiAgICAgICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZWRFbXB0eVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgPjwvbWF0LWJvb2xlYW4tZmllbGQ+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgICA8bWF0LWJvb2xlYW4tZmllbGRcbiAgICAgICAgICAgICAgW3N0eWxlXT1cIidjaGVja2JveCdcIlxuICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZEVtcHR5XCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICA+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjRcIj5cbiAgICAgICAgICAgIDxtYXQtYm9vbGVhbi1maWVsZFxuICAgICAgICAgICAgICBbc3R5bGVdPVwiJ2J1dHRvbidcIlxuICAgICAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsXCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlZEVtcHR5XCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICA+PC9tYXQtYm9vbGVhbi1maWVsZD5cbiAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDwvaW9uLXJvdz5cbiAgICAgIDwvaW9uLWdyaWQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mb3JtPlxuPC9pb24tY29udGVudD5cbiJdfQ==
|