@sumaris-net/ngx-components 2.12.26-alpha2 → 2.12.26
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/admin/services/validator/person.validator.mjs +11 -8
- package/esm2022/src/app/admin/users/users.mjs +11 -5
- package/esm2022/src/app/core/account/account.page.mjs +12 -5
- package/esm2022/src/app/core/account/new-token.modal.mjs +15 -8
- package/esm2022/src/app/core/account/password/change-password.form.mjs +10 -5
- package/esm2022/src/app/core/account/password/change-password.page.mjs +9 -4
- package/esm2022/src/app/core/account/token.table.mjs +12 -5
- package/esm2022/src/app/core/auth/auth.form.mjs +11 -5
- package/esm2022/src/app/core/auth/auth.modal.mjs +17 -14
- package/esm2022/src/app/core/auth/reset-password.modal.mjs +20 -16
- package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +13 -5
- package/esm2022/src/app/core/form/entity/editor.class.mjs +20 -14
- package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +21 -10
- package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +24 -11
- package/esm2022/src/app/core/form/entity/tab-editor.class.mjs +21 -5
- package/esm2022/src/app/core/form/form-container.class.mjs +5 -4
- package/esm2022/src/app/core/form/form.class.mjs +13 -13
- package/esm2022/src/app/core/form/list/list.form.mjs +20 -10
- package/esm2022/src/app/core/form/properties/properties.form.mjs +26 -17
- package/esm2022/src/app/core/form/properties/properties.table.mjs +14 -10
- package/esm2022/src/app/core/form/properties/property.validator.mjs +8 -5
- package/esm2022/src/app/core/form/username/username.form.mjs +10 -5
- package/esm2022/src/app/core/home/home.mjs +63 -40
- package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +34 -21
- package/esm2022/src/app/core/menu/menu.component.mjs +53 -33
- package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +15 -13
- package/esm2022/src/app/core/menu/testing/menu.testing.mjs +15 -13
- package/esm2022/src/app/core/peer/select-peer.modal.mjs +40 -26
- package/esm2022/src/app/core/services/testing/referential.validator.mjs +8 -5
- package/esm2022/src/app/core/services/validator/account.validator.mjs +18 -8
- package/esm2022/src/app/core/services/validator/base.validator.class.mjs +11 -9
- package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +10 -8
- package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +6 -5
- package/esm2022/src/app/core/services/validator/user-token.validator.mjs +6 -5
- package/esm2022/src/app/core/settings/settings.page.mjs +35 -25
- package/esm2022/src/app/core/table/async-table.class.mjs +32 -16
- package/esm2022/src/app/core/table/column/actions-column.component.mjs +9 -8
- package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +9 -8
- package/esm2022/src/app/core/table/column/row-field.component.mjs +11 -6
- package/esm2022/src/app/core/table/memory-table.class.mjs +4 -4
- package/esm2022/src/app/core/table/table.class.mjs +40 -27
- package/esm2022/src/app/core/table/table.pipes.mjs +21 -15
- package/esm2022/src/app/core/table/testing/table-validator.service.mjs +8 -5
- package/esm2022/src/app/core/table/testing/table.testing.mjs +11 -6
- package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +8 -5
- package/esm2022/src/app/core/table/testing/table2.testing.mjs +13 -9
- package/esm2022/src/app/shared/form/field.component.mjs +16 -14
- package/esm2022/src/app/shared/help/help.modal.mjs +25 -20
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +40 -31
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +18 -14
- package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +14 -13
- package/esm2022/src/app/shared/material/badge/badge.test.mjs +8 -6
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +21 -14
- package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +12 -5
- package/esm2022/src/app/shared/material/chips/material.chips.mjs +23 -18
- package/esm2022/src/app/shared/material/datetime/material.date.mjs +41 -33
- package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +42 -36
- package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +41 -33
- package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +13 -11
- package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +14 -12
- package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +14 -12
- package/esm2022/src/app/shared/material/duration/material.duration.mjs +29 -18
- package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +14 -12
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +32 -25
- package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +20 -15
- package/esm2022/src/app/shared/material/testing/common.test.mjs +14 -12
- package/esm2022/src/app/shared/material/text/text-form.component.mjs +12 -5
- package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +13 -6
- package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +12 -13
- package/esm2022/src/app/shared/pipes/form.pipes.mjs +26 -18
- package/esm2022/src/app/shared/pipes/selection.pipes.mjs +35 -33
- package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +53 -28
- package/esm2022/src/app/shared/toolbar/toolbar.mjs +30 -20
- package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +16 -14
- package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +20 -18
- package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +26 -18
- package/esm2022/src/app/social/message/message.form.mjs +10 -5
- package/esm2022/src/app/social/message/message.modal.mjs +19 -16
- package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +27 -18
- package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +40 -23
- package/fesm2022/sumaris-net.ngx-components.mjs +1250 -756
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/admin/services/validator/person.validator.d.ts +3 -2
- package/src/app/admin/users/users.d.ts +4 -2
- package/src/app/core/account/account.page.d.ts +4 -2
- package/src/app/core/account/new-token.modal.d.ts +3 -2
- package/src/app/core/account/password/change-password.form.d.ts +4 -2
- package/src/app/core/account/password/change-password.page.d.ts +4 -2
- package/src/app/core/account/token.table.d.ts +6 -3
- package/src/app/core/auth/auth.form.d.ts +5 -3
- package/src/app/core/auth/auth.modal.d.ts +7 -5
- package/src/app/core/auth/reset-password.modal.d.ts +6 -6
- package/src/app/core/form/array/testing/form-array.test.d.ts +5 -2
- package/src/app/core/form/entity/editor.class.d.ts +7 -7
- package/src/app/core/form/entity/entity-editor-modal.class.d.ts +5 -3
- package/src/app/core/form/entity/entity-editor.class.d.ts +7 -4
- package/src/app/core/form/entity/tab-editor.class.d.ts +11 -2
- package/src/app/core/form/form-container.class.d.ts +1 -2
- package/src/app/core/form/form.class.d.ts +3 -5
- package/src/app/core/form/list/list.form.d.ts +8 -3
- package/src/app/core/form/properties/properties.form.d.ts +7 -3
- package/src/app/core/form/properties/properties.table.d.ts +5 -3
- package/src/app/core/form/properties/property.validator.d.ts +3 -1
- package/src/app/core/form/username/username.form.d.ts +5 -3
- package/src/app/core/home/home.d.ts +22 -16
- package/src/app/core/install/install-upgrade-card.component.d.ts +15 -10
- package/src/app/core/menu/menu.component.d.ts +17 -13
- package/src/app/core/menu/testing/menu-other.testing.d.ts +5 -1
- package/src/app/core/menu/testing/menu.testing.d.ts +5 -1
- package/src/app/core/peer/select-peer.modal.d.ts +15 -10
- package/src/app/core/services/testing/referential.validator.d.ts +3 -2
- package/src/app/core/services/validator/account.validator.d.ts +8 -2
- package/src/app/core/services/validator/base.validator.class.d.ts +3 -3
- package/src/app/core/services/validator/local-settings.validator.d.ts +4 -3
- package/src/app/core/services/validator/user-settings.validator.d.ts +2 -2
- package/src/app/core/services/validator/user-token.validator.d.ts +2 -2
- package/src/app/core/settings/settings.page.d.ts +9 -3
- package/src/app/core/table/async-table.class.d.ts +14 -14
- package/src/app/core/table/column/actions-column.component.d.ts +3 -3
- package/src/app/core/table/column/nav-actions-column.component.d.ts +4 -4
- package/src/app/core/table/column/row-field.component.d.ts +2 -2
- package/src/app/core/table/memory-table.class.d.ts +2 -2
- package/src/app/core/table/table.class.d.ts +14 -15
- package/src/app/core/table/table.pipes.d.ts +5 -4
- package/src/app/core/table/testing/table-validator.service.d.ts +3 -2
- package/src/app/core/table/testing/table.testing.d.ts +4 -2
- package/src/app/core/table/testing/table2-validator.service.d.ts +3 -1
- package/src/app/core/table/testing/table2.testing.d.ts +4 -2
- package/src/app/shared/form/field.component.d.ts +5 -5
- package/src/app/shared/help/help.modal.d.ts +8 -7
- package/src/app/shared/image/gallery/image-gallery.component.d.ts +8 -8
- package/src/app/shared/inputs.d.ts +1 -1
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +7 -6
- package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +4 -4
- package/src/app/shared/material/badge/badge.test.d.ts +3 -2
- package/src/app/shared/material/boolean/material.boolean.d.ts +6 -5
- package/src/app/shared/material/boolean/testing/boolean.test.page.d.ts +5 -2
- package/src/app/shared/material/chips/material.chips.d.ts +5 -5
- package/src/app/shared/material/datetime/material.date.d.ts +11 -10
- package/src/app/shared/material/datetime/material.dateshort.d.ts +11 -10
- package/src/app/shared/material/datetime/material.datetime.d.ts +11 -10
- package/src/app/shared/material/datetime/testing/mat-date-time.test.d.ts +4 -4
- package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +3 -3
- package/src/app/shared/material/datetime/testing/mat-dateshort.test.d.ts +3 -3
- package/src/app/shared/material/duration/material.duration.d.ts +12 -6
- package/src/app/shared/material/duration/testing/mat-duration.test.d.ts +3 -3
- package/src/app/shared/material/latlong/material.latlong.d.ts +9 -9
- package/src/app/shared/material/swipe/material.swipe.d.ts +5 -5
- package/src/app/shared/material/testing/common.test.d.ts +4 -4
- package/src/app/shared/material/text/text-form.component.d.ts +6 -3
- package/src/app/shared/named-filter/named-filter-selector.component.d.ts +5 -2
- package/src/app/shared/named-filter/testing/named-filter-selector.testing.d.ts +3 -4
- package/src/app/shared/pipes/form.pipes.d.ts +7 -6
- package/src/app/shared/pipes/selection.pipes.d.ts +10 -10
- package/src/app/shared/storage/storage-explorer.component.d.ts +15 -12
- package/src/app/shared/toolbar/toolbar.d.ts +12 -10
- package/src/app/shared/upload-file/upload-file-popover.component.d.ts +4 -4
- package/src/app/shared/upload-file/upload-file.component.d.ts +3 -3
- package/src/app/social/job/progression/job-progression.icon.d.ts +6 -5
- package/src/app/social/message/message.form.d.ts +4 -2
- package/src/app/social/message/message.modal.d.ts +5 -5
- package/src/app/social/user-event/notification/user-event-notification.icon.d.ts +8 -7
- package/src/app/social/user-event/notification/user-event-notification.list.d.ts +9 -8
- package/src/assets/manifest.json +1 -1
- package/src/theme/_ngx-components.table.scss +1 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy,
|
|
1
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject } from 'rxjs';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "@ionic/angular";
|
|
@@ -12,6 +12,7 @@ import * as i8 from "./badge.directive";
|
|
|
12
12
|
import * as i9 from "@angular/common";
|
|
13
13
|
import * as i10 from "../../pipes/colors.pipe";
|
|
14
14
|
export class MatBadgeTestPage {
|
|
15
|
+
cd;
|
|
15
16
|
userText = 'A custom string';
|
|
16
17
|
matBadgeContent = '!';
|
|
17
18
|
$icon = new BehaviorSubject('alert');
|
|
@@ -20,8 +21,9 @@ export class MatBadgeTestPage {
|
|
|
20
21
|
$color = new BehaviorSubject('danger');
|
|
21
22
|
$hidden = new BehaviorSubject(false);
|
|
22
23
|
$overlap = new BehaviorSubject(false);
|
|
23
|
-
cd
|
|
24
|
-
|
|
24
|
+
constructor(cd) {
|
|
25
|
+
this.cd = cd;
|
|
26
|
+
}
|
|
25
27
|
onInputChanged(event) {
|
|
26
28
|
this.userText = event.target.value;
|
|
27
29
|
this.cd.markForCheck();
|
|
@@ -30,11 +32,11 @@ export class MatBadgeTestPage {
|
|
|
30
32
|
this.matBadgeContent = event.target.value;
|
|
31
33
|
this.cd.markForCheck();
|
|
32
34
|
}
|
|
33
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MatBadgeTestPage, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
35
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MatBadgeTestPage, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
34
36
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MatBadgeTestPage, selector: "mat-badge-test", 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>matBadgeIcon directive</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <!-- small badge -->\n <p>\n <ion-text color=\"tertiary\">\n <span appBadge appBadgeMatIcon=\"check\" appBadgeSize=\"small\" appBadgeColor=\"accent\" appBadgeOverlap=\"false\">\n Small badge\n </span>\n </ion-text>\n </p>\n\n <!-- small badge with text -->\n <p>\n <ion-text color=\"tertiary\">\n <span [appBadge]=\"0\" appBadgeSize=\"small\" appBadgeColor=\"accent\" appBadgeOverlap=\"false\">\n Small badge with text 0\n </span>\n </ion-text>\n </p>\n\n <!-- medium badge -->\n <p>\n <ion-text\n appBadge\n appBadgeMatIcon=\"check\"\n appBadgeSize=\"medium\"\n [appBadgeColor]=\"'tertiary' | matColor\"\n appBadgeOverlap=\"false\"\n >\n Medium badge\n </ion-text>\n </p>\n\n <!-- small badge -->\n <p>\n <ion-label appBadge appBadgeMatIcon=\"close\" appBadgeSize=\"large\" appBadgeOverlap=\"false\">Large badge</ion-label>\n </p>\n\n <!-- default size badge -->\n <p>\n <ion-label appBadge appBadgeMatIcon=\"check\" [appBadgeColor]=\"'success' | matColor\" appBadgeOverlap=\"false\">\n Badge (no size, no color)\n </ion-label>\n </p>\n\n <!-- ion icon -->\n <p>\n <ion-label appBadge appBadgeIcon=\"checkmark\" [appBadgeColor]=\"'success' | matColor\" appBadgeOverlap=\"false\">\n Badge with ion-icon\n </ion-label>\n </p>\n\n <!-- ion icon clear -->\n <p>\n <ion-label\n appBadge\n appBadgeIcon=\"checkmark-circle\"\n [appBadgeColor]=\"'tertiary' | matColor\"\n appBadgeFill=\"clear\"\n appBadgeOverlap=\"false\"\n >\n Badge with clear icon\n </ion-label>\n </p>\n\n <!-- changing text-->\n <ion-row>\n <ion-col>\n <ion-label\n appBadge\n appBadgeIcon=\"checkmark-circle\"\n [appBadgeColor]=\"'tertiary' | matColor\"\n appBadgeFill=\"clear\"\n appBadgeOverlap=\"false\"\n >\n {{ userText }}\n </ion-label>\n </ion-col>\n <ion-col>\n <input type=\"text\" [value]=\"userText\" (input)=\"onInputChanged($event)\" />\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>Configurable example :</ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col size=\"auto\">\n <mat-icon\n [style.color]=\"'var(--ion-color-secondary)'\"\n appBadge\n [appBadgeIcon]=\"$icon | async\"\n [appBadgeColor]=\"$color | async | matColor\"\n [appBadgeHidden]=\"$hidden | async\"\n [appBadgeFill]=\"$fill | async\"\n [appBadgeSize]=\"$size | async\"\n appBadgeOverlap=\"true\"\n appBadgePosition=\"above before\"\n >\n <ion-icon slot=\"icon-only\" [color]=\"'secondary'\" name=\"navigate\"></ion-icon>\n </mat-icon>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeColor</mat-label>\n <mat-select [value]=\"$color.value\" (selectionChange)=\"this.$color.next($event.value)\">\n <mat-option [value]=\"'primary'\">primary</mat-option>\n <mat-option [value]=\"'secondary'\">secondary</mat-option>\n <mat-option [value]=\"'tertiary'\">tertiary</mat-option>\n <mat-option [value]=\"'danger'\">danger</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeIcon</mat-label>\n <mat-select [value]=\"$icon.value\" (selectionChange)=\"this.$icon.next($event.value)\">\n <mat-option [value]=\"'checkmark-circle'\">checkmark-circle</mat-option>\n <mat-option [value]=\"'alert-circle'\">alert-circle</mat-option>\n <mat-option [value]=\"'alert'\">alert</mat-option>\n <mat-option [value]=\"'flag'\">flag</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeSize</mat-label>\n <mat-select [value]=\"$size.value\" (selectionChange)=\"this.$size.next($event.value)\">\n <mat-option [value]=\"'large'\">large</mat-option>\n <mat-option [value]=\"'medium'\">medium</mat-option>\n <mat-option [value]=\"'small'\">small</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeFill</mat-label>\n <mat-select [value]=\"$fill.value\" (selectionChange)=\"this.$fill.next($event.value)\">\n <mat-option [value]=\"'clear'\">clear</mat-option>\n <mat-option [value]=\"'solid'\">solid</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeHidden</mat-label>\n <mat-select [value]=\"$hidden.value\" (selectionChange)=\"this.$hidden.next($event.value)\">\n <mat-option [value]=\"true\">true</mat-option>\n <mat-option [value]=\"false\">false</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-raised-button:</p>\n </ion-col>\n <ion-col>\n <button\n mat-raised-button\n color=\"primary\"\n [appBadgeIcon]=\"$icon | async\"\n [appBadgeColor]=\"$color | async | matColor\"\n [appBadgeHidden]=\"$hidden | async\"\n [appBadgeFill]=\"$fill | async\"\n [appBadgeSize]=\"$size | async\"\n appBadgeOverlap=\"true\"\n appBadgePosition=\"below after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button with mat-label:</p>\n </ion-col>\n <ion-col>\n <button\n mat-button\n color=\"primary\"\n class=\"ion-no-padding\"\n [appBadgeIcon]=\"$icon | async\"\n [appBadgeColor]=\"$color | async | matColor\"\n [appBadgeHidden]=\"$hidden | async\"\n [appBadgeFill]=\"$fill | async\"\n [appBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"above after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n </ion-row>\n\n <h4>Angular Material Badge (standard way)</h4>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-icon:</p>\n </ion-col>\n <ion-col>\n <mat-icon\n [style.color]=\"'var(--ion-color-secondary)'\"\n [matBadge]=\"'!'\"\n [matBadgeColor]=\"$color | async | matColor\"\n [matBadgeHidden]=\"$hidden | async\"\n [matBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n >\n <ion-icon slot=\"icon-only\" [color]=\"'secondary'\" name=\"navigate\"></ion-icon>\n </mat-icon>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button:</p>\n </ion-col>\n <ion-col>\n <button\n mat-raised-button\n color=\"primary\"\n [matBadge]=\"matBadgeContent\"\n [matBadgeColor]=\"$color | async | matColor\"\n [matBadgeHidden]=\"$hidden | async\"\n [matBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"above after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n\n <ion-col>\n <input type=\"text\" [value]=\"matBadgeContent\" (input)=\"onMatBadgeContentChanged($event)\" />\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button</p>\n </ion-col>\n <ion-col>\n <button\n mat-button\n color=\"primary\"\n [matBadge]=\"matBadgeContent\"\n [matBadgeColor]=\"$color | async | matColor\"\n [matBadgeHidden]=\"$hidden | async\"\n [matBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n </ion-row>\n</ion-content>\n", dependencies: [{ kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.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: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonBackButton, selector: "ion-back-button" }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.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: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i7.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i8.BadgeDirective, selector: "[appBadge], [appBadgeIcon], [appBadgeMatIcon]", inputs: ["appBadge", "appBadgeDisabled", "appBadgeSize", "appBadgeColor", "appBadgeFill", "appBadgeMatIcon", "appBadgeIcon", "appBadgeHidden", "appBadgeOverlap", "appBadgePosition"] }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.MatColorPipe, name: "matColor" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
35
37
|
}
|
|
36
38
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MatBadgeTestPage, decorators: [{
|
|
37
39
|
type: Component,
|
|
38
40
|
args: [{ selector: 'mat-badge-test', changeDetection: ChangeDetectionStrategy.OnPush, 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>matBadgeIcon directive</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <!-- small badge -->\n <p>\n <ion-text color=\"tertiary\">\n <span appBadge appBadgeMatIcon=\"check\" appBadgeSize=\"small\" appBadgeColor=\"accent\" appBadgeOverlap=\"false\">\n Small badge\n </span>\n </ion-text>\n </p>\n\n <!-- small badge with text -->\n <p>\n <ion-text color=\"tertiary\">\n <span [appBadge]=\"0\" appBadgeSize=\"small\" appBadgeColor=\"accent\" appBadgeOverlap=\"false\">\n Small badge with text 0\n </span>\n </ion-text>\n </p>\n\n <!-- medium badge -->\n <p>\n <ion-text\n appBadge\n appBadgeMatIcon=\"check\"\n appBadgeSize=\"medium\"\n [appBadgeColor]=\"'tertiary' | matColor\"\n appBadgeOverlap=\"false\"\n >\n Medium badge\n </ion-text>\n </p>\n\n <!-- small badge -->\n <p>\n <ion-label appBadge appBadgeMatIcon=\"close\" appBadgeSize=\"large\" appBadgeOverlap=\"false\">Large badge</ion-label>\n </p>\n\n <!-- default size badge -->\n <p>\n <ion-label appBadge appBadgeMatIcon=\"check\" [appBadgeColor]=\"'success' | matColor\" appBadgeOverlap=\"false\">\n Badge (no size, no color)\n </ion-label>\n </p>\n\n <!-- ion icon -->\n <p>\n <ion-label appBadge appBadgeIcon=\"checkmark\" [appBadgeColor]=\"'success' | matColor\" appBadgeOverlap=\"false\">\n Badge with ion-icon\n </ion-label>\n </p>\n\n <!-- ion icon clear -->\n <p>\n <ion-label\n appBadge\n appBadgeIcon=\"checkmark-circle\"\n [appBadgeColor]=\"'tertiary' | matColor\"\n appBadgeFill=\"clear\"\n appBadgeOverlap=\"false\"\n >\n Badge with clear icon\n </ion-label>\n </p>\n\n <!-- changing text-->\n <ion-row>\n <ion-col>\n <ion-label\n appBadge\n appBadgeIcon=\"checkmark-circle\"\n [appBadgeColor]=\"'tertiary' | matColor\"\n appBadgeFill=\"clear\"\n appBadgeOverlap=\"false\"\n >\n {{ userText }}\n </ion-label>\n </ion-col>\n <ion-col>\n <input type=\"text\" [value]=\"userText\" (input)=\"onInputChanged($event)\" />\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>Configurable example :</ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col size=\"auto\">\n <mat-icon\n [style.color]=\"'var(--ion-color-secondary)'\"\n appBadge\n [appBadgeIcon]=\"$icon | async\"\n [appBadgeColor]=\"$color | async | matColor\"\n [appBadgeHidden]=\"$hidden | async\"\n [appBadgeFill]=\"$fill | async\"\n [appBadgeSize]=\"$size | async\"\n appBadgeOverlap=\"true\"\n appBadgePosition=\"above before\"\n >\n <ion-icon slot=\"icon-only\" [color]=\"'secondary'\" name=\"navigate\"></ion-icon>\n </mat-icon>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeColor</mat-label>\n <mat-select [value]=\"$color.value\" (selectionChange)=\"this.$color.next($event.value)\">\n <mat-option [value]=\"'primary'\">primary</mat-option>\n <mat-option [value]=\"'secondary'\">secondary</mat-option>\n <mat-option [value]=\"'tertiary'\">tertiary</mat-option>\n <mat-option [value]=\"'danger'\">danger</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeIcon</mat-label>\n <mat-select [value]=\"$icon.value\" (selectionChange)=\"this.$icon.next($event.value)\">\n <mat-option [value]=\"'checkmark-circle'\">checkmark-circle</mat-option>\n <mat-option [value]=\"'alert-circle'\">alert-circle</mat-option>\n <mat-option [value]=\"'alert'\">alert</mat-option>\n <mat-option [value]=\"'flag'\">flag</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeSize</mat-label>\n <mat-select [value]=\"$size.value\" (selectionChange)=\"this.$size.next($event.value)\">\n <mat-option [value]=\"'large'\">large</mat-option>\n <mat-option [value]=\"'medium'\">medium</mat-option>\n <mat-option [value]=\"'small'\">small</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeFill</mat-label>\n <mat-select [value]=\"$fill.value\" (selectionChange)=\"this.$fill.next($event.value)\">\n <mat-option [value]=\"'clear'\">clear</mat-option>\n <mat-option [value]=\"'solid'\">solid</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field>\n <mat-label>appBadgeHidden</mat-label>\n <mat-select [value]=\"$hidden.value\" (selectionChange)=\"this.$hidden.next($event.value)\">\n <mat-option [value]=\"true\">true</mat-option>\n <mat-option [value]=\"false\">false</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-raised-button:</p>\n </ion-col>\n <ion-col>\n <button\n mat-raised-button\n color=\"primary\"\n [appBadgeIcon]=\"$icon | async\"\n [appBadgeColor]=\"$color | async | matColor\"\n [appBadgeHidden]=\"$hidden | async\"\n [appBadgeFill]=\"$fill | async\"\n [appBadgeSize]=\"$size | async\"\n appBadgeOverlap=\"true\"\n appBadgePosition=\"below after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button with mat-label:</p>\n </ion-col>\n <ion-col>\n <button\n mat-button\n color=\"primary\"\n class=\"ion-no-padding\"\n [appBadgeIcon]=\"$icon | async\"\n [appBadgeColor]=\"$color | async | matColor\"\n [appBadgeHidden]=\"$hidden | async\"\n [appBadgeFill]=\"$fill | async\"\n [appBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"above after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n </ion-row>\n\n <h4>Angular Material Badge (standard way)</h4>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-icon:</p>\n </ion-col>\n <ion-col>\n <mat-icon\n [style.color]=\"'var(--ion-color-secondary)'\"\n [matBadge]=\"'!'\"\n [matBadgeColor]=\"$color | async | matColor\"\n [matBadgeHidden]=\"$hidden | async\"\n [matBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n >\n <ion-icon slot=\"icon-only\" [color]=\"'secondary'\" name=\"navigate\"></ion-icon>\n </mat-icon>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button:</p>\n </ion-col>\n <ion-col>\n <button\n mat-raised-button\n color=\"primary\"\n [matBadge]=\"matBadgeContent\"\n [matBadgeColor]=\"$color | async | matColor\"\n [matBadgeHidden]=\"$hidden | async\"\n [matBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"above after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n\n <ion-col>\n <input type=\"text\" [value]=\"matBadgeContent\" (input)=\"onMatBadgeContentChanged($event)\" />\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"auto\">\n <p>mat-button</p>\n </ion-col>\n <ion-col>\n <button\n mat-button\n color=\"primary\"\n [matBadge]=\"matBadgeContent\"\n [matBadgeColor]=\"$color | async | matColor\"\n [matBadgeHidden]=\"$hidden | async\"\n [matBadgeSize]=\"$size | async\"\n matBadgeOverlap=\"true\"\n matBadgePosition=\"after\"\n >\n {{ userText }}\n </button>\n </ion-col>\n </ion-row>\n</ion-content>\n" }]
|
|
39
|
-
}], ctorParameters: () => [] });
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2JhZGdlL2JhZGdlLnRlc3QudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9iYWRnZS9iYWRnZS50ZXN0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7O0FBVXZDLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsUUFBUSxHQUFHLGlCQUFpQixDQUFDO0lBQzdCLGVBQWUsR0FBRyxHQUFHLENBQUM7SUFFdEIsS0FBSyxHQUFHLElBQUksZUFBZSxDQUFTLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLEtBQUssR0FBRyxJQUFJLGVBQWUsQ0FBZSxPQUFPLENBQUMsQ0FBQztJQUNuRCxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQWUsT0FBTyxDQUFDLENBQUM7SUFDbkQsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFZLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUM5QyxRQUFRLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFOUIsRUFBRSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRWhELGdCQUFlLENBQUM7SUFFaEIsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxLQUFVO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO3dHQXZCVSxnQkFBZ0I7NEZBQWhCLGdCQUFnQixzRENYN0IsNCtQQW1SQTs7NEZEeFFhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBRVQsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWF0QmFkZ2VGaWxsIH0gZnJvbSAnLi9iYWRnZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0QmFkZ2VTaXplIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYmFkZ2UnO1xuaW1wb3J0IHsgQXBwQ29sb3JzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtYmFkZ2UtdGVzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9iYWRnZS50ZXN0Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWF0QmFkZ2VUZXN0UGFnZSB7XG4gIHVzZXJUZXh0ID0gJ0EgY3VzdG9tIHN0cmluZyc7XG4gIG1hdEJhZGdlQ29udGVudCA9ICchJztcblxuICAkaWNvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignYWxlcnQnKTtcbiAgJHNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hdEJhZGdlU2l6ZT4oJ3NtYWxsJyk7XG4gICRmaWxsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXRCYWRnZUZpbGw+KCdzb2xpZCcpO1xuICAkY29sb3IgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFwcENvbG9ycz4oJ2RhbmdlcicpO1xuICAkaGlkZGVuID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICRvdmVybGFwID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG9uSW5wdXRDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnVzZXJUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbk1hdEJhZGdlQ29udGVudENoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubWF0QmFkZ2VDb250ZW50ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgPGlvbi1iYWNrLWJ1dHRvbj48L2lvbi1iYWNrLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuXG4gICAgPGlvbi10aXRsZT5tYXRCYWRnZUljb24gZGlyZWN0aXZlPC9pb24tdGl0bGU+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gIDwhLS0gc21hbGwgYmFkZ2UgLS0+XG4gIDxwPlxuICAgIDxpb24tdGV4dCBjb2xvcj1cInRlcnRpYXJ5XCI+XG4gICAgICA8c3BhbiBhcHBCYWRnZSBhcHBCYWRnZU1hdEljb249XCJjaGVja1wiIGFwcEJhZGdlU2l6ZT1cInNtYWxsXCIgYXBwQmFkZ2VDb2xvcj1cImFjY2VudFwiIGFwcEJhZGdlT3ZlcmxhcD1cImZhbHNlXCI+XG4gICAgICAgIFNtYWxsIGJhZGdlXG4gICAgICA8L3NwYW4+XG4gICAgPC9pb24tdGV4dD5cbiAgPC9wPlxuXG4gIDwhLS0gc21hbGwgYmFkZ2Ugd2l0aCB0ZXh0IC0tPlxuICA8cD5cbiAgICA8aW9uLXRleHQgY29sb3I9XCJ0ZXJ0aWFyeVwiPlxuICAgICAgPHNwYW4gW2FwcEJhZGdlXT1cIjBcIiBhcHBCYWRnZVNpemU9XCJzbWFsbFwiIGFwcEJhZGdlQ29sb3I9XCJhY2NlbnRcIiBhcHBCYWRnZU92ZXJsYXA9XCJmYWxzZVwiPlxuICAgICAgICBTbWFsbCBiYWRnZSB3aXRoIHRleHQgMFxuICAgICAgPC9zcGFuPlxuICAgIDwvaW9uLXRleHQ+XG4gIDwvcD5cblxuICA8IS0tIG1lZGl1bSBiYWRnZSAtLT5cbiAgPHA+XG4gICAgPGlvbi10ZXh0XG4gICAgICBhcHBCYWRnZVxuICAgICAgYXBwQmFkZ2VNYXRJY29uPVwiY2hlY2tcIlxuICAgICAgYXBwQmFkZ2VTaXplPVwibWVkaXVtXCJcbiAgICAgIFthcHBCYWRnZUNvbG9yXT1cIid0ZXJ0aWFyeScgfCBtYXRDb2xvclwiXG4gICAgICBhcHBCYWRnZU92ZXJsYXA9XCJmYWxzZVwiXG4gICAgPlxuICAgICAgTWVkaXVtIGJhZGdlXG4gICAgPC9pb24tdGV4dD5cbiAgPC9wPlxuXG4gIDwhLS0gc21hbGwgYmFkZ2UgLS0+XG4gIDxwPlxuICAgIDxpb24tbGFiZWwgYXBwQmFkZ2UgYXBwQmFkZ2VNYXRJY29uPVwiY2xvc2VcIiBhcHBCYWRnZVNpemU9XCJsYXJnZVwiIGFwcEJhZGdlT3ZlcmxhcD1cImZhbHNlXCI+TGFyZ2UgYmFkZ2U8L2lvbi1sYWJlbD5cbiAgPC9wPlxuXG4gIDwhLS0gZGVmYXVsdCBzaXplIGJhZGdlIC0tPlxuICA8cD5cbiAgICA8aW9uLWxhYmVsIGFwcEJhZGdlIGFwcEJhZGdlTWF0SWNvbj1cImNoZWNrXCIgW2FwcEJhZGdlQ29sb3JdPVwiJ3N1Y2Nlc3MnIHwgbWF0Q29sb3JcIiBhcHBCYWRnZU92ZXJsYXA9XCJmYWxzZVwiPlxuICAgICAgQmFkZ2UgKG5vIHNpemUsIG5vIGNvbG9yKVxuICAgIDwvaW9uLWxhYmVsPlxuICA8L3A+XG5cbiAgPCEtLSBpb24gaWNvbiAtLT5cbiAgPHA+XG4gICAgPGlvbi1sYWJlbCBhcHBCYWRnZSBhcHBCYWRnZUljb249XCJjaGVja21hcmtcIiBbYXBwQmFkZ2VDb2xvcl09XCInc3VjY2VzcycgfCBtYXRDb2xvclwiIGFwcEJhZGdlT3ZlcmxhcD1cImZhbHNlXCI+XG4gICAgICBCYWRnZSB3aXRoIGlvbi1pY29uXG4gICAgPC9pb24tbGFiZWw+XG4gIDwvcD5cblxuICA8IS0tIGlvbiBpY29uIGNsZWFyIC0tPlxuICA8cD5cbiAgICA8aW9uLWxhYmVsXG4gICAgICBhcHBCYWRnZVxuICAgICAgYXBwQmFkZ2VJY29uPVwiY2hlY2ttYXJrLWNpcmNsZVwiXG4gICAgICBbYXBwQmFkZ2VDb2xvcl09XCIndGVydGlhcnknIHwgbWF0Q29sb3JcIlxuICAgICAgYXBwQmFkZ2VGaWxsPVwiY2xlYXJcIlxuICAgICAgYXBwQmFkZ2VPdmVybGFwPVwiZmFsc2VcIlxuICAgID5cbiAgICAgIEJhZGdlIHdpdGggY2xlYXIgaWNvblxuICAgIDwvaW9uLWxhYmVsPlxuICA8L3A+XG5cbiAgPCEtLSBjaGFuZ2luZyB0ZXh0LS0+XG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sPlxuICAgICAgPGlvbi1sYWJlbFxuICAgICAgICBhcHBCYWRnZVxuICAgICAgICBhcHBCYWRnZUljb249XCJjaGVja21hcmstY2lyY2xlXCJcbiAgICAgICAgW2FwcEJhZGdlQ29sb3JdPVwiJ3RlcnRpYXJ5JyB8IG1hdENvbG9yXCJcbiAgICAgICAgYXBwQmFkZ2VGaWxsPVwiY2xlYXJcIlxuICAgICAgICBhcHBCYWRnZU92ZXJsYXA9XCJmYWxzZVwiXG4gICAgICA+XG4gICAgICAgIHt7IHVzZXJUZXh0IH19XG4gICAgICA8L2lvbi1sYWJlbD5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2w+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbdmFsdWVdPVwidXNlclRleHRcIiAoaW5wdXQpPVwib25JbnB1dENoYW5nZWQoJGV2ZW50KVwiIC8+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2w+Q29uZmlndXJhYmxlIGV4YW1wbGUgOjwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLWlvbi1jb2xvci1zZWNvbmRhcnkpJ1wiXG4gICAgICAgIGFwcEJhZGdlXG4gICAgICAgIFthcHBCYWRnZUljb25dPVwiJGljb24gfCBhc3luY1wiXG4gICAgICAgIFthcHBCYWRnZUNvbG9yXT1cIiRjb2xvciB8IGFzeW5jIHwgbWF0Q29sb3JcIlxuICAgICAgICBbYXBwQmFkZ2VIaWRkZW5dPVwiJGhpZGRlbiB8IGFzeW5jXCJcbiAgICAgICAgW2FwcEJhZGdlRmlsbF09XCIkZmlsbCB8IGFzeW5jXCJcbiAgICAgICAgW2FwcEJhZGdlU2l6ZV09XCIkc2l6ZSB8IGFzeW5jXCJcbiAgICAgICAgYXBwQmFkZ2VPdmVybGFwPVwidHJ1ZVwiXG4gICAgICAgIGFwcEJhZGdlUG9zaXRpb249XCJhYm92ZSBiZWZvcmVcIlxuICAgICAgPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIFtjb2xvcl09XCInc2Vjb25kYXJ5J1wiIG5hbWU9XCJuYXZpZ2F0ZVwiPjwvaW9uLWljb24+XG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPmFwcEJhZGdlQ29sb3I8L21hdC1sYWJlbD5cbiAgICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cIiRjb2xvci52YWx1ZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwidGhpcy4kY29sb3IubmV4dCgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidwcmltYXJ5J1wiPnByaW1hcnk8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidzZWNvbmRhcnknXCI+c2Vjb25kYXJ5PC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIndGVydGlhcnknXCI+dGVydGlhcnk8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidkYW5nZXInXCI+ZGFuZ2VyPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPmFwcEJhZGdlSWNvbjwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBbdmFsdWVdPVwiJGljb24udmFsdWVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInRoaXMuJGljb24ubmV4dCgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidjaGVja21hcmstY2lyY2xlJ1wiPmNoZWNrbWFyay1jaXJjbGU8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidhbGVydC1jaXJjbGUnXCI+YWxlcnQtY2lyY2xlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInYWxlcnQnXCI+YWxlcnQ8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidmbGFnJ1wiPmZsYWc8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPGlvbi1jb2w+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+YXBwQmFkZ2VTaXplPC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCIkc2l6ZS52YWx1ZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwidGhpcy4kc2l6ZS5uZXh0KCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ2xhcmdlJ1wiPmxhcmdlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInbWVkaXVtJ1wiPm1lZGl1bTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ3NtYWxsJ1wiPnNtYWxsPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPmFwcEJhZGdlRmlsbDwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBbdmFsdWVdPVwiJGZpbGwudmFsdWVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInRoaXMuJGZpbGwubmV4dCgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidjbGVhcidcIj5jbGVhcjwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ3NvbGlkJ1wiPnNvbGlkPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPmFwcEJhZGdlSGlkZGVuPC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCIkaGlkZGVuLnZhbHVlXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJ0aGlzLiRoaWRkZW4ubmV4dCgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInRydWVcIj50cnVlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmYWxzZVwiPmZhbHNlPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICA8cD5tYXQtcmFpc2VkLWJ1dHRvbjo8L3A+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBbYXBwQmFkZ2VJY29uXT1cIiRpY29uIHwgYXN5bmNcIlxuICAgICAgICBbYXBwQmFkZ2VDb2xvcl09XCIkY29sb3IgfCBhc3luYyB8IG1hdENvbG9yXCJcbiAgICAgICAgW2FwcEJhZGdlSGlkZGVuXT1cIiRoaWRkZW4gfCBhc3luY1wiXG4gICAgICAgIFthcHBCYWRnZUZpbGxdPVwiJGZpbGwgfCBhc3luY1wiXG4gICAgICAgIFthcHBCYWRnZVNpemVdPVwiJHNpemUgfCBhc3luY1wiXG4gICAgICAgIGFwcEJhZGdlT3ZlcmxhcD1cInRydWVcIlxuICAgICAgICBhcHBCYWRnZVBvc2l0aW9uPVwiYmVsb3cgYWZ0ZXJcIlxuICAgICAgPlxuICAgICAgICB7eyB1c2VyVGV4dCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgIDxwPm1hdC1idXR0b24gd2l0aCBtYXQtbGFiZWw6PC9wPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCJcbiAgICAgICAgW2FwcEJhZGdlSWNvbl09XCIkaWNvbiB8IGFzeW5jXCJcbiAgICAgICAgW2FwcEJhZGdlQ29sb3JdPVwiJGNvbG9yIHwgYXN5bmMgfCBtYXRDb2xvclwiXG4gICAgICAgIFthcHBCYWRnZUhpZGRlbl09XCIkaGlkZGVuIHwgYXN5bmNcIlxuICAgICAgICBbYXBwQmFkZ2VGaWxsXT1cIiRmaWxsIHwgYXN5bmNcIlxuICAgICAgICBbYXBwQmFkZ2VTaXplXT1cIiRzaXplIHwgYXN5bmNcIlxuICAgICAgICBtYXRCYWRnZU92ZXJsYXA9XCJ0cnVlXCJcbiAgICAgICAgbWF0QmFkZ2VQb3NpdGlvbj1cImFib3ZlIGFmdGVyXCJcbiAgICAgID5cbiAgICAgICAge3sgdXNlclRleHQgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxoND5Bbmd1bGFyIE1hdGVyaWFsIEJhZGdlIChzdGFuZGFyZCB3YXkpPC9oND5cblxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgPHA+bWF0LWljb246PC9wPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLWlvbi1jb2xvci1zZWNvbmRhcnkpJ1wiXG4gICAgICAgIFttYXRCYWRnZV09XCInISdcIlxuICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIkY29sb3IgfCBhc3luYyB8IG1hdENvbG9yXCJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIiRoaWRkZW4gfCBhc3luY1wiXG4gICAgICAgIFttYXRCYWRnZVNpemVdPVwiJHNpemUgfCBhc3luY1wiXG4gICAgICAgIG1hdEJhZGdlT3ZlcmxhcD1cInRydWVcIlxuICAgICAgPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIFtjb2xvcl09XCInc2Vjb25kYXJ5J1wiIG5hbWU9XCJuYXZpZ2F0ZVwiPjwvaW9uLWljb24+XG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICA8cD5tYXQtYnV0dG9uOjwvcD5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2w+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFttYXRCYWRnZV09XCJtYXRCYWRnZUNvbnRlbnRcIlxuICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIkY29sb3IgfCBhc3luYyB8IG1hdENvbG9yXCJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIiRoaWRkZW4gfCBhc3luY1wiXG4gICAgICAgIFttYXRCYWRnZVNpemVdPVwiJHNpemUgfCBhc3luY1wiXG4gICAgICAgIG1hdEJhZGdlT3ZlcmxhcD1cInRydWVcIlxuICAgICAgICBtYXRCYWRnZVBvc2l0aW9uPVwiYWJvdmUgYWZ0ZXJcIlxuICAgICAgPlxuICAgICAgICB7eyB1c2VyVGV4dCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPGlvbi1jb2w+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbdmFsdWVdPVwibWF0QmFkZ2VDb250ZW50XCIgKGlucHV0KT1cIm9uTWF0QmFkZ2VDb250ZW50Q2hhbmdlZCgkZXZlbnQpXCIgLz5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cblxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgPHA+bWF0LWJ1dHRvbjwvcD5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2w+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgW21hdEJhZGdlXT1cIm1hdEJhZGdlQ29udGVudFwiXG4gICAgICAgIFttYXRCYWRnZUNvbG9yXT1cIiRjb2xvciB8IGFzeW5jIHwgbWF0Q29sb3JcIlxuICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiJGhpZGRlbiB8IGFzeW5jXCJcbiAgICAgICAgW21hdEJhZGdlU2l6ZV09XCIkc2l6ZSB8IGFzeW5jXCJcbiAgICAgICAgbWF0QmFkZ2VPdmVybGFwPVwidHJ1ZVwiXG4gICAgICAgIG1hdEJhZGdlUG9zaXRpb249XCJhZnRlclwiXG4gICAgICA+XG4gICAgICAgIHt7IHVzZXJUZXh0IH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=
|
|
41
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2JhZGdlL2JhZGdlLnRlc3QudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9iYWRnZS9iYWRnZS50ZXN0Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7O0FBVXZDLE1BQU0sT0FBTyxnQkFBZ0I7SUFXUDtJQVZwQixRQUFRLEdBQUcsaUJBQWlCLENBQUM7SUFDN0IsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQUV0QixLQUFLLEdBQUcsSUFBSSxlQUFlLENBQVMsT0FBTyxDQUFDLENBQUM7SUFDN0MsS0FBSyxHQUFHLElBQUksZUFBZSxDQUFlLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELEtBQUssR0FBRyxJQUFJLGVBQWUsQ0FBZSxPQUFPLENBQUMsQ0FBQztJQUNuRCxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQVksUUFBUSxDQUFDLENBQUM7SUFDbEQsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQzlDLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUUvQyxZQUFvQixFQUFxQjtRQUFyQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtJQUFHLENBQUM7SUFFN0MsY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxLQUFVO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO3dHQXJCVSxnQkFBZ0I7NEZBQWhCLGdCQUFnQixzRENYN0IsNCtQQW1SQTs7NEZEeFFhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBRVQsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hdEJhZGdlRmlsbCB9IGZyb20gJy4vYmFkZ2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IE1hdEJhZGdlU2l6ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JhZGdlJztcbmltcG9ydCB7IEFwcENvbG9ycyB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LWJhZGdlLXRlc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYmFkZ2UudGVzdC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1hdEJhZGdlVGVzdFBhZ2Uge1xuICB1c2VyVGV4dCA9ICdBIGN1c3RvbSBzdHJpbmcnO1xuICBtYXRCYWRnZUNvbnRlbnQgPSAnISc7XG5cbiAgJGljb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ2FsZXJ0Jyk7XG4gICRzaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXRCYWRnZVNpemU+KCdzbWFsbCcpO1xuICAkZmlsbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF0QmFkZ2VGaWxsPignc29saWQnKTtcbiAgJGNvbG9yID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcHBDb2xvcnM+KCdkYW5nZXInKTtcbiAgJGhpZGRlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAkb3ZlcmxhcCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG9uSW5wdXRDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnVzZXJUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbk1hdEJhZGdlQ29udGVudENoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubWF0QmFkZ2VDb250ZW50ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgPGlvbi1iYWNrLWJ1dHRvbj48L2lvbi1iYWNrLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuXG4gICAgPGlvbi10aXRsZT5tYXRCYWRnZUljb24gZGlyZWN0aXZlPC9pb24tdGl0bGU+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gIDwhLS0gc21hbGwgYmFkZ2UgLS0+XG4gIDxwPlxuICAgIDxpb24tdGV4dCBjb2xvcj1cInRlcnRpYXJ5XCI+XG4gICAgICA8c3BhbiBhcHBCYWRnZSBhcHBCYWRnZU1hdEljb249XCJjaGVja1wiIGFwcEJhZGdlU2l6ZT1cInNtYWxsXCIgYXBwQmFkZ2VDb2xvcj1cImFjY2VudFwiIGFwcEJhZGdlT3ZlcmxhcD1cImZhbHNlXCI+XG4gICAgICAgIFNtYWxsIGJhZGdlXG4gICAgICA8L3NwYW4+XG4gICAgPC9pb24tdGV4dD5cbiAgPC9wPlxuXG4gIDwhLS0gc21hbGwgYmFkZ2Ugd2l0aCB0ZXh0IC0tPlxuICA8cD5cbiAgICA8aW9uLXRleHQgY29sb3I9XCJ0ZXJ0aWFyeVwiPlxuICAgICAgPHNwYW4gW2FwcEJhZGdlXT1cIjBcIiBhcHBCYWRnZVNpemU9XCJzbWFsbFwiIGFwcEJhZGdlQ29sb3I9XCJhY2NlbnRcIiBhcHBCYWRnZU92ZXJsYXA9XCJmYWxzZVwiPlxuICAgICAgICBTbWFsbCBiYWRnZSB3aXRoIHRleHQgMFxuICAgICAgPC9zcGFuPlxuICAgIDwvaW9uLXRleHQ+XG4gIDwvcD5cblxuICA8IS0tIG1lZGl1bSBiYWRnZSAtLT5cbiAgPHA+XG4gICAgPGlvbi10ZXh0XG4gICAgICBhcHBCYWRnZVxuICAgICAgYXBwQmFkZ2VNYXRJY29uPVwiY2hlY2tcIlxuICAgICAgYXBwQmFkZ2VTaXplPVwibWVkaXVtXCJcbiAgICAgIFthcHBCYWRnZUNvbG9yXT1cIid0ZXJ0aWFyeScgfCBtYXRDb2xvclwiXG4gICAgICBhcHBCYWRnZU92ZXJsYXA9XCJmYWxzZVwiXG4gICAgPlxuICAgICAgTWVkaXVtIGJhZGdlXG4gICAgPC9pb24tdGV4dD5cbiAgPC9wPlxuXG4gIDwhLS0gc21hbGwgYmFkZ2UgLS0+XG4gIDxwPlxuICAgIDxpb24tbGFiZWwgYXBwQmFkZ2UgYXBwQmFkZ2VNYXRJY29uPVwiY2xvc2VcIiBhcHBCYWRnZVNpemU9XCJsYXJnZVwiIGFwcEJhZGdlT3ZlcmxhcD1cImZhbHNlXCI+TGFyZ2UgYmFkZ2U8L2lvbi1sYWJlbD5cbiAgPC9wPlxuXG4gIDwhLS0gZGVmYXVsdCBzaXplIGJhZGdlIC0tPlxuICA8cD5cbiAgICA8aW9uLWxhYmVsIGFwcEJhZGdlIGFwcEJhZGdlTWF0SWNvbj1cImNoZWNrXCIgW2FwcEJhZGdlQ29sb3JdPVwiJ3N1Y2Nlc3MnIHwgbWF0Q29sb3JcIiBhcHBCYWRnZU92ZXJsYXA9XCJmYWxzZVwiPlxuICAgICAgQmFkZ2UgKG5vIHNpemUsIG5vIGNvbG9yKVxuICAgIDwvaW9uLWxhYmVsPlxuICA8L3A+XG5cbiAgPCEtLSBpb24gaWNvbiAtLT5cbiAgPHA+XG4gICAgPGlvbi1sYWJlbCBhcHBCYWRnZSBhcHBCYWRnZUljb249XCJjaGVja21hcmtcIiBbYXBwQmFkZ2VDb2xvcl09XCInc3VjY2VzcycgfCBtYXRDb2xvclwiIGFwcEJhZGdlT3ZlcmxhcD1cImZhbHNlXCI+XG4gICAgICBCYWRnZSB3aXRoIGlvbi1pY29uXG4gICAgPC9pb24tbGFiZWw+XG4gIDwvcD5cblxuICA8IS0tIGlvbiBpY29uIGNsZWFyIC0tPlxuICA8cD5cbiAgICA8aW9uLWxhYmVsXG4gICAgICBhcHBCYWRnZVxuICAgICAgYXBwQmFkZ2VJY29uPVwiY2hlY2ttYXJrLWNpcmNsZVwiXG4gICAgICBbYXBwQmFkZ2VDb2xvcl09XCIndGVydGlhcnknIHwgbWF0Q29sb3JcIlxuICAgICAgYXBwQmFkZ2VGaWxsPVwiY2xlYXJcIlxuICAgICAgYXBwQmFkZ2VPdmVybGFwPVwiZmFsc2VcIlxuICAgID5cbiAgICAgIEJhZGdlIHdpdGggY2xlYXIgaWNvblxuICAgIDwvaW9uLWxhYmVsPlxuICA8L3A+XG5cbiAgPCEtLSBjaGFuZ2luZyB0ZXh0LS0+XG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sPlxuICAgICAgPGlvbi1sYWJlbFxuICAgICAgICBhcHBCYWRnZVxuICAgICAgICBhcHBCYWRnZUljb249XCJjaGVja21hcmstY2lyY2xlXCJcbiAgICAgICAgW2FwcEJhZGdlQ29sb3JdPVwiJ3RlcnRpYXJ5JyB8IG1hdENvbG9yXCJcbiAgICAgICAgYXBwQmFkZ2VGaWxsPVwiY2xlYXJcIlxuICAgICAgICBhcHBCYWRnZU92ZXJsYXA9XCJmYWxzZVwiXG4gICAgICA+XG4gICAgICAgIHt7IHVzZXJUZXh0IH19XG4gICAgICA8L2lvbi1sYWJlbD5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2w+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbdmFsdWVdPVwidXNlclRleHRcIiAoaW5wdXQpPVwib25JbnB1dENoYW5nZWQoJGV2ZW50KVwiIC8+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2w+Q29uZmlndXJhYmxlIGV4YW1wbGUgOjwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLWlvbi1jb2xvci1zZWNvbmRhcnkpJ1wiXG4gICAgICAgIGFwcEJhZGdlXG4gICAgICAgIFthcHBCYWRnZUljb25dPVwiJGljb24gfCBhc3luY1wiXG4gICAgICAgIFthcHBCYWRnZUNvbG9yXT1cIiRjb2xvciB8IGFzeW5jIHwgbWF0Q29sb3JcIlxuICAgICAgICBbYXBwQmFkZ2VIaWRkZW5dPVwiJGhpZGRlbiB8IGFzeW5jXCJcbiAgICAgICAgW2FwcEJhZGdlRmlsbF09XCIkZmlsbCB8IGFzeW5jXCJcbiAgICAgICAgW2FwcEJhZGdlU2l6ZV09XCIkc2l6ZSB8IGFzeW5jXCJcbiAgICAgICAgYXBwQmFkZ2VPdmVybGFwPVwidHJ1ZVwiXG4gICAgICAgIGFwcEJhZGdlUG9zaXRpb249XCJhYm92ZSBiZWZvcmVcIlxuICAgICAgPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIFtjb2xvcl09XCInc2Vjb25kYXJ5J1wiIG5hbWU9XCJuYXZpZ2F0ZVwiPjwvaW9uLWljb24+XG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPmFwcEJhZGdlQ29sb3I8L21hdC1sYWJlbD5cbiAgICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cIiRjb2xvci52YWx1ZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwidGhpcy4kY29sb3IubmV4dCgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidwcmltYXJ5J1wiPnByaW1hcnk8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidzZWNvbmRhcnknXCI+c2Vjb25kYXJ5PC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIndGVydGlhcnknXCI+dGVydGlhcnk8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidkYW5nZXInXCI+ZGFuZ2VyPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPmFwcEJhZGdlSWNvbjwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBbdmFsdWVdPVwiJGljb24udmFsdWVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInRoaXMuJGljb24ubmV4dCgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidjaGVja21hcmstY2lyY2xlJ1wiPmNoZWNrbWFyay1jaXJjbGU8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidhbGVydC1jaXJjbGUnXCI+YWxlcnQtY2lyY2xlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInYWxlcnQnXCI+YWxlcnQ8L21hdC1vcHRpb24+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidmbGFnJ1wiPmZsYWc8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPGlvbi1jb2w+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+YXBwQmFkZ2VTaXplPC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCIkc2l6ZS52YWx1ZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwidGhpcy4kc2l6ZS5uZXh0KCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ2xhcmdlJ1wiPmxhcmdlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInbWVkaXVtJ1wiPm1lZGl1bTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ3NtYWxsJ1wiPnNtYWxsPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPmFwcEJhZGdlRmlsbDwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBbdmFsdWVdPVwiJGZpbGwudmFsdWVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInRoaXMuJGZpbGwubmV4dCgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidjbGVhcidcIj5jbGVhcjwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ3NvbGlkJ1wiPnNvbGlkPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvaW9uLWNvbD5cblxuICAgIDxpb24tY29sPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPmFwcEJhZGdlSGlkZGVuPC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCIkaGlkZGVuLnZhbHVlXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJ0aGlzLiRoaWRkZW4ubmV4dCgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInRydWVcIj50cnVlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJmYWxzZVwiPmZhbHNlPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICA8cD5tYXQtcmFpc2VkLWJ1dHRvbjo8L3A+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBbYXBwQmFkZ2VJY29uXT1cIiRpY29uIHwgYXN5bmNcIlxuICAgICAgICBbYXBwQmFkZ2VDb2xvcl09XCIkY29sb3IgfCBhc3luYyB8IG1hdENvbG9yXCJcbiAgICAgICAgW2FwcEJhZGdlSGlkZGVuXT1cIiRoaWRkZW4gfCBhc3luY1wiXG4gICAgICAgIFthcHBCYWRnZUZpbGxdPVwiJGZpbGwgfCBhc3luY1wiXG4gICAgICAgIFthcHBCYWRnZVNpemVdPVwiJHNpemUgfCBhc3luY1wiXG4gICAgICAgIGFwcEJhZGdlT3ZlcmxhcD1cInRydWVcIlxuICAgICAgICBhcHBCYWRnZVBvc2l0aW9uPVwiYmVsb3cgYWZ0ZXJcIlxuICAgICAgPlxuICAgICAgICB7eyB1c2VyVGV4dCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgIDxwPm1hdC1idXR0b24gd2l0aCBtYXQtbGFiZWw6PC9wPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCJcbiAgICAgICAgW2FwcEJhZGdlSWNvbl09XCIkaWNvbiB8IGFzeW5jXCJcbiAgICAgICAgW2FwcEJhZGdlQ29sb3JdPVwiJGNvbG9yIHwgYXN5bmMgfCBtYXRDb2xvclwiXG4gICAgICAgIFthcHBCYWRnZUhpZGRlbl09XCIkaGlkZGVuIHwgYXN5bmNcIlxuICAgICAgICBbYXBwQmFkZ2VGaWxsXT1cIiRmaWxsIHwgYXN5bmNcIlxuICAgICAgICBbYXBwQmFkZ2VTaXplXT1cIiRzaXplIHwgYXN5bmNcIlxuICAgICAgICBtYXRCYWRnZU92ZXJsYXA9XCJ0cnVlXCJcbiAgICAgICAgbWF0QmFkZ2VQb3NpdGlvbj1cImFib3ZlIGFmdGVyXCJcbiAgICAgID5cbiAgICAgICAge3sgdXNlclRleHQgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxoND5Bbmd1bGFyIE1hdGVyaWFsIEJhZGdlIChzdGFuZGFyZCB3YXkpPC9oND5cblxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgPHA+bWF0LWljb246PC9wPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3ZhcigtLWlvbi1jb2xvci1zZWNvbmRhcnkpJ1wiXG4gICAgICAgIFttYXRCYWRnZV09XCInISdcIlxuICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIkY29sb3IgfCBhc3luYyB8IG1hdENvbG9yXCJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIiRoaWRkZW4gfCBhc3luY1wiXG4gICAgICAgIFttYXRCYWRnZVNpemVdPVwiJHNpemUgfCBhc3luY1wiXG4gICAgICAgIG1hdEJhZGdlT3ZlcmxhcD1cInRydWVcIlxuICAgICAgPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIFtjb2xvcl09XCInc2Vjb25kYXJ5J1wiIG5hbWU9XCJuYXZpZ2F0ZVwiPjwvaW9uLWljb24+XG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICA8cD5tYXQtYnV0dG9uOjwvcD5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2w+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFttYXRCYWRnZV09XCJtYXRCYWRnZUNvbnRlbnRcIlxuICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIkY29sb3IgfCBhc3luYyB8IG1hdENvbG9yXCJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIiRoaWRkZW4gfCBhc3luY1wiXG4gICAgICAgIFttYXRCYWRnZVNpemVdPVwiJHNpemUgfCBhc3luY1wiXG4gICAgICAgIG1hdEJhZGdlT3ZlcmxhcD1cInRydWVcIlxuICAgICAgICBtYXRCYWRnZVBvc2l0aW9uPVwiYWJvdmUgYWZ0ZXJcIlxuICAgICAgPlxuICAgICAgICB7eyB1c2VyVGV4dCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPGlvbi1jb2w+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbdmFsdWVdPVwibWF0QmFkZ2VDb250ZW50XCIgKGlucHV0KT1cIm9uTWF0QmFkZ2VDb250ZW50Q2hhbmdlZCgkZXZlbnQpXCIgLz5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cblxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgPHA+bWF0LWJ1dHRvbjwvcD5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2w+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgW21hdEJhZGdlXT1cIm1hdEJhZGdlQ29udGVudFwiXG4gICAgICAgIFttYXRCYWRnZUNvbG9yXT1cIiRjb2xvciB8IGFzeW5jIHwgbWF0Q29sb3JcIlxuICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiJGhpZGRlbiB8IGFzeW5jXCJcbiAgICAgICAgW21hdEJhZGdlU2l6ZV09XCIkc2l6ZSB8IGFzeW5jXCJcbiAgICAgICAgbWF0QmFkZ2VPdmVybGFwPVwidHJ1ZVwiXG4gICAgICAgIG1hdEJhZGdlUG9zaXRpb249XCJhZnRlclwiXG4gICAgICA+XG4gICAgICAgIHt7IHVzZXJUZXh0IH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { booleanAttribute, ChangeDetectionStrategy,
|
|
2
|
-
import {
|
|
1
|
+
import { booleanAttribute, ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, numberAttribute, Optional, Output, ViewChild, } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
3
|
import { isNil, isNotNil, toNumber } from '../../functions';
|
|
4
4
|
import { setTimeout } from '@rx-angular/cdk/zone-less/browser';
|
|
5
5
|
import { Subscription } from 'rxjs';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/
|
|
8
|
-
import * as i2 from "@
|
|
9
|
-
import * as i3 from "@angular
|
|
7
|
+
import * as i1 from "@angular/forms";
|
|
8
|
+
import * as i2 from "@angular/common";
|
|
9
|
+
import * as i3 from "@ionic/angular";
|
|
10
10
|
import * as i4 from "@angular/material/form-field";
|
|
11
11
|
import * as i5 from "@angular/material/input";
|
|
12
12
|
import * as i6 from "@angular/material/radio";
|
|
@@ -23,6 +23,9 @@ const DEFAULT_VALUE_ACCESSOR = {
|
|
|
23
23
|
};
|
|
24
24
|
const noop = () => { };
|
|
25
25
|
export class MatBooleanField {
|
|
26
|
+
cd;
|
|
27
|
+
el;
|
|
28
|
+
formGroupDir;
|
|
26
29
|
_onChangeCallback = noop;
|
|
27
30
|
_onTouchedCallback = noop;
|
|
28
31
|
_subscription = new Subscription();
|
|
@@ -92,11 +95,13 @@ export class MatBooleanField {
|
|
|
92
95
|
}
|
|
93
96
|
// eslint-disable-next-line @angular-eslint/no-output-on-prefix,@angular-eslint/no-output-rename
|
|
94
97
|
keyupEnter = new EventEmitter();
|
|
95
|
-
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
|
|
98
|
+
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
|
|
96
99
|
blurred = new EventEmitter();
|
|
97
|
-
cd
|
|
98
|
-
|
|
99
|
-
|
|
100
|
+
constructor(cd, el, formGroupDir) {
|
|
101
|
+
this.cd = cd;
|
|
102
|
+
this.el = el;
|
|
103
|
+
this.formGroupDir = formGroupDir;
|
|
104
|
+
}
|
|
100
105
|
ngOnInit() {
|
|
101
106
|
this.formControl =
|
|
102
107
|
this.formControl || (this.formControlName && this.formGroupDir && this.formGroupDir.form.get(this.formControlName));
|
|
@@ -178,7 +183,7 @@ export class MatBooleanField {
|
|
|
178
183
|
setTimeout(() => {
|
|
179
184
|
// Add a blur listener on each inputs
|
|
180
185
|
const inputElements = this.inputsElements;
|
|
181
|
-
inputElements.forEach((el) => (el.onblur = () => {
|
|
186
|
+
inputElements.forEach((el) => (el.onblur = (e) => {
|
|
182
187
|
// Setup a one-time focus event handler
|
|
183
188
|
const focusListener = (focusEvent) => {
|
|
184
189
|
// Remove the event listener after it has been executed once
|
|
@@ -280,13 +285,15 @@ export class MatBooleanField {
|
|
|
280
285
|
get ionButtons() {
|
|
281
286
|
return [this.yesButton, this.noButton];
|
|
282
287
|
}
|
|
283
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MatBooleanField, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
284
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: MatBooleanField, selector: "mat-boolean-field", inputs: { disabled: ["disabled", "disabled", booleanAttribute], formControl: "formControl", formControlName: "formControlName", placeholder: "placeholder", floatLabel: "floatLabel", appearance: "appearance", subscriptSizing: "subscriptSizing", readonly: ["readonly", "readonly", booleanAttribute], required: ["required", "required", booleanAttribute], compact: ["compact", "compact", booleanAttribute], style: "style", buttonsColCount: ["buttonsColCount", "buttonsColCount", numberAttribute], classList: ["class", "classList"], yesLabel: "yesLabel", noLabel: "noLabel", showButtonIcons: ["showButtonIcons", "showButtonIcons", booleanAttribute], yesIcon: "yesIcon", noIcon: "noIcon", clearable: ["clearable", "clearable", booleanAttribute], labelPosition: "labelPosition", tabindex: ["tabindex", "tabindex", numberAttribute], showRadio: ["showRadio", "showRadio", booleanAttribute], value: "value" }, outputs: { keyupEnter: "keyup.enter", blurred: "blur" }, providers: [DEFAULT_VALUE_ACCESSOR], viewQueries: [{ propertyName: "yesRadioButton", first: true, predicate: ["yesRadioButton"], descendants: true }, { propertyName: "noRadioButton", first: true, predicate: ["noRadioButton"], descendants: true }, { propertyName: "checkboxButton", first: true, predicate: ["checkboxButton"], descendants: true }, { propertyName: "yesButton", first: true, predicate: ["yesButton"], descendants: true }, { propertyName: "noButton", first: true, predicate: ["noButton"], descendants: true }, { propertyName: "fakeInput", first: true, predicate: ["fakeInput"], descendants: true }], ngImport: i0, template: "@if (readonly) {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-form-field-disabled {{ classList }}\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>\n {{ (value === null ? 'COMMON.EMPTY_OPTION' : value === true ? yesLabel : noLabel) | translate }}\n </ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n} @else {\n @switch (style) {\n <!-- Radio -->\n @case ('radio') {\n <mat-form-field\n [floatLabel]=\"showRadio && (!floatLabel || floatLabel === 'auto') ? 'always' : (floatLabel | asFloatLabelType)\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-boolean-field mat-boolean-field-radio {{ classList }}\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label [title]=\"placeholder\">\n {{ placeholder }}\n <span [class.cdk-visually-hidden]=\"showRadio\">({{ yesLabel | translate }}/{{ noLabel | translate }})</span>\n </mat-label>\n }\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n #fakeInput\n type=\"text\"\n readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n (keydown.space)=\"toggleValue($event)\"\n (keyup.arrowLeft)=\"toggleValue($event)\"\n (keyup.arrowRight)=\"toggleValue($event)\"\n (keyup.arrowUp)=\"toggleValue($event)\"\n (keyup.arrowDown)=\"toggleValue($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\"\n />\n\n <!-- radio button -->\n <mat-radio-group\n [class.cdk-visually-hidden]=\"!showRadio\"\n [formControl]=\"formControl\"\n (change)=\"onRadioValueChanged($event)\"\n >\n <mat-radio-button #yesRadioButton [value]=\"true\" tabIndex=\"-1\">\n <span>{{ yesLabel | translate }}</span>\n </mat-radio-button>\n \n <mat-radio-button #noRadioButton [value]=\"false\" tabIndex=\"-1\">\n <span>{{ noLabel | translate }}</span>\n </mat-radio-button>\n </mat-radio-group>\n\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearValue($event)\"\n [hidden]=\"_value | isNil\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n }\n\n <!-- Checkbox -->\n @case ('checkbox') {\n <mat-form-field\n floatLabel=\"always\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{ classList }}\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n #fakeInput\n readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n (keydown.space)=\"toggleValue($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\"\n />\n\n <!-- checkbox, when compact -->\n <mat-checkbox\n #checkboxButton\n [formControl]=\"formControl\"\n (change)=\"onCheckboxValueChanged($event)\"\n [indeterminate]=\"value | isNil\"\n [class.cdk-visually-hidden]=\"!showRadio\"\n [labelPosition]=\"labelPosition\"\n [title]=\"placeholder || ''\"\n [tabIndex]=\"-1\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n {{ placeholder || '' }}\n }\n </mat-checkbox>\n\n @if (floatLabel === 'never' || !placeholder) {\n <mat-label> </mat-label>\n }\n\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearValue($event)\"\n [hidden]=\"_value | isNil\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n }\n\n <!-- Buttons -->\n @case ('button') {\n <mat-form-field\n [floatLabel]=\"'always'\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-boolean-field mat-boolean-field-button {{ classList }}\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label [title]=\"placeholder\">{{ placeholder }}</mat-label>\n } @else {\n <mat-label> </mat-label>\n }\n\n <input\n #fakeInput\n matInput\n type=\"text\"\n class=\"cdk-visually-hidden\"\n readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n (keydown.space)=\"toggleValue($event)\"\n (keyup.arrowLeft)=\"toggleValue($event)\"\n (keyup.arrowRight)=\"toggleValue($event)\"\n (keyup.arrowUp)=\"toggleValue($event)\"\n (keyup.arrowDown)=\"toggleValue($event)\"\n [required]=\"required\"\n [tabindex]=\"_tabindex\"\n />\n @if (formControl.disabled) {\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n } @else {\n <div class=\"mat-form-field-buttons\" [style.--buttons-col-count]=\"buttonsColCount\">\n <!-- yes -->\n <ion-button\n #yesButton\n class=\"mat-form-field-button\"\n [tabIndex]=\"-1\"\n (click)=\"writeValue(true, $event)\"\n (keyup.enter)=\"writeValue(true, $event)\"\n [color]=\"_value === null ? 'tertiary' : _value === true ? 'accent' : 'light'\"\n >\n @if (showButtonIcons && yesIcon; as icon) {\n <ion-icon slot=\"start\" [name]=\"icon\"></ion-icon>\n }\n {{ yesLabel | translate }}\n </ion-button>\n\n <!-- No button -->\n <ion-button\n #noButton\n class=\"mat-form-field-button\"\n [tabIndex]=\"-1\"\n (click)=\"writeValue(false, $event)\"\n (keydown.space)=\"toggleValue($event)\"\n (keyup.enter)=\"writeValue(false, $event)\"\n [color]=\"_value === null ? 'tertiary' : _value === false ? 'accent' : 'light'\"\n >\n @if (showButtonIcons && noIcon; as icon) {\n <ion-icon slot=\"start\" [name]=\"icon\"></ion-icon>\n }\n {{ noLabel | translate }}\n </ion-button>\n </div>\n }\n\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n\n @if (clearable) {\n <ion-button\n matSuffix\n fill=\"clear\"\n size=\"small\"\n color=\"medium\"\n tabindex=\"-1\"\n (click)=\"clearValue($event)\"\n [class.cdk-visually-hidden]=\"_value | isNil\"\n >\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n }\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n }\n }\n}\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n", styles: [":host{width:100%}.mat-mdc-form-field .mat-form-field-buttons{width:100%;display:flex;flex-flow:row wrap;justify-content:flex-start;align-items:center}.mat-mdc-form-field .mat-form-field-buttons .mat-form-field-button{--button-padding-end: 4px;--flex-basis: calc(100% / var(--buttons-col-count, 2) - var(--button-padding-end, 0px));flex:0 1 var(--flex-basis);max-width:min(var(--flex-basis),150px);white-space:normal;padding:0 2px;height:var(--mat-mdc-form-field-height)}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { 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.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i6.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i6.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i11.IsNilPipe, name: "isNil" }, { kind: "pipe", type: i12.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
288
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MatBooleanField, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
289
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: MatBooleanField, selector: "mat-boolean-field", inputs: { disabled: ["disabled", "disabled", booleanAttribute], formControl: "formControl", formControlName: "formControlName", placeholder: "placeholder", floatLabel: "floatLabel", appearance: "appearance", subscriptSizing: "subscriptSizing", readonly: ["readonly", "readonly", booleanAttribute], required: ["required", "required", booleanAttribute], compact: ["compact", "compact", booleanAttribute], style: "style", buttonsColCount: ["buttonsColCount", "buttonsColCount", numberAttribute], classList: ["class", "classList"], yesLabel: "yesLabel", noLabel: "noLabel", showButtonIcons: ["showButtonIcons", "showButtonIcons", booleanAttribute], yesIcon: "yesIcon", noIcon: "noIcon", clearable: ["clearable", "clearable", booleanAttribute], labelPosition: "labelPosition", tabindex: ["tabindex", "tabindex", numberAttribute], showRadio: ["showRadio", "showRadio", booleanAttribute], value: "value" }, outputs: { keyupEnter: "keyup.enter", blurred: "blur" }, providers: [DEFAULT_VALUE_ACCESSOR], viewQueries: [{ propertyName: "yesRadioButton", first: true, predicate: ["yesRadioButton"], descendants: true }, { propertyName: "noRadioButton", first: true, predicate: ["noRadioButton"], descendants: true }, { propertyName: "checkboxButton", first: true, predicate: ["checkboxButton"], descendants: true }, { propertyName: "yesButton", first: true, predicate: ["yesButton"], descendants: true }, { propertyName: "noButton", first: true, predicate: ["noButton"], descendants: true }, { propertyName: "fakeInput", first: true, predicate: ["fakeInput"], descendants: true }], ngImport: i0, template: "@if (readonly) {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-form-field-disabled {{ classList }}\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>\n {{ (value === null ? 'COMMON.EMPTY_OPTION' : value === true ? yesLabel : noLabel) | translate }}\n </ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n} @else {\n @switch (style) {\n <!-- Radio -->\n @case ('radio') {\n <mat-form-field\n [floatLabel]=\"showRadio && (!floatLabel || floatLabel === 'auto') ? 'always' : (floatLabel | asFloatLabelType)\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-boolean-field mat-boolean-field-radio {{ classList }}\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label [title]=\"placeholder\">\n {{ placeholder }}\n <span [class.cdk-visually-hidden]=\"showRadio\">({{ yesLabel | translate }}/{{ noLabel | translate }})</span>\n </mat-label>\n }\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n #fakeInput\n type=\"text\"\n readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n (keydown.space)=\"toggleValue($event)\"\n (keyup.arrowLeft)=\"toggleValue($event)\"\n (keyup.arrowRight)=\"toggleValue($event)\"\n (keyup.arrowUp)=\"toggleValue($event)\"\n (keyup.arrowDown)=\"toggleValue($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\"\n />\n\n <!-- radio button -->\n <mat-radio-group\n [class.cdk-visually-hidden]=\"!showRadio\"\n [formControl]=\"formControl\"\n (change)=\"onRadioValueChanged($event)\"\n >\n <mat-radio-button #yesRadioButton [value]=\"true\" tabIndex=\"-1\">\n <span>{{ yesLabel | translate }}</span>\n </mat-radio-button>\n \n <mat-radio-button #noRadioButton [value]=\"false\" tabIndex=\"-1\">\n <span>{{ noLabel | translate }}</span>\n </mat-radio-button>\n </mat-radio-group>\n\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearValue($event)\"\n [hidden]=\"_value | isNil\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n }\n\n <!-- Checkbox -->\n @case ('checkbox') {\n <mat-form-field\n floatLabel=\"always\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{ classList }}\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n #fakeInput\n readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n (keydown.space)=\"toggleValue($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\"\n />\n\n <!-- checkbox, when compact -->\n <mat-checkbox\n #checkboxButton\n [formControl]=\"formControl\"\n (change)=\"onCheckboxValueChanged($event)\"\n [indeterminate]=\"value | isNil\"\n [class.cdk-visually-hidden]=\"!showRadio\"\n [labelPosition]=\"labelPosition\"\n [title]=\"placeholder || ''\"\n [tabIndex]=\"-1\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n {{ placeholder || '' }}\n }\n </mat-checkbox>\n\n @if (floatLabel === 'never' || !placeholder) {\n <mat-label> </mat-label>\n }\n\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearValue($event)\"\n [hidden]=\"_value | isNil\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n }\n\n <!-- Buttons -->\n @case ('button') {\n <mat-form-field\n [floatLabel]=\"'always'\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-boolean-field mat-boolean-field-button {{ classList }}\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label [title]=\"placeholder\">{{ placeholder }}</mat-label>\n } @else {\n <mat-label> </mat-label>\n }\n\n <input\n #fakeInput\n matInput\n type=\"text\"\n class=\"cdk-visually-hidden\"\n readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n (keydown.space)=\"toggleValue($event)\"\n (keyup.arrowLeft)=\"toggleValue($event)\"\n (keyup.arrowRight)=\"toggleValue($event)\"\n (keyup.arrowUp)=\"toggleValue($event)\"\n (keyup.arrowDown)=\"toggleValue($event)\"\n [required]=\"required\"\n [tabindex]=\"_tabindex\"\n />\n @if (formControl.disabled) {\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n } @else {\n <div class=\"mat-form-field-buttons\" [style.--buttons-col-count]=\"buttonsColCount\">\n <!-- yes -->\n <ion-button\n #yesButton\n class=\"mat-form-field-button\"\n [tabIndex]=\"-1\"\n (click)=\"writeValue(true, $event)\"\n (keyup.enter)=\"writeValue(true, $event)\"\n [color]=\"_value === null ? 'tertiary' : _value === true ? 'accent' : 'light'\"\n >\n @if (showButtonIcons && yesIcon; as icon) {\n <ion-icon slot=\"start\" [name]=\"icon\"></ion-icon>\n }\n {{ yesLabel | translate }}\n </ion-button>\n\n <!-- No button -->\n <ion-button\n #noButton\n class=\"mat-form-field-button\"\n [tabIndex]=\"-1\"\n (click)=\"writeValue(false, $event)\"\n (keydown.space)=\"toggleValue($event)\"\n (keyup.enter)=\"writeValue(false, $event)\"\n [color]=\"_value === null ? 'tertiary' : _value === false ? 'accent' : 'light'\"\n >\n @if (showButtonIcons && noIcon; as icon) {\n <ion-icon slot=\"start\" [name]=\"icon\"></ion-icon>\n }\n {{ noLabel | translate }}\n </ion-button>\n </div>\n }\n\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n\n @if (clearable) {\n <ion-button\n matSuffix\n fill=\"clear\"\n size=\"small\"\n color=\"medium\"\n tabindex=\"-1\"\n (click)=\"clearValue($event)\"\n [class.cdk-visually-hidden]=\"_value | isNil\"\n >\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n }\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n }\n }\n}\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n", styles: [":host{width:100%}.mat-mdc-form-field .mat-form-field-buttons{width:100%;display:flex;flex-flow:row wrap;justify-content:flex-start;align-items:center}.mat-mdc-form-field .mat-form-field-buttons .mat-form-field-button{--button-padding-end: 4px;--flex-basis: calc(100% / var(--buttons-col-count, 2) - var(--button-padding-end, 0px));flex:0 1 var(--flex-basis);max-width:min(var(--flex-basis),150px);white-space:normal;padding:0 2px;height:var(--mat-mdc-form-field-height)}\n"], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { 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.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i6.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i6.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i11.IsNilPipe, name: "isNil" }, { kind: "pipe", type: i12.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
285
290
|
}
|
|
286
291
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MatBooleanField, decorators: [{
|
|
287
292
|
type: Component,
|
|
288
293
|
args: [{ selector: 'mat-boolean-field', providers: [DEFAULT_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (readonly) {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-form-field-disabled {{ classList }}\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>\n {{ (value === null ? 'COMMON.EMPTY_OPTION' : value === true ? yesLabel : noLabel) | translate }}\n </ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n} @else {\n @switch (style) {\n <!-- Radio -->\n @case ('radio') {\n <mat-form-field\n [floatLabel]=\"showRadio && (!floatLabel || floatLabel === 'auto') ? 'always' : (floatLabel | asFloatLabelType)\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-boolean-field mat-boolean-field-radio {{ classList }}\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label [title]=\"placeholder\">\n {{ placeholder }}\n <span [class.cdk-visually-hidden]=\"showRadio\">({{ yesLabel | translate }}/{{ noLabel | translate }})</span>\n </mat-label>\n }\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n #fakeInput\n type=\"text\"\n readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n (keydown.space)=\"toggleValue($event)\"\n (keyup.arrowLeft)=\"toggleValue($event)\"\n (keyup.arrowRight)=\"toggleValue($event)\"\n (keyup.arrowUp)=\"toggleValue($event)\"\n (keyup.arrowDown)=\"toggleValue($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\"\n />\n\n <!-- radio button -->\n <mat-radio-group\n [class.cdk-visually-hidden]=\"!showRadio\"\n [formControl]=\"formControl\"\n (change)=\"onRadioValueChanged($event)\"\n >\n <mat-radio-button #yesRadioButton [value]=\"true\" tabIndex=\"-1\">\n <span>{{ yesLabel | translate }}</span>\n </mat-radio-button>\n \n <mat-radio-button #noRadioButton [value]=\"false\" tabIndex=\"-1\">\n <span>{{ noLabel | translate }}</span>\n </mat-radio-button>\n </mat-radio-group>\n\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearValue($event)\"\n [hidden]=\"_value | isNil\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n }\n\n <!-- Checkbox -->\n @case ('checkbox') {\n <mat-form-field\n floatLabel=\"always\"\n [appearance]=\"appearance\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{ classList }}\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input\n matInput\n #fakeInput\n readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n (keydown.space)=\"toggleValue($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\"\n />\n\n <!-- checkbox, when compact -->\n <mat-checkbox\n #checkboxButton\n [formControl]=\"formControl\"\n (change)=\"onCheckboxValueChanged($event)\"\n [indeterminate]=\"value | isNil\"\n [class.cdk-visually-hidden]=\"!showRadio\"\n [labelPosition]=\"labelPosition\"\n [title]=\"placeholder || ''\"\n [tabIndex]=\"-1\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n {{ placeholder || '' }}\n }\n </mat-checkbox>\n\n @if (floatLabel === 'never' || !placeholder) {\n <mat-label> </mat-label>\n }\n\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n\n @if (clearable) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearValue($event)\"\n [hidden]=\"_value | isNil\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n }\n\n <!-- Buttons -->\n @case ('button') {\n <mat-form-field\n [floatLabel]=\"'always'\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-boolean-field mat-boolean-field-button {{ classList }}\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label [title]=\"placeholder\">{{ placeholder }}</mat-label>\n } @else {\n <mat-label> </mat-label>\n }\n\n <input\n #fakeInput\n matInput\n type=\"text\"\n class=\"cdk-visually-hidden\"\n readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"onFocusFakeInput($event)\"\n (keydown.space)=\"toggleValue($event)\"\n (keyup.arrowLeft)=\"toggleValue($event)\"\n (keyup.arrowRight)=\"toggleValue($event)\"\n (keyup.arrowUp)=\"toggleValue($event)\"\n (keyup.arrowDown)=\"toggleValue($event)\"\n [required]=\"required\"\n [tabindex]=\"_tabindex\"\n />\n @if (formControl.disabled) {\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n } @else {\n <div class=\"mat-form-field-buttons\" [style.--buttons-col-count]=\"buttonsColCount\">\n <!-- yes -->\n <ion-button\n #yesButton\n class=\"mat-form-field-button\"\n [tabIndex]=\"-1\"\n (click)=\"writeValue(true, $event)\"\n (keyup.enter)=\"writeValue(true, $event)\"\n [color]=\"_value === null ? 'tertiary' : _value === true ? 'accent' : 'light'\"\n >\n @if (showButtonIcons && yesIcon; as icon) {\n <ion-icon slot=\"start\" [name]=\"icon\"></ion-icon>\n }\n {{ yesLabel | translate }}\n </ion-button>\n\n <!-- No button -->\n <ion-button\n #noButton\n class=\"mat-form-field-button\"\n [tabIndex]=\"-1\"\n (click)=\"writeValue(false, $event)\"\n (keydown.space)=\"toggleValue($event)\"\n (keyup.enter)=\"writeValue(false, $event)\"\n [color]=\"_value === null ? 'tertiary' : _value === false ? 'accent' : 'light'\"\n >\n @if (showButtonIcons && noIcon; as icon) {\n <ion-icon slot=\"start\" [name]=\"icon\"></ion-icon>\n }\n {{ noLabel | translate }}\n </ion-button>\n </div>\n }\n\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n\n @if (clearable) {\n <ion-button\n matSuffix\n fill=\"clear\"\n size=\"small\"\n color=\"medium\"\n tabindex=\"-1\"\n (click)=\"clearValue($event)\"\n [class.cdk-visually-hidden]=\"_value | isNil\"\n >\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n }\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n }\n }\n}\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n", styles: [":host{width:100%}.mat-mdc-form-field .mat-form-field-buttons{width:100%;display:flex;flex-flow:row wrap;justify-content:flex-start;align-items:center}.mat-mdc-form-field .mat-form-field-buttons .mat-form-field-button{--button-padding-end: 4px;--flex-basis: calc(100% / var(--buttons-col-count, 2) - var(--button-padding-end, 0px));flex:0 1 var(--flex-basis);max-width:min(var(--flex-basis),150px);white-space:normal;padding:0 2px;height:var(--mat-mdc-form-field-height)}\n"] }]
|
|
289
|
-
}], ctorParameters: () => [
|
|
294
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.FormGroupDirective, decorators: [{
|
|
295
|
+
type: Optional
|
|
296
|
+
}] }], propDecorators: { yesRadioButton: [{
|
|
290
297
|
type: ViewChild,
|
|
291
298
|
args: ['yesRadioButton']
|
|
292
299
|
}], noRadioButton: [{
|
|
@@ -367,4 +374,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
367
374
|
type: Output,
|
|
368
375
|
args: ['blur']
|
|
369
376
|
}] } });
|
|
370
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuYm9vbGVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2Jvb2xlYW4vbWF0ZXJpYWwuYm9vbGVhbi50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2Jvb2xlYW4vbWF0ZXJpYWwuYm9vbGVhbi5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFHZixNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBd0Isa0JBQWtCLEVBQUUsaUJBQWlCLEVBQXNCLE1BQU0sZ0JBQWdCLENBQUM7QUFJakgsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRS9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBRXBDLE1BQU0sc0JBQXNCLEdBQWE7SUFDdkMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztJQUM5QyxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7QUFTdEIsTUFBTSxPQUFPLGVBQWU7SUFDbEIsaUJBQWlCLEdBQXFCLElBQUksQ0FBQztJQUMzQyxrQkFBa0IsR0FBZSxJQUFJLENBQUM7SUFDN0IsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7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UyxFQUFFLGdCQUFnQixFQUFFO2dCQW9CbEMsS0FBSztzQkFEUixLQUFLO2dCQWFpQixVQUFVO3NCQUFoQyxNQUFNO3VCQUFDLGFBQWE7Z0JBRUwsT0FBTztzQkFBdEIsTUFBTTt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBQcm92aWRlcixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UsIFN1YnNjcmlwdFNpemluZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFJhZGlvQnV0dG9uLCBNYXRSYWRpb0NoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3JhZGlvJztcbmltcG9ydCB7IE1hdENoZWNrYm94LCBNYXRDaGVja2JveENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IElucHV0RWxlbWVudCB9IGZyb20gJy4uLy4uL2lucHV0cyc7XG5pbXBvcnQgeyBpc05pbCwgaXNOb3ROaWwsIHRvTnVtYmVyIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IEFwcEZsb2F0TGFiZWxUeXBlIH0gZnJvbSAnLi4vLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSAnQHJ4LWFuZ3VsYXIvY2RrL3pvbmUtbGVzcy9icm93c2VyJztcbmltcG9ydCB7IElvbkJ1dHRvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5jb25zdCBERUZBVUxUX1ZBTFVFX0FDQ0VTU09SOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdEJvb2xlYW5GaWVsZCksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtYm9vbGVhbi1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5ib29sZWFuLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC5ib29sZWFuLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbREVGQVVMVF9WQUxVRV9BQ0NFU1NPUl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRCb29sZWFuRmllbGQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBJbnB1dEVsZW1lbnQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfd3JpdGluZyA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBfdmFsdWU6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBfdGFiaW5kZXg6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9zaG93UmFkaW8gPSBmYWxzZTsgLy8gV2lsbCBiZSBjaGFuZ2VkIHdoZW4gZm9jdXMgaW5cbiAgcHJvdGVjdGVkIF9mb2N1c2VkID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgneWVzUmFkaW9CdXR0b24nKSB5ZXNSYWRpb0J1dHRvbjogTWF0UmFkaW9CdXR0b247XG4gIEBWaWV3Q2hpbGQoJ25vUmFkaW9CdXR0b24nKSBub1JhZGlvQnV0dG9uOiBNYXRSYWRpb0J1dHRvbjtcbiAgQFZpZXdDaGlsZCgnY2hlY2tib3hCdXR0b24nKSBjaGVja2JveEJ1dHRvbjogTWF0Q2hlY2tib3g7XG4gIEBWaWV3Q2hpbGQoJ3llc0J1dHRvbicpIHllc0J1dHRvbjogSW9uQnV0dG9uO1xuICBAVmlld0NoaWxkKCdub0J1dHRvbicpIG5vQnV0dG9uOiBJb25CdXR0b247XG4gIEBWaWV3Q2hpbGQoJ2Zha2VJbnB1dCcpIGZha2VJbnB1dDogRWxlbWVudFJlZjtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEFwcEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xuICBASW5wdXQoKSBhcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlO1xuICBASW5wdXQoKSBzdWJzY3JpcHRTaXppbmc6IFN1YnNjcmlwdFNpemluZztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY29tcGFjdCA9IGZhbHNlO1xuICBASW5wdXQoKSBzdHlsZTogJ3JhZGlvJyB8ICdjaGVja2JveCcgfCAnYnV0dG9uJztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgYnV0dG9uc0NvbENvdW50OiBudW1iZXI7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnY2xhc3MnKSBjbGFzc0xpc3Q6IHN0cmluZztcbiAgQElucHV0KCkgeWVzTGFiZWwgPSAnQ09NTU9OLllFUyc7XG4gIEBJbnB1dCgpIG5vTGFiZWwgPSAnQ09NTU9OLk5PJztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dCdXR0b25JY29ucyA9IHRydWU7XG4gIEBJbnB1dCgpIHllc0ljb24gPSAnY2hlY2ttYXJrJztcbiAgQElucHV0KCkgbm9JY29uID0gJ2Nsb3NlJztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsZWFyYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBsYWJlbFBvc2l0aW9uOiAnYWZ0ZXInIHwgJ2JlZm9yZScgPSAnYWZ0ZXInO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHNldCB0YWJpbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuX3RhYmluZGV4ICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdGFiaW5kZXggPSB2YWx1ZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVUYWJJbmRleCgpKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdGFiaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiaW5kZXg7XG4gIH1cblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IHNob3dSYWRpbyh2OiBhbnkpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5fc2hvd1JhZGlvKSB7XG4gICAgICB0aGlzLl9zaG93UmFkaW8gPSB2O1xuICAgICAgdGhpcy51cGRhdGVGYWtlSW5wdXQoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd1JhZGlvKCk6IGFueSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX3Nob3dSYWRpbyB8fFxuICAgICAgdGhpcy5fZm9jdXNlZCB8fFxuICAgICAgdGhpcy5mbG9hdExhYmVsID09PSAnYWx3YXlzJyB8fFxuICAgICAgdGhpcy5mbG9hdExhYmVsID09PSAnbmV2ZXInIHx8XG4gICAgICB0aGlzLnN0eWxlID09PSAnY2hlY2tib3gnIHx8XG4gICAgICBpc05vdE5pbCh0aGlzLl92YWx1ZSlcbiAgICApO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgIGlmICh2ICE9PSB0aGlzLl92YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh2KTtcbiAgICB9XG4gIH1cblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXgsQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1yZW5hbWVcbiAgQE91dHB1dCgna2V5dXAuZW50ZXInKSBrZXl1cEVudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeCxAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCdibHVyJykgYmx1cnJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2QgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZvcm1Hcm91cERpciA9IGluamVjdChGb3JtR3JvdXBEaXJlY3RpdmUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPVxuICAgICAgdGhpcy5mb3JtQ29udHJvbCB8fCAodGhpcy5mb3JtQ29udHJvbE5hbWUgJiYgdGhpcy5mb3JtR3JvdXBEaXIgJiYgKHRoaXMuZm9ybUdyb3VwRGlyLmZvcm0uZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2wpKTtcbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgbWFuZGF0b3J5IGF0dHJpYnV0ZSAnZm9ybUNvbnRyb2wnIG9yICdmb3JtQ29udHJvbE5hbWUnIGluIDxtYXQtYm9vbGVhbi1maWVsZD4uXCIpO1xuXG4gICAgdGhpcy5zdHlsZSA9IHRoaXMuc3R5bGUgfHwgKHRoaXMuY29tcGFjdCA/ICdjaGVja2JveCcgOiAncmFkaW8nKTtcblxuICAgIGlmICh0aGlzLnN0eWxlID09PSAnYnV0dG9uJykge1xuICAgICAgdGhpcy5idXR0b25zQ29sQ291bnQgPSB0b051bWJlcih0aGlzLmJ1dHRvbnNDb2xDb3VudCwgMik7XG4gICAgfVxuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLndyaXRlVmFsdWUodmFsdWUpKSk7XG5cbiAgICB0aGlzLnVwZGF0ZUZha2VJbnB1dCgpO1xuICAgIHRoaXMudXBkYXRlVGFiSW5kZXgoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuYmx1cnJlZC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55LCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjtcblxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSkge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnllc1JhZGlvQnV0dG9uKSB7XG4gICAgICAgIHRoaXMueWVzUmFkaW9CdXR0b24uY2hlY2tlZCA9IHZhbHVlID09PSB0cnVlO1xuICAgICAgICB0aGlzLm5vUmFkaW9CdXR0b24uY2hlY2tlZCA9IHZhbHVlID09PSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja2JveEJ1dHRvbikge1xuICAgICAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5jaGVja2JveEJ1dHRvbi5pbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoZWNrYm94QnV0dG9uLmNoZWNrZWQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVGYWtlSW5wdXQoKTtcbiAgICAgICAgdGhpcy51cGRhdGVUYWJJbmRleCgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnN0eWxlID09PSAnYnV0dG9uJykge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCkgdGhpcy5rZXl1cEVudGVyLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRm9jdXNGYWtlSW5wdXQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuc2hvd1JhZGlvKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAvLyBIaWRlIHRoZSBmYWtlIGlucHV0XG4gICAgICB0aGlzLmZha2VJbnB1dD8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdjZGstdmlzdWFsbHktaGlkZGVuJyk7XG4gICAgfVxuXG4gICAgLy8gRm9jdXMgb24gZmlyc3QgYnV0dG9uXG4gICAgdGhpcy5mb2N1cygpO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgaWYgKHRoaXMuX2ZvY3VzZWQpIHJldHVybjsgLy8gQWxyZWFkeSBmb2N1c2VkXG5cbiAgICB0aGlzLl9mb2N1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIEFkZCBhIGJsdXIgbGlzdGVuZXIgb24gZWFjaCBpbnB1dHNcbiAgICAgIGNvbnN0IGlucHV0RWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSB0aGlzLmlucHV0c0VsZW1lbnRzO1xuICAgICAgaW5wdXRFbGVtZW50cy5mb3JFYWNoKFxuICAgICAgICAoZWwpID0+XG4gICAgICAgICAgKGVsLm9uYmx1ciA9ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFNldHVwIGEgb25lLXRpbWUgZm9jdXMgZXZlbnQgaGFuZGxlclxuICAgICAgICAgICAgY29uc3QgZm9jdXNMaXN0ZW5lciA9IChmb2N1c0V2ZW50OiBGb2N1c0V2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXIgYWZ0ZXIgaXQgaGFzIGJlZW4gZXhlY3V0ZWQgb25jZVxuICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBmb2N1c0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICBpZiAoIWlucHV0RWxlbWVudHMuaW5jbHVkZXMoZm9jdXNFdmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRmFrZUlucHV0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUYWJJbmRleCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmx1cnJlZC5lbWl0KGZvY3VzRXZlbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgZm9jdXNMaXN0ZW5lciwgdHJ1ZSk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIHRoaXMudXBkYXRlRmFrZUlucHV0KCk7XG4gICAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25SYWRpb1ZhbHVlQ2hhbmdlZChldmVudDogTWF0UmFkaW9DaGFuZ2UpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuOyAvLyBTa2lwIGlmIGNhbGwgYnkgc2VsZlxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuICAgIHRoaXMuX3ZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgdGhpcy5jaGVja0lmVG91Y2hlZCgpO1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soZXZlbnQudmFsdWUpO1xuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNoZWNrYm94VmFsdWVDaGFuZ2VkKGV2ZW50OiBNYXRDaGVja2JveENoYW5nZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47IC8vIFNraXAgaWYgY2FsbCBieSBzZWxmXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgdGhpcy5fdmFsdWUgPSBldmVudC5jaGVja2VkO1xuICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGV2ZW50LmNoZWNrZWQpO1xuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZm9jdXMoKTtcbiAgfVxuXG4gIHRvZ2dsZVZhbHVlKGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47IC8vIFNraXAgaWYgY2FsbCBieSBzZWxmXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgdGhpcy5fdmFsdWUgPSAhdGhpcy5fdmFsdWU7XG4gICAgaWYgKHRoaXMueWVzUmFkaW9CdXR0b24pIHtcbiAgICAgIHRoaXMueWVzUmFkaW9CdXR0b24uY2hlY2tlZCA9IHRoaXMuX3ZhbHVlO1xuICAgICAgdGhpcy5ub1JhZGlvQnV0dG9uLmNoZWNrZWQgPSAhdGhpcy5fdmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNoZWNrYm94QnV0dG9uKSB7XG4gICAgICB0aGlzLmNoZWNrYm94QnV0dG9uLmNoZWNrZWQgPSB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5jaGVja0lmVG91Y2hlZCgpO1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5fdmFsdWUpO1xuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBjaGVja0lmVG91Y2hlZCgpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC50b3VjaGVkKSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdy9IaWRlIHRoZSBmYWtlIGlucHV0XG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUZha2VJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5zaG93UmFkaW8gfHwgdGhpcy5zdHlsZSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgIHRoaXMuZmFrZUlucHV0Py5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Nkay12aXN1YWxseS1oaWRkZW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mYWtlSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnY2RrLXZpc3VhbGx5LWhpZGRlbicpO1xuICAgIH1cblxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSwgdGhpcyBjb21wb25lbnQgaGFzIGEgdGVtcG9yYXJ5IGNvbXBvbmVudCBkaXNwbGF5ZWQgYmVmb3JlIHRoZSBmaXJzdCBmb2N1cyBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUYWJJbmRleCgpIHtcbiAgICBpZiAoaXNOaWwodGhpcy5fdGFiaW5kZXgpKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5mYWtlSW5wdXQpIHtcbiAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSB0aGlzLl90YWJpbmRleDtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNsZWFyVmFsdWUoZXZlbnQ/OiBFdmVudCkge1xuICAgIHRoaXMud3JpdGVWYWx1ZShudWxsKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHJhZGlvQnV0dG9uRWxlbWVudHMoKTogSFRNTEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMueWVzUmFkaW9CdXR0b24gPyBbdGhpcy55ZXNSYWRpb0J1dHRvbiwgdGhpcy5ub1JhZGlvQnV0dG9uXS5tYXAoKGIpID0+IGIuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50KSA6IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpbnB1dHNFbGVtZW50cygpOiBIVE1MRWxlbWVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5yYWRpb0J1dHRvbkVsZW1lbnRzXG4gICAgICAuY29uY2F0KHRoaXMuY2hlY2tib3hCdXR0b24gPyBbdGhpcy5jaGVja2JveEJ1dHRvbi5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnRdIDogW10pXG4gICAgICAuY29uY2F0KHRoaXMuZmFrZUlucHV0ID8gW3RoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnRdIDogW10pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpb25CdXR0b25zKCk6IElvbkJ1dHRvbltdIHtcbiAgICByZXR1cm4gW3RoaXMueWVzQnV0dG9uLCB0aGlzLm5vQnV0dG9uXTtcbiAgfVxufVxuIiwiQGlmIChyZWFkb25seSkge1xuICA8bWF0LWZvcm0tZmllbGRcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIlxuICAgIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtZGlzYWJsZWQge3sgY2xhc3NMaXN0IH19XCJcbiAgPlxuICAgIEBpZiAoZmxvYXRMYWJlbCAhPT0gJ25ldmVyJyAmJiAhIXBsYWNlaG9sZGVyKSB7XG4gICAgICA8bWF0LWxhYmVsPnt7IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG4gICAgfVxuICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGlucHV0IG1hdElucHV0IGhpZGRlbiB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIC8+XG4gICAgPGlvbi10ZXh0PlxuICAgICAge3sgKHZhbHVlID09PSBudWxsID8gJ0NPTU1PTi5FTVBUWV9PUFRJT04nIDogdmFsdWUgPT09IHRydWUgPyB5ZXNMYWJlbCA6IG5vTGFiZWwpIHwgdHJhbnNsYXRlIH19XG4gICAgPC9pb24tdGV4dD5cbiAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L21hdC1mb3JtLWZpZWxkPlxufSBAZWxzZSB7XG4gIEBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgPCEtLSBSYWRpbyAtLT5cbiAgICBAY2FzZSAoJ3JhZGlvJykge1xuICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgIFtmbG9hdExhYmVsXT1cInNob3dSYWRpbyAmJiAoIWZsb2F0TGFiZWwgfHwgZmxvYXRMYWJlbCA9PT0gJ2F1dG8nKSA/ICdhbHdheXMnIDogKGZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlKVwiXG4gICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZ1wiXG4gICAgICAgIGNsYXNzPVwibWF0LWJvb2xlYW4tZmllbGQgbWF0LWJvb2xlYW4tZmllbGQtcmFkaW8ge3sgY2xhc3NMaXN0IH19XCJcbiAgICAgID5cbiAgICAgICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICA8bWF0LWxhYmVsIFt0aXRsZV09XCJwbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAge3sgcGxhY2Vob2xkZXIgfX1cbiAgICAgICAgICAgIDxzcGFuIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cInNob3dSYWRpb1wiPih7eyB5ZXNMYWJlbCB8IHRyYW5zbGF0ZSB9fS97eyBub0xhYmVsIHwgdHJhbnNsYXRlIH19KTwvc3Bhbj5cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0UHJlZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgI2Zha2VJbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICByZWFkb25seT1cInRydWVcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXNGYWtlSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwidG9nZ2xlVmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleXVwLmFycm93TGVmdCk9XCJ0b2dnbGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuYXJyb3dSaWdodCk9XCJ0b2dnbGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuYXJyb3dVcCk9XCJ0b2dnbGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuYXJyb3dEb3duKT1cInRvZ2dsZVZhbHVlKCRldmVudClcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwic2hvd1JhZGlvXCJcbiAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDwhLS0gcmFkaW8gYnV0dG9uIC0tPlxuICAgICAgICA8bWF0LXJhZGlvLWdyb3VwXG4gICAgICAgICAgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIXNob3dSYWRpb1wiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uUmFkaW9WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAjeWVzUmFkaW9CdXR0b24gW3ZhbHVlXT1cInRydWVcIiB0YWJJbmRleD1cIi0xXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyB5ZXNMYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gI25vUmFkaW9CdXR0b24gW3ZhbHVlXT1cImZhbHNlXCIgdGFiSW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgbm9MYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuXG4gICAgICAgIEBpZiAoZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChjbGVhcmFibGUpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGVhclZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgW2hpZGRlbl09XCJfdmFsdWUgfCBpc05pbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgfVxuXG4gICAgPCEtLSBDaGVja2JveCAtLT5cbiAgICBAY2FzZSAoJ2NoZWNrYm94Jykge1xuICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgIGZsb2F0TGFiZWw9XCJhbHdheXNcIlxuICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgY2xhc3M9XCJtYXQtYm9vbGVhbi1maWVsZCBtYXQtYm9vbGVhbi1maWVsZC1jaGVja2JveCB7eyBjbGFzc0xpc3QgfX1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0UHJlZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgI2Zha2VJbnB1dFxuICAgICAgICAgIHJlYWRvbmx5PVwidHJ1ZVwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1c0Zha2VJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJ0b2dnbGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cInNob3dSYWRpb1wiXG4gICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgLz5cblxuICAgICAgICA8IS0tIGNoZWNrYm94LCB3aGVuIGNvbXBhY3QgLS0+XG4gICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAjY2hlY2tib3hCdXR0b25cbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJ2YWx1ZSB8IGlzTmlsXCJcbiAgICAgICAgICBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCIhc2hvd1JhZGlvXCJcbiAgICAgICAgICBbbGFiZWxQb3NpdGlvbl09XCJsYWJlbFBvc2l0aW9uXCJcbiAgICAgICAgICBbdGl0bGVdPVwicGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgIFt0YWJJbmRleF09XCItMVwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKGZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlcikge1xuICAgICAgICAgICAge3sgcGxhY2Vob2xkZXIgfHwgJycgfX1cbiAgICAgICAgICB9XG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxuXG4gICAgICAgIEBpZiAoZmxvYXRMYWJlbCA9PT0gJ25ldmVyJyB8fCAhcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICA8bWF0LWxhYmVsPiZuYnNwOzwvbWF0LWxhYmVsPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgICAgIDxtYXQtZXJyb3IgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGNsZWFyYWJsZSkge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyVmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbaGlkZGVuXT1cIl92YWx1ZSB8IGlzTmlsXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICB9XG5cbiAgICA8IS0tIEJ1dHRvbnMgLS0+XG4gICAgQGNhc2UgKCdidXR0b24nKSB7XG4gICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgW2Zsb2F0TGFiZWxdPVwiJ2Fsd2F5cydcIlxuICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIlxuICAgICAgICBjbGFzcz1cIm1hdC1ib29sZWFuLWZpZWxkIG1hdC1ib29sZWFuLWZpZWxkLWJ1dHRvbiB7eyBjbGFzc0xpc3QgfX1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0UHJlZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICA8bWF0LWxhYmVsIFt0aXRsZV09XCJwbGFjZWhvbGRlclwiPnt7IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgIH1cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAjZmFrZUlucHV0XG4gICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCJcbiAgICAgICAgICByZWFkb25seT1cInRydWVcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXNGYWtlSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwidG9nZ2xlVmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleXVwLmFycm93TGVmdCk9XCJ0b2dnbGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuYXJyb3dSaWdodCk9XCJ0b2dnbGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuYXJyb3dVcCk9XCJ0b2dnbGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuYXJyb3dEb3duKT1cInRvZ2dsZVZhbHVlKCRldmVudClcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgW3RhYmluZGV4XT1cIl90YWJpbmRleFwiXG4gICAgICAgIC8+XG4gICAgICAgIEBpZiAoZm9ybUNvbnRyb2wuZGlzYWJsZWQpIHtcbiAgICAgICAgICA8aW9uLWxhYmVsPjxpIHRyYW5zbGF0ZT5DT01NT04uRU1QVFlfT1BUSU9OPC9pPjwvaW9uLWxhYmVsPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWZvcm0tZmllbGQtYnV0dG9uc1wiIFtzdHlsZS4tLWJ1dHRvbnMtY29sLWNvdW50XT1cImJ1dHRvbnNDb2xDb3VudFwiPlxuICAgICAgICAgICAgPCEtLSB5ZXMgLS0+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICAjeWVzQnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIndyaXRlVmFsdWUodHJ1ZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJ3cml0ZVZhbHVlKHRydWUsICRldmVudClcIlxuICAgICAgICAgICAgICBbY29sb3JdPVwiX3ZhbHVlID09PSBudWxsID8gJ3RlcnRpYXJ5JyA6IF92YWx1ZSA9PT0gdHJ1ZSA/ICdhY2NlbnQnIDogJ2xpZ2h0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAoc2hvd0J1dHRvbkljb25zICYmIHllc0ljb247IGFzIGljb24pIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgW25hbWVdPVwiaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAge3sgeWVzTGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgICAgICAgPCEtLSBObyBidXR0b24gLS0+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICAjbm9CdXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1idXR0b25cIlxuICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwid3JpdGVWYWx1ZShmYWxzZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInRvZ2dsZVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwid3JpdGVWYWx1ZShmYWxzZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtjb2xvcl09XCJfdmFsdWUgPT09IG51bGwgPyAndGVydGlhcnknIDogX3ZhbHVlID09PSBmYWxzZSA/ICdhY2NlbnQnIDogJ2xpZ2h0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAoc2hvd0J1dHRvbkljb25zICYmIG5vSWNvbjsgYXMgaWNvbikge1xuICAgICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBbbmFtZV09XCJpY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB7eyBub0xhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGZvcm1Db250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoY2xlYXJhYmxlKSB7XG4gICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgZmlsbD1cImNsZWFyXCJcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBjb2xvcj1cIm1lZGl1bVwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGVhclZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiX3ZhbHVlIHwgaXNOaWxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNsb3NlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIH1cblxuICAgICAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0U3VmZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIH1cbiAgfVxufVxuXG48bmctdGVtcGxhdGUgI21hdFByZWZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0UHJlZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI21hdFN1ZmZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0U3VmZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
377
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuYm9vbGVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2Jvb2xlYW4vbWF0ZXJpYWwuYm9vbGVhbi50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2Jvb2xlYW4vbWF0ZXJpYWwuYm9vbGVhbi5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxlQUFlLEVBR2YsUUFBUSxFQUNSLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUE0QyxpQkFBaUIsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUlqSCxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFFcEMsTUFBTSxzQkFBc0IsR0FBYTtJQUN2QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDO0lBQzlDLEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztBQVN0QixNQUFNLE9BQU8sZUFBZTtJQXVGaEI7SUFDRTtJQUNVO0lBeEZkLGlCQUFpQixHQUFxQixJQUFJLENBQUM7SUFDM0Msa0JBQWtCLEdBQWUsSUFBSSxDQUFDO0lBQzdCLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzVDLFFB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QUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBb0JsQyxLQUFLO3NCQURSLEtBQUs7Z0JBWWlCLFVBQVU7c0JBQWhDLE1BQU07dUJBQUMsYUFBYTtnQkFFTCxPQUFPO3NCQUF0QixNQUFNO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUHJvdmlkZXIsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlLCBTdWJzY3JpcHRTaXppbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRSYWRpb0J1dHRvbiwgTWF0UmFkaW9DaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9yYWRpbyc7XG5pbXBvcnQgeyBNYXRDaGVja2JveCwgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBJbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9pbnB1dHMnO1xuaW1wb3J0IHsgaXNOaWwsIGlzTm90TmlsLCB0b051bWJlciB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBBcHBGbG9hdExhYmVsVHlwZSB9IGZyb20gJy4uLy4uL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgc2V0VGltZW91dCB9IGZyb20gJ0ByeC1hbmd1bGFyL2Nkay96b25lLWxlc3MvYnJvd3Nlcic7XG5pbXBvcnQgeyBJb25CdXR0b24gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuY29uc3QgREVGQVVMVF9WQUxVRV9BQ0NFU1NPUjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXRCb29sZWFuRmllbGQpLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LWJvb2xlYW4tZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwuYm9vbGVhbi5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuYm9vbGVhbi5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0RFRkFVTFRfVkFMVUVfQUNDRVNTT1JdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWF0Qm9vbGVhbkZpZWxkIGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgSW5wdXRFbGVtZW50LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX3dyaXRpbmcgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgX3ZhbHVlOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgX3RhYmluZGV4OiBudW1iZXI7XG4gIHByb3RlY3RlZCBfc2hvd1JhZGlvID0gZmFsc2U7IC8vIFdpbGwgYmUgY2hhbmdlZCB3aGVuIGZvY3VzIGluXG4gIHByb3RlY3RlZCBfZm9jdXNlZCA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ3llc1JhZGlvQnV0dG9uJykgeWVzUmFkaW9CdXR0b246IE1hdFJhZGlvQnV0dG9uO1xuICBAVmlld0NoaWxkKCdub1JhZGlvQnV0dG9uJykgbm9SYWRpb0J1dHRvbjogTWF0UmFkaW9CdXR0b247XG4gIEBWaWV3Q2hpbGQoJ2NoZWNrYm94QnV0dG9uJykgY2hlY2tib3hCdXR0b246IE1hdENoZWNrYm94O1xuICBAVmlld0NoaWxkKCd5ZXNCdXR0b24nKSB5ZXNCdXR0b246IElvbkJ1dHRvbjtcbiAgQFZpZXdDaGlsZCgnbm9CdXR0b24nKSBub0J1dHRvbjogSW9uQnV0dG9uO1xuICBAVmlld0NoaWxkKCdmYWtlSW5wdXQnKSBmYWtlSW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBBcHBGbG9hdExhYmVsVHlwZSA9ICdhdXRvJztcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgQElucHV0KCkgc3Vic2NyaXB0U2l6aW5nOiBTdWJzY3JpcHRTaXppbmc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcmVxdWlyZWQgPSBmYWxzZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNvbXBhY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgc3R5bGU6ICdyYWRpbycgfCAnY2hlY2tib3gnIHwgJ2J1dHRvbic7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGJ1dHRvbnNDb2xDb3VudDogbnVtYmVyO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ2NsYXNzJykgY2xhc3NMaXN0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHllc0xhYmVsID0gJ0NPTU1PTi5ZRVMnO1xuICBASW5wdXQoKSBub0xhYmVsID0gJ0NPTU1PTi5OTyc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93QnV0dG9uSWNvbnMgPSB0cnVlO1xuICBASW5wdXQoKSB5ZXNJY29uID0gJ2NoZWNrbWFyayc7XG4gIEBJbnB1dCgpIG5vSWNvbiA9ICdjbG9zZSc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgbGFiZWxQb3NpdGlvbjogJ2FmdGVyJyB8ICdiZWZvcmUnID0gJ2FmdGVyJztcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBzZXQgdGFiaW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl90YWJpbmRleCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3RhYmluZGV4ID0gdmFsdWU7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlVGFiSW5kZXgoKSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRhYmluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmluZGV4O1xuICB9XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCBzaG93UmFkaW8odjogYW55KSB7XG4gICAgaWYgKHYgIT09IHRoaXMuX3Nob3dSYWRpbykge1xuICAgICAgdGhpcy5fc2hvd1JhZGlvID0gdjtcbiAgICAgIHRoaXMudXBkYXRlRmFrZUlucHV0KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNob3dSYWRpbygpOiBhbnkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9zaG93UmFkaW8gfHxcbiAgICAgIHRoaXMuX2ZvY3VzZWQgfHxcbiAgICAgIHRoaXMuZmxvYXRMYWJlbCA9PT0gJ2Fsd2F5cycgfHxcbiAgICAgIHRoaXMuZmxvYXRMYWJlbCA9PT0gJ25ldmVyJyB8fFxuICAgICAgdGhpcy5zdHlsZSA9PT0gJ2NoZWNrYm94JyB8fFxuICAgICAgaXNOb3ROaWwodGhpcy5fdmFsdWUpXG4gICAgKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2OiBhbnkpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodik7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeCxAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LXJlbmFtZVxuICBAT3V0cHV0KCdrZXl1cC5lbnRlcicpIGtleXVwRW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gIEBPdXRwdXQoJ2JsdXInKSBibHVycmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBlbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9XG4gICAgICB0aGlzLmZvcm1Db250cm9sIHx8ICh0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLmZvcm1Hcm91cERpciAmJiAodGhpcy5mb3JtR3JvdXBEaXIuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIFVudHlwZWRGb3JtQ29udHJvbCkpO1xuICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBtYW5kYXRvcnkgYXR0cmlidXRlICdmb3JtQ29udHJvbCcgb3IgJ2Zvcm1Db250cm9sTmFtZScgaW4gPG1hdC1ib29sZWFuLWZpZWxkPi5cIik7XG5cbiAgICB0aGlzLnN0eWxlID0gdGhpcy5zdHlsZSB8fCAodGhpcy5jb21wYWN0ID8gJ2NoZWNrYm94JyA6ICdyYWRpbycpO1xuXG4gICAgaWYgKHRoaXMuc3R5bGUgPT09ICdidXR0b24nKSB7XG4gICAgICB0aGlzLmJ1dHRvbnNDb2xDb3VudCA9IHRvTnVtYmVyKHRoaXMuYnV0dG9uc0NvbENvdW50LCAyKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSkpKTtcblxuICAgIHRoaXMudXBkYXRlRmFrZUlucHV0KCk7XG4gICAgdGhpcy51cGRhdGVUYWJJbmRleCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5ibHVycmVkLmNvbXBsZXRlKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnksIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuO1xuXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl92YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMueWVzUmFkaW9CdXR0b24pIHtcbiAgICAgICAgdGhpcy55ZXNSYWRpb0J1dHRvbi5jaGVja2VkID0gdmFsdWUgPT09IHRydWU7XG4gICAgICAgIHRoaXMubm9SYWRpb0J1dHRvbi5jaGVja2VkID0gdmFsdWUgPT09IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoZWNrYm94QnV0dG9uKSB7XG4gICAgICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrYm94QnV0dG9uLmluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hlY2tib3hCdXR0b24uY2hlY2tlZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUZha2VJbnB1dCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuc3R5bGUgPT09ICdidXR0b24nKSB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50KSB0aGlzLmtleXVwRW50ZXIuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Gb2N1c0Zha2VJbnB1dChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICghdGhpcy5zaG93UmFkaW8pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIC8vIEhpZGUgdGhlIGZha2UgaW5wdXRcbiAgICAgIHRoaXMuZmFrZUlucHV0Py5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Nkay12aXN1YWxseS1oaWRkZW4nKTtcbiAgICB9XG5cbiAgICAvLyBGb2N1cyBvbiBmaXJzdCBidXR0b25cbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICBpZiAodGhpcy5fZm9jdXNlZCkgcmV0dXJuOyAvLyBBbHJlYWR5IGZvY3VzZWRcblxuICAgIHRoaXMuX2ZvY3VzZWQgPSB0cnVlO1xuICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gQWRkIGEgYmx1ciBsaXN0ZW5lciBvbiBlYWNoIGlucHV0c1xuICAgICAgY29uc3QgaW5wdXRFbGVtZW50czogSFRNTEVsZW1lbnRbXSA9IHRoaXMuaW5wdXRzRWxlbWVudHM7XG4gICAgICBpbnB1dEVsZW1lbnRzLmZvckVhY2goXG4gICAgICAgIChlbCkgPT5cbiAgICAgICAgICAoZWwub25ibHVyID0gKGUpID0+IHtcbiAgICAgICAgICAgIC8vIFNldHVwIGEgb25lLXRpbWUgZm9jdXMgZXZlbnQgaGFuZGxlclxuICAgICAgICAgICAgY29uc3QgZm9jdXNMaXN0ZW5lciA9IChmb2N1c0V2ZW50OiBGb2N1c0V2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXIgYWZ0ZXIgaXQgaGFzIGJlZW4gZXhlY3V0ZWQgb25jZVxuICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBmb2N1c0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICBpZiAoIWlucHV0RWxlbWVudHMuaW5jbHVkZXMoZm9jdXNFdmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRmFrZUlucHV0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUYWJJbmRleCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmx1cnJlZC5lbWl0KGZvY3VzRXZlbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgZm9jdXNMaXN0ZW5lciwgdHJ1ZSk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIHRoaXMudXBkYXRlRmFrZUlucHV0KCk7XG4gICAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25SYWRpb1ZhbHVlQ2hhbmdlZChldmVudDogTWF0UmFkaW9DaGFuZ2UpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuOyAvLyBTa2lwIGlmIGNhbGwgYnkgc2VsZlxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuICAgIHRoaXMuX3ZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgdGhpcy5jaGVja0lmVG91Y2hlZCgpO1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soZXZlbnQudmFsdWUpO1xuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNoZWNrYm94VmFsdWVDaGFuZ2VkKGV2ZW50OiBNYXRDaGVja2JveENoYW5nZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47IC8vIFNraXAgaWYgY2FsbCBieSBzZWxmXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgdGhpcy5fdmFsdWUgPSBldmVudC5jaGVja2VkO1xuICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGV2ZW50LmNoZWNrZWQpO1xuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuZm9jdXMoKTtcbiAgfVxuXG4gIHRvZ2dsZVZhbHVlKGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47IC8vIFNraXAgaWYgY2FsbCBieSBzZWxmXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgdGhpcy5fdmFsdWUgPSAhdGhpcy5fdmFsdWU7XG4gICAgaWYgKHRoaXMueWVzUmFkaW9CdXR0b24pIHtcbiAgICAgIHRoaXMueWVzUmFkaW9CdXR0b24uY2hlY2tlZCA9IHRoaXMuX3ZhbHVlO1xuICAgICAgdGhpcy5ub1JhZGlvQnV0dG9uLmNoZWNrZWQgPSAhdGhpcy5fdmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNoZWNrYm94QnV0dG9uKSB7XG4gICAgICB0aGlzLmNoZWNrYm94QnV0dG9uLmNoZWNrZWQgPSB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5jaGVja0lmVG91Y2hlZCgpO1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5fdmFsdWUpO1xuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBjaGVja0lmVG91Y2hlZCgpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC50b3VjaGVkKSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdy9IaWRlIHRoZSBmYWtlIGlucHV0XG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUZha2VJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5zaG93UmFkaW8gfHwgdGhpcy5zdHlsZSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgIHRoaXMuZmFrZUlucHV0Py5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Nkay12aXN1YWxseS1oaWRkZW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mYWtlSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnY2RrLXZpc3VhbGx5LWhpZGRlbicpO1xuICAgIH1cblxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSwgdGhpcyBjb21wb25lbnQgaGFzIGEgdGVtcG9yYXJ5IGNvbXBvbmVudCBkaXNwbGF5ZWQgYmVmb3JlIHRoZSBmaXJzdCBmb2N1cyBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUYWJJbmRleCgpIHtcbiAgICBpZiAoaXNOaWwodGhpcy5fdGFiaW5kZXgpKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5mYWtlSW5wdXQpIHtcbiAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSB0aGlzLl90YWJpbmRleDtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNsZWFyVmFsdWUoZXZlbnQ/OiBFdmVudCkge1xuICAgIHRoaXMud3JpdGVWYWx1ZShudWxsKTtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHJhZGlvQnV0dG9uRWxlbWVudHMoKTogSFRNTEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMueWVzUmFkaW9CdXR0b24gPyBbdGhpcy55ZXNSYWRpb0J1dHRvbiwgdGhpcy5ub1JhZGlvQnV0dG9uXS5tYXAoKGIpID0+IGIuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50KSA6IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpbnB1dHNFbGVtZW50cygpOiBIVE1MRWxlbWVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5yYWRpb0J1dHRvbkVsZW1lbnRzXG4gICAgICAuY29uY2F0KHRoaXMuY2hlY2tib3hCdXR0b24gPyBbdGhpcy5jaGVja2JveEJ1dHRvbi5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnRdIDogW10pXG4gICAgICAuY29uY2F0KHRoaXMuZmFrZUlucHV0ID8gW3RoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnRdIDogW10pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBpb25CdXR0b25zKCk6IElvbkJ1dHRvbltdIHtcbiAgICByZXR1cm4gW3RoaXMueWVzQnV0dG9uLCB0aGlzLm5vQnV0dG9uXTtcbiAgfVxufVxuIiwiQGlmIChyZWFkb25seSkge1xuICA8bWF0LWZvcm0tZmllbGRcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIlxuICAgIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtZGlzYWJsZWQge3sgY2xhc3NMaXN0IH19XCJcbiAgPlxuICAgIEBpZiAoZmxvYXRMYWJlbCAhPT0gJ25ldmVyJyAmJiAhIXBsYWNlaG9sZGVyKSB7XG4gICAgICA8bWF0LWxhYmVsPnt7IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG4gICAgfVxuICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGlucHV0IG1hdElucHV0IGhpZGRlbiB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIC8+XG4gICAgPGlvbi10ZXh0PlxuICAgICAge3sgKHZhbHVlID09PSBudWxsID8gJ0NPTU1PTi5FTVBUWV9PUFRJT04nIDogdmFsdWUgPT09IHRydWUgPyB5ZXNMYWJlbCA6IG5vTGFiZWwpIHwgdHJhbnNsYXRlIH19XG4gICAgPC9pb24tdGV4dD5cbiAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L21hdC1mb3JtLWZpZWxkPlxufSBAZWxzZSB7XG4gIEBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgPCEtLSBSYWRpbyAtLT5cbiAgICBAY2FzZSAoJ3JhZGlvJykge1xuICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgIFtmbG9hdExhYmVsXT1cInNob3dSYWRpbyAmJiAoIWZsb2F0TGFiZWwgfHwgZmxvYXRMYWJlbCA9PT0gJ2F1dG8nKSA/ICdhbHdheXMnIDogKGZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlKVwiXG4gICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZ1wiXG4gICAgICAgIGNsYXNzPVwibWF0LWJvb2xlYW4tZmllbGQgbWF0LWJvb2xlYW4tZmllbGQtcmFkaW8ge3sgY2xhc3NMaXN0IH19XCJcbiAgICAgID5cbiAgICAgICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICA8bWF0LWxhYmVsIFt0aXRsZV09XCJwbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAge3sgcGxhY2Vob2xkZXIgfX1cbiAgICAgICAgICAgIDxzcGFuIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cInNob3dSYWRpb1wiPih7eyB5ZXNMYWJlbCB8IHRyYW5zbGF0ZSB9fS97eyBub0xhYmVsIHwgdHJhbnNsYXRlIH19KTwvc3Bhbj5cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0UHJlZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgI2Zha2VJbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICByZWFkb25seT1cInRydWVcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXNGYWtlSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwidG9nZ2xlVmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleXVwLmFycm93TGVmdCk9XCJ0b2dnbGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuYXJyb3dSaWdodCk9XCJ0b2dnbGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuYXJyb3dVcCk9XCJ0b2dnbGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuYXJyb3dEb3duKT1cInRvZ2dsZVZhbHVlKCRldmVudClcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwic2hvd1JhZGlvXCJcbiAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDwhLS0gcmFkaW8gYnV0dG9uIC0tPlxuICAgICAgICA8bWF0LXJhZGlvLWdyb3VwXG4gICAgICAgICAgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIXNob3dSYWRpb1wiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uUmFkaW9WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAjeWVzUmFkaW9CdXR0b24gW3ZhbHVlXT1cInRydWVcIiB0YWJJbmRleD1cIi0xXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyB5ZXNMYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gI25vUmFkaW9CdXR0b24gW3ZhbHVlXT1cImZhbHNlXCIgdGFiSW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgbm9MYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuXG4gICAgICAgIEBpZiAoZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChjbGVhcmFibGUpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGVhclZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgW2hpZGRlbl09XCJfdmFsdWUgfCBpc05pbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgfVxuXG4gICAgPCEtLSBDaGVja2JveCAtLT5cbiAgICBAY2FzZSAoJ2NoZWNrYm94Jykge1xuICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgIGZsb2F0TGFiZWw9XCJhbHdheXNcIlxuICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgY2xhc3M9XCJtYXQtYm9vbGVhbi1maWVsZCBtYXQtYm9vbGVhbi1maWVsZC1jaGVja2JveCB7eyBjbGFzc0xpc3QgfX1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0UHJlZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgI2Zha2VJbnB1dFxuICAgICAgICAgIHJlYWRvbmx5PVwidHJ1ZVwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1c0Zha2VJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJ0b2dnbGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cInNob3dSYWRpb1wiXG4gICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgLz5cblxuICAgICAgICA8IS0tIGNoZWNrYm94LCB3aGVuIGNvbXBhY3QgLS0+XG4gICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAjY2hlY2tib3hCdXR0b25cbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJ2YWx1ZSB8IGlzTmlsXCJcbiAgICAgICAgICBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCIhc2hvd1JhZGlvXCJcbiAgICAgICAgICBbbGFiZWxQb3NpdGlvbl09XCJsYWJlbFBvc2l0aW9uXCJcbiAgICAgICAgICBbdGl0bGVdPVwicGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgIFt0YWJJbmRleF09XCItMVwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKGZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlcikge1xuICAgICAgICAgICAge3sgcGxhY2Vob2xkZXIgfHwgJycgfX1cbiAgICAgICAgICB9XG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxuXG4gICAgICAgIEBpZiAoZmxvYXRMYWJlbCA9PT0gJ25ldmVyJyB8fCAhcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICA8bWF0LWxhYmVsPiZuYnNwOzwvbWF0LWxhYmVsPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgICAgIDxtYXQtZXJyb3IgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGNsZWFyYWJsZSkge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyVmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbaGlkZGVuXT1cIl92YWx1ZSB8IGlzTmlsXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICB9XG5cbiAgICA8IS0tIEJ1dHRvbnMgLS0+XG4gICAgQGNhc2UgKCdidXR0b24nKSB7XG4gICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgW2Zsb2F0TGFiZWxdPVwiJ2Fsd2F5cydcIlxuICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIlxuICAgICAgICBjbGFzcz1cIm1hdC1ib29sZWFuLWZpZWxkIG1hdC1ib29sZWFuLWZpZWxkLWJ1dHRvbiB7eyBjbGFzc0xpc3QgfX1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0UHJlZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICA8bWF0LWxhYmVsIFt0aXRsZV09XCJwbGFjZWhvbGRlclwiPnt7IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgIH1cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAjZmFrZUlucHV0XG4gICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCJcbiAgICAgICAgICByZWFkb25seT1cInRydWVcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXNGYWtlSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwidG9nZ2xlVmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleXVwLmFycm93TGVmdCk9XCJ0b2dnbGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuYXJyb3dSaWdodCk9XCJ0b2dnbGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuYXJyb3dVcCk9XCJ0b2dnbGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5dXAuYXJyb3dEb3duKT1cInRvZ2dsZVZhbHVlKCRldmVudClcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgW3RhYmluZGV4XT1cIl90YWJpbmRleFwiXG4gICAgICAgIC8+XG4gICAgICAgIEBpZiAoZm9ybUNvbnRyb2wuZGlzYWJsZWQpIHtcbiAgICAgICAgICA8aW9uLWxhYmVsPjxpIHRyYW5zbGF0ZT5DT01NT04uRU1QVFlfT1BUSU9OPC9pPjwvaW9uLWxhYmVsPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWZvcm0tZmllbGQtYnV0dG9uc1wiIFtzdHlsZS4tLWJ1dHRvbnMtY29sLWNvdW50XT1cImJ1dHRvbnNDb2xDb3VudFwiPlxuICAgICAgICAgICAgPCEtLSB5ZXMgLS0+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICAjeWVzQnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIndyaXRlVmFsdWUodHJ1ZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJ3cml0ZVZhbHVlKHRydWUsICRldmVudClcIlxuICAgICAgICAgICAgICBbY29sb3JdPVwiX3ZhbHVlID09PSBudWxsID8gJ3RlcnRpYXJ5JyA6IF92YWx1ZSA9PT0gdHJ1ZSA/ICdhY2NlbnQnIDogJ2xpZ2h0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAoc2hvd0J1dHRvbkljb25zICYmIHllc0ljb247IGFzIGljb24pIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgW25hbWVdPVwiaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAge3sgeWVzTGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgICAgICAgPCEtLSBObyBidXR0b24gLS0+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICAjbm9CdXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1idXR0b25cIlxuICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwid3JpdGVWYWx1ZShmYWxzZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInRvZ2dsZVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwid3JpdGVWYWx1ZShmYWxzZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtjb2xvcl09XCJfdmFsdWUgPT09IG51bGwgPyAndGVydGlhcnknIDogX3ZhbHVlID09PSBmYWxzZSA/ICdhY2NlbnQnIDogJ2xpZ2h0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAoc2hvd0J1dHRvbkljb25zICYmIG5vSWNvbjsgYXMgaWNvbikge1xuICAgICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBbbmFtZV09XCJpY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB7eyBub0xhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGZvcm1Db250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoY2xlYXJhYmxlKSB7XG4gICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgZmlsbD1cImNsZWFyXCJcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBjb2xvcj1cIm1lZGl1bVwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGVhclZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiX3ZhbHVlIHwgaXNOaWxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNsb3NlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIH1cblxuICAgICAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0U3VmZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIH1cbiAgfVxufVxuXG48bmctdGVtcGxhdGUgI21hdFByZWZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0UHJlZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI21hdFN1ZmZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0U3VmZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|