@sebgroup/green-angular 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
1
  import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild, } from '@angular/core';
2
+ import { trigger, query, style, animate, transition, group, } from '@angular/animations';
2
3
  import { ConfigurableFocusTrapFactory, } from '@angular/cdk/a11y';
3
4
  import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';
4
5
  import { NggModalHeaderDirective } from './modal-header.directive';
@@ -103,11 +104,59 @@ export class NggModalComponent {
103
104
  enableBodyScroll(this.ref.nativeElement);
104
105
  }
105
106
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NggModalComponent, deps: [{ token: i0.ElementRef }, { token: i1.ConfigurableFocusTrapFactory }], target: i0.ɵɵFactoryTarget.Component }); }
106
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NggModalComponent, selector: "ngg-modal", inputs: { modalType: "modalType", header: "header", confirmLabel: "confirmLabel", dismissLabel: "dismissLabel", size: "size", hideHeader: "hideHeader", hideFooter: "hideFooter", disableBodyScroll: "disableBodyScroll", trapFocus: "trapFocus", isOpen: "isOpen" }, outputs: { isOpenChange: "isOpenChange", closed: "closed", confirm: "confirm", dismiss: "dismiss" }, host: { properties: { "class.open": "this.open" } }, queries: [{ propertyName: "modalHeaderContent", first: true, predicate: NggModalHeaderDirective, descendants: true }, { propertyName: "modalFooterContent", first: true, predicate: NggModalFooterDirective, descendants: true }], viewQueries: [{ propertyName: "backdropRef", first: true, predicate: ["backdrop"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <div class=\"gds-dialog-wrapper\">\n <aside\n data-testid=\"modal\"\n *ngSwitchCase=\"'slideout'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main\n data-testid=\"modal\"\n *ngSwitchCase=\"'takeover'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section\n data-testid=\"modal\"\n *ngSwitchDefault\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header\n *ngIf=\"!modalHeaderContent; else headerContentTemplate\"\n ngg-modal-header\n data-testid=\"modal-header\"\n [header]=\"header\"\n (closed)=\"this.handleCloseClick($event)\"\n ></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer\n *ngIf=\"!modalFooterContent; else footerContentTemplate\"\n ngg-modal-footer\n data-testid=\"modal-footer\"\n [dismissLabel]=\"dismissLabel\"\n [confirmLabel]=\"confirmLabel\"\n (dismiss)=\"this.handleDismiss($event)\"\n (confirm)=\"this.handleConfirm($event)\"\n ></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div\n #backdrop\n data-testid=\"modal-backdrop\"\n class=\"backdrop entered\"\n (click)=\"this.handleBackdropClick($event)\"\n [attr.aria-hidden]=\"true\"\n ></div>\n </div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitch; }), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchCase; }), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchDefault; }), selector: "[ngSwitchDefault]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalHeaderComponent; }), selector: "[ngg-modal-header]", inputs: ["header"], outputs: ["closed"] }, { kind: "component", type: i0.forwardRef(function () { return NggModalBodyComponent; }), selector: "[ngg-modal-body]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalFooterComponent; }), selector: "[ngg-modal-footer]", inputs: ["dismissLabel", "confirmLabel"], outputs: ["dismiss", "confirm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
107
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NggModalComponent, selector: "ngg-modal", inputs: { modalType: "modalType", header: "header", confirmLabel: "confirmLabel", dismissLabel: "dismissLabel", size: "size", hideHeader: "hideHeader", hideFooter: "hideFooter", disableBodyScroll: "disableBodyScroll", trapFocus: "trapFocus", isOpen: "isOpen" }, outputs: { isOpenChange: "isOpenChange", closed: "closed", confirm: "confirm", dismiss: "dismiss" }, host: { properties: { "class.open": "this.open" } }, queries: [{ propertyName: "modalHeaderContent", first: true, predicate: NggModalHeaderDirective, descendants: true }, { propertyName: "modalFooterContent", first: true, predicate: NggModalFooterDirective, descendants: true }], viewQueries: [{ propertyName: "backdropRef", first: true, predicate: ["backdrop"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <div class=\"gds-dialog-wrapper\" [@modalAnimation]>\n <aside\n data-testid=\"modal\"\n *ngSwitchCase=\"'slideout'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main\n data-testid=\"modal\"\n *ngSwitchCase=\"'takeover'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section\n data-testid=\"modal\"\n *ngSwitchDefault\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header\n *ngIf=\"!modalHeaderContent; else headerContentTemplate\"\n ngg-modal-header\n data-testid=\"modal-header\"\n [header]=\"header\"\n (closed)=\"this.handleCloseClick($event)\"\n ></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer\n *ngIf=\"!modalFooterContent; else footerContentTemplate\"\n ngg-modal-footer\n data-testid=\"modal-footer\"\n [dismissLabel]=\"dismissLabel\"\n [confirmLabel]=\"confirmLabel\"\n (dismiss)=\"this.handleDismiss($event)\"\n (confirm)=\"this.handleConfirm($event)\"\n ></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div\n #backdrop\n data-testid=\"modal-backdrop\"\n class=\"backdrop entered\"\n (click)=\"this.handleBackdropClick($event)\"\n [attr.aria-hidden]=\"true\"\n ></div>\n </div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitch; }), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchCase; }), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchDefault; }), selector: "[ngSwitchDefault]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalHeaderComponent; }), selector: "[ngg-modal-header]", inputs: ["header"], outputs: ["closed"] }, { kind: "component", type: i0.forwardRef(function () { return NggModalBodyComponent; }), selector: "[ngg-modal-body]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalFooterComponent; }), selector: "[ngg-modal-footer]", inputs: ["dismissLabel", "confirmLabel"], outputs: ["dismiss", "confirm"] }], animations: [
108
+ trigger('modalAnimation', [
109
+ transition(':enter', [
110
+ query('aside', style({ transform: 'translateX(100%)' }), {
111
+ optional: true,
112
+ }),
113
+ query('.backdrop, [role=dialog]', style({ opacity: '0' }), {
114
+ optional: true,
115
+ }),
116
+ group([
117
+ query('aside', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(0)' })), { optional: true }),
118
+ query('.backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '1' })), { optional: true }),
119
+ ]),
120
+ ]),
121
+ transition(':leave', [
122
+ query('aside', style({ transform: 'translateX(0)' }), {
123
+ optional: true,
124
+ }),
125
+ group([
126
+ query('aside', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(100%)' })), { optional: true }),
127
+ query('.backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '0' })), { optional: true }),
128
+ ]),
129
+ ]),
130
+ ]),
131
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
107
132
  }
108
133
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NggModalComponent, decorators: [{
109
134
  type: Component,
110
- args: [{ selector: 'ngg-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <div class=\"gds-dialog-wrapper\">\n <aside\n data-testid=\"modal\"\n *ngSwitchCase=\"'slideout'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main\n data-testid=\"modal\"\n *ngSwitchCase=\"'takeover'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section\n data-testid=\"modal\"\n *ngSwitchDefault\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header\n *ngIf=\"!modalHeaderContent; else headerContentTemplate\"\n ngg-modal-header\n data-testid=\"modal-header\"\n [header]=\"header\"\n (closed)=\"this.handleCloseClick($event)\"\n ></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer\n *ngIf=\"!modalFooterContent; else footerContentTemplate\"\n ngg-modal-footer\n data-testid=\"modal-footer\"\n [dismissLabel]=\"dismissLabel\"\n [confirmLabel]=\"confirmLabel\"\n (dismiss)=\"this.handleDismiss($event)\"\n (confirm)=\"this.handleConfirm($event)\"\n ></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div\n #backdrop\n data-testid=\"modal-backdrop\"\n class=\"backdrop entered\"\n (click)=\"this.handleBackdropClick($event)\"\n [attr.aria-hidden]=\"true\"\n ></div>\n </div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] }]
135
+ args: [{ selector: 'ngg-modal', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
136
+ trigger('modalAnimation', [
137
+ transition(':enter', [
138
+ query('aside', style({ transform: 'translateX(100%)' }), {
139
+ optional: true,
140
+ }),
141
+ query('.backdrop, [role=dialog]', style({ opacity: '0' }), {
142
+ optional: true,
143
+ }),
144
+ group([
145
+ query('aside', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(0)' })), { optional: true }),
146
+ query('.backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '1' })), { optional: true }),
147
+ ]),
148
+ ]),
149
+ transition(':leave', [
150
+ query('aside', style({ transform: 'translateX(0)' }), {
151
+ optional: true,
152
+ }),
153
+ group([
154
+ query('aside', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(100%)' })), { optional: true }),
155
+ query('.backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '0' })), { optional: true }),
156
+ ]),
157
+ ]),
158
+ ]),
159
+ ], template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <div class=\"gds-dialog-wrapper\" [@modalAnimation]>\n <aside\n data-testid=\"modal\"\n *ngSwitchCase=\"'slideout'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main\n data-testid=\"modal\"\n *ngSwitchCase=\"'takeover'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section\n data-testid=\"modal\"\n *ngSwitchDefault\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header\n *ngIf=\"!modalHeaderContent; else headerContentTemplate\"\n ngg-modal-header\n data-testid=\"modal-header\"\n [header]=\"header\"\n (closed)=\"this.handleCloseClick($event)\"\n ></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer\n *ngIf=\"!modalFooterContent; else footerContentTemplate\"\n ngg-modal-footer\n data-testid=\"modal-footer\"\n [dismissLabel]=\"dismissLabel\"\n [confirmLabel]=\"confirmLabel\"\n (dismiss)=\"this.handleDismiss($event)\"\n (confirm)=\"this.handleConfirm($event)\"\n ></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div\n #backdrop\n data-testid=\"modal-backdrop\"\n class=\"backdrop entered\"\n (click)=\"this.handleBackdropClick($event)\"\n [attr.aria-hidden]=\"true\"\n ></div>\n </div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] }]
111
160
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ConfigurableFocusTrapFactory }]; }, propDecorators: { modalType: [{
112
161
  type: Input
113
162
  }], header: [{
@@ -255,4 +304,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
255
304
  }], confirm: [{
256
305
  type: Output
257
306
  }] } });
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBRXRCLE9BQU8sRUFFTCw0QkFBNEIsR0FDN0IsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTs7OztBQVFsRSxNQUFNLE9BQU8saUJBQWlCO0lBUzVCLElBQW9CLFNBQVM7UUFDM0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFBO0lBQ3hCLENBQUM7SUFDRCxJQUFXLFNBQVMsQ0FBQyxLQUEwQjtRQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQTtRQUV2QixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO2FBQ3ZCO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELElBQ1csTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUNyQixDQUFDO0lBQ0QsSUFB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LFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTW9kYWxUeXBlLCBTaXplIH0gZnJvbSAnQHNlYmdyb3VwL2V4dHJhY3QnXG5pbXBvcnQge1xuICBDb25maWd1cmFibGVGb2N1c1RyYXAsXG4gIENvbmZpZ3VyYWJsZUZvY3VzVHJhcEZhY3RvcnksXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5J1xuaW1wb3J0IHsgZGlzYWJsZUJvZHlTY3JvbGwsIGVuYWJsZUJvZHlTY3JvbGwgfSBmcm9tICdib2R5LXNjcm9sbC1sb2NrJ1xuaW1wb3J0IHsgTmdnTW9kYWxIZWFkZXJEaXJlY3RpdmUgfSBmcm9tICcuL21vZGFsLWhlYWRlci5kaXJlY3RpdmUnXG5pbXBvcnQgeyBOZ2dNb2RhbEZvb3RlckRpcmVjdGl2ZSB9IGZyb20gJy4vbW9kYWwtZm9vdGVyLmRpcmVjdGl2ZSdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdnLW1vZGFsJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5nZ01vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBASW5wdXQoKSBwdWJsaWMgbW9kYWxUeXBlPzogTW9kYWxUeXBlXG4gIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXI/OiBzdHJpbmdcbiAgQElucHV0KCkgcHVibGljIGNvbmZpcm1MYWJlbD86IHN0cmluZ1xuICBASW5wdXQoKSBwdWJsaWMgZGlzbWlzc0xhYmVsPzogc3RyaW5nXG4gIEBJbnB1dCgpIHB1YmxpYyBzaXplPzogU2l6ZVxuICBASW5wdXQoKSBwdWJsaWMgaGlkZUhlYWRlcj86IGJvb2xlYW5cbiAgQElucHV0KCkgcHVibGljIGhpZGVGb290ZXI/OiBib29sZWFuXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlQm9keVNjcm9sbD86IGJvb2xlYW4gPSB0cnVlXG4gIEBJbnB1dCgpIHB1YmxpYyBnZXQgdHJhcEZvY3VzKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90cmFwRm9jdXNcbiAgfVxuICBwdWJsaWMgc2V0IHRyYXBGb2N1cyh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3RyYXBGb2N1cyA9IHZhbHVlXG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLl9pc09wZW4pIHtcbiAgICAgICAgdGhpcy5lbmFibGVGb2N1c1RyYXAoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc2FibGVGb2N1c1RyYXAoKVxuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgaXNPcGVuKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pc09wZW5cbiAgfVxuICBwdWJsaWMgc2V0IGlzT3Blbih2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2lzT3BlbiA9IHZhbHVlXG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnRyYXBGb2N1cykge1xuICAgICAgICB0aGlzLmVuYWJsZUZvY3VzVHJhcCgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVCb2R5U2Nyb2xsKSB7XG4gICAgICAgIGRpc2FibGVCb2R5U2Nyb2xsKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICBhbGxvd1RvdWNoTW92ZTogKGVsKSA9PiB7XG4gICAgICAgICAgICAvLyBBbGxvdyB0b3VjaG1vdmUgZm9yIGVsZW1lbnRzIGluc2lkZSBtb2RhbCwgaXRzIHJlcXVpcmVkIGZvciBzY3JvbGwgdG8gd29yayBvbiBpT1MgZGV2aWNlc1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZWwpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNhYmxlRm9jdXNUcmFwKClcbiAgICAgIGlmICh0aGlzLmRpc2FibGVCb2R5U2Nyb2xsKSB7XG4gICAgICAgIGVuYWJsZUJvZHlTY3JvbGwodGhpcy5yZWYubmF0aXZlRWxlbWVudClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAT3V0cHV0KCkgcHVibGljIGlzT3BlbkNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KClcbiAgQE91dHB1dCgpIHB1YmxpYyBjbG9zZWQ6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpXG4gIEBPdXRwdXQoKSBwdWJsaWMgY29uZmlybTogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KClcbiAgQE91dHB1dCgpIHB1YmxpYyBkaXNtaXNzOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mub3BlbicpIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLmlzT3BlblxuICB9XG4gIEBWaWV3Q2hpbGQoJ2JhY2tkcm9wJykgcHJpdmF0ZSBiYWNrZHJvcFJlZj86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD5cbiAgQENvbnRlbnRDaGlsZChOZ2dNb2RhbEhlYWRlckRpcmVjdGl2ZSlcbiAgcHVibGljIG1vZGFsSGVhZGVyQ29udGVudD86IE5nZ01vZGFsSGVhZGVyRGlyZWN0aXZlXG4gIEBDb250ZW50Q2hpbGQoTmdnTW9kYWxGb290ZXJEaXJlY3RpdmUpXG4gIHB1YmxpYyBtb2RhbEZvb3RlckNvbnRlbnQ/OiBOZ2dNb2RhbEZvb3RlckRpcmVjdGl2ZVxuICBwcml2YXRlIF9pc09wZW4/OiBib29sZWFuXG4gIHByaXZhdGUgX3RyYXBGb2N1cz86IGJvb2xlYW5cbiAgcHJpdmF0ZSBjb25maWd1cmFibGVGb2N1c1RyYXA6IENvbmZpZ3VyYWJsZUZvY3VzVHJhcFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIGNvbmZpZ3VyYWJsZUZvY3VzVHJhcEZhY3Rvcnk6IENvbmZpZ3VyYWJsZUZvY3VzVHJhcEZhY3RvcnksXG4gICkge1xuICAgIHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwID0gdGhpcy5jb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZShcbiAgICAgIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgKVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzT3BlbiAmJiB0aGlzLnRyYXBGb2N1cykgdGhpcy5lbmFibGVGb2N1c1RyYXAoKVxuICAgIGVsc2UgdGhpcy5kaXNhYmxlRm9jdXNUcmFwKClcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDbG9zZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5jbG9zZU1vZGFsKGV2ZW50KVxuICB9XG5cbiAgcHVibGljIGhhbmRsZUJhY2tkcm9wQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09IHRoaXMuYmFja2Ryb3BSZWY/Lm5hdGl2ZUVsZW1lbnQpIHRoaXMuY2xvc2VNb2RhbChldmVudClcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVEaXNtaXNzKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5kaXNtaXNzLmVtaXQoZXZlbnQpXG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQ29uZmlybShldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY29uZmlybS5lbWl0KGV2ZW50KVxuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZU1vZGFsKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNsb3NlZC5lbWl0KGV2ZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlXG4gICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlRm9jdXNUcmFwKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcCkge1xuICAgICAgdGhpcy5jb25maWd1cmFibGVGb2N1c1RyYXAuZW5hYmxlZCA9IHRydWVcbiAgICAgIHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZUZvY3VzVHJhcCgpIHtcbiAgICBpZiAodGhpcy5jb25maWd1cmFibGVGb2N1c1RyYXApIHtcbiAgICAgIHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwLmVuYWJsZWQgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwPy5kZXN0cm95KClcbiAgICBlbmFibGVCb2R5U2Nyb2xsKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpXG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW25nZy1tb2RhbC1oZWFkZXJdJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aDMgZGF0YS10ZXN0aWQ9XCJtb2RhbC1oZWFkZXItdGV4dFwiPnt7IGhlYWRlciB9fTwvaDM+XG4gICAgPGJ1dHRvblxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1jbG9zZS1idXR0b25cIlxuICAgICAgY2xhc3M9XCJjbG9zZVwiXG4gICAgICAoY2xpY2spPVwidGhpcy5oYW5kbGVDbG9zZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XG4gICAgICA8aT48L2k+XG4gICAgPC9idXR0b24+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIE5nZ01vZGFsSGVhZGVyQ29tcG9uZW50IHtcbiAgQElucHV0KCkgaGVhZGVyPzogc3RyaW5nXG4gIEBPdXRwdXQoKSBjbG9zZWQ6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKVxuXG4gIGhhbmRsZUNsb3NlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5jbG9zZWQuZW1pdChldmVudClcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbbmdnLW1vZGFsLWJvZHldJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGU6IGA8bmctY29udGVudD48L25nLWNvbnRlbnQ+YCxcbn0pXG5leHBvcnQgY2xhc3MgTmdnTW9kYWxCb2R5Q29tcG9uZW50IHt9XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tuZ2ctbW9kYWwtZm9vdGVyXScsXG4gIHN0eWxlVXJsczogWycuL21vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGJ1dHRvblxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1kaXNtaXNzLWJ1dHRvblwiXG4gICAgICAqbmdJZj1cImRpc21pc3NMYWJlbFwiXG4gICAgICBjbGFzcz1cInNlY29uZGFyeVwiXG4gICAgICAoY2xpY2spPVwidGhpcy5oYW5kbGVEaXNtaXNzKCRldmVudClcIlxuICAgID5cbiAgICAgIHt7IGRpc21pc3NMYWJlbCB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtY29uZmlybS1idXR0b25cIlxuICAgICAgKm5nSWY9XCJjb25maXJtTGFiZWxcIlxuICAgICAgY2xhc3M9XCJwcmltYXJ5XCJcbiAgICAgIChjbGljayk9XCJ0aGlzLmhhbmRsZUNvbmZpcm0oJGV2ZW50KVwiXG4gICAgPlxuICAgICAge3sgY29uZmlybUxhYmVsIH19XG4gICAgPC9idXR0b24+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIE5nZ01vZGFsRm9vdGVyQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZGlzbWlzc0xhYmVsPzogc3RyaW5nXG4gIEBJbnB1dCgpIGNvbmZpcm1MYWJlbD86IHN0cmluZ1xuICBAT3V0cHV0KCkgZGlzbWlzczogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBPdXRwdXQoKSBjb25maXJtOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICBoYW5kbGVEaXNtaXNzKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5kaXNtaXNzLmVtaXQoZXZlbnQpXG4gIH1cblxuICBoYW5kbGVDb25maXJtKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5jb25maXJtLmVtaXQoZXZlbnQpXG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJpc09wZW5cIiBbbmdTd2l0Y2hdPVwibW9kYWxUeXBlXCI+XG4gIDxkaXYgY2xhc3M9XCJnZHMtZGlhbG9nLXdyYXBwZXJcIj5cbiAgICA8YXNpZGVcbiAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWxcIlxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIidzbGlkZW91dCdcIlxuICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICBbY2xhc3Muc21hbGxdPVwic2l6ZSA9PT0gJ3NtJ1wiXG4gICAgICBbY2xhc3MubWVkaXVtXT1cInNpemUgPT09ICdtZCdcIlxuICAgICAgW2NsYXNzLmxhcmdlXT1cInNpemUgPT09ICdsZydcIlxuICAgICAgW2NsYXNzLmVudGVyZWRdPVwiaXNPcGVuXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9hc2lkZT5cbiAgICA8bWFpblxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiXG4gICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3Rha2VvdmVyJ1wiXG4gICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgIFtjbGFzcy5lbnRlcmVkXT1cImlzT3BlblwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbWFpbj5cbiAgICA8c2VjdGlvblxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiXG4gICAgICAqbmdTd2l0Y2hEZWZhdWx0XG4gICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgIFtjbGFzcy5zbWFsbF09XCJzaXplID09PSAnc20nXCJcbiAgICAgIFtjbGFzcy5tZWRpdW1dPVwic2l6ZSA9PT0gJ21kJ1wiXG4gICAgICBbY2xhc3MubGFyZ2VdPVwic2l6ZSA9PT0gJ2xnJ1wiXG4gICAgICBbY2xhc3MuZW50ZXJlZF09XCJpc09wZW5cIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NlY3Rpb24+XG4gICAgPG5nLXRlbXBsYXRlICNjb250ZW50VGVtcGxhdGU+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhpZGVIZWFkZXJcIj5cbiAgICAgICAgPGhlYWRlclxuICAgICAgICAgICpuZ0lmPVwiIW1vZGFsSGVhZGVyQ29udGVudDsgZWxzZSBoZWFkZXJDb250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgIG5nZy1tb2RhbC1oZWFkZXJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLWhlYWRlclwiXG4gICAgICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxuICAgICAgICAgIChjbG9zZWQpPVwidGhpcy5oYW5kbGVDbG9zZUNsaWNrKCRldmVudClcIlxuICAgICAgICA+PC9oZWFkZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgbmdnLW1vZGFsLWJvZHkgZGF0YS10ZXN0aWQ9XCJtb2RhbC1ib2R5XCIgY2xhc3M9XCJib2R5XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5Q29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZUZvb3RlciAmJiAoZGlzbWlzc0xhYmVsIHx8IGNvbmZpcm1MYWJlbClcIj5cbiAgICAgICAgPGZvb3RlclxuICAgICAgICAgICpuZ0lmPVwiIW1vZGFsRm9vdGVyQ29udGVudDsgZWxzZSBmb290ZXJDb250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgIG5nZy1tb2RhbC1mb290ZXJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLWZvb3RlclwiXG4gICAgICAgICAgW2Rpc21pc3NMYWJlbF09XCJkaXNtaXNzTGFiZWxcIlxuICAgICAgICAgIFtjb25maXJtTGFiZWxdPVwiY29uZmlybUxhYmVsXCJcbiAgICAgICAgICAoZGlzbWlzcyk9XCJ0aGlzLmhhbmRsZURpc21pc3MoJGV2ZW50KVwiXG4gICAgICAgICAgKGNvbmZpcm0pPVwidGhpcy5oYW5kbGVDb25maXJtKCRldmVudClcIlxuICAgICAgICA+PC9mb290ZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyQ29udGVudFRlbXBsYXRlPlxuICAgICAgPGhlYWRlciBkYXRhLXRlc3RpZD1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmdnTW9kYWxIZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9oZWFkZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2JvZHlDb250ZW50VGVtcGxhdGU+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2Zvb3RlckNvbnRlbnRUZW1wbGF0ZT5cbiAgICAgIDxmb290ZXIgZGF0YS10ZXN0aWQ9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25nZ01vZGFsRm9vdGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZm9vdGVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGRpdlxuICAgICAgI2JhY2tkcm9wXG4gICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLWJhY2tkcm9wXCJcbiAgICAgIGNsYXNzPVwiYmFja2Ryb3AgZW50ZXJlZFwiXG4gICAgICAoY2xpY2spPVwidGhpcy5oYW5kbGVCYWNrZHJvcENsaWNrKCRldmVudClcIlxuICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiXG4gICAgPjwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFDTCxPQUFPLEVBQ1AsS0FBSyxFQUNMLEtBQUssRUFDTCxPQUFPLEVBQ1AsVUFBVSxFQUNWLEtBQUssR0FDTixNQUFNLHFCQUFxQixDQUFBO0FBRTVCLE9BQU8sRUFFTCw0QkFBNEIsR0FDN0IsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTs7OztBQTZEbEUsTUFBTSxPQUFPLGlCQUFpQjtJQVM1QixJQUFvQixTQUFTO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQTtJQUN4QixDQUFDO0lBQ0QsSUFBVyxTQUFTLENBQUMsS0FBMEI7UUFDN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7UUFFdkIsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTthQUN2QjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JB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R0FBNkIsSUFBSSxZQUFZLEVBQUUsQ0FBQTtLQVNqRTtJQVBDLGFBQWEsQ0FBQyxLQUFpQjtRQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMxQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWlCO1FBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzFCLENBQUM7K0dBWlUsdUJBQXVCO21HQUF2Qix1QkFBdUIsdUxBbkJ4Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQlQ7OzRGQUVVLHVCQUF1QjtrQkF2Qm5DLFNBQVM7K0JBRUUsb0JBQW9CLFlBRXBCOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCVDs4QkFHUSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgdHJpZ2dlcixcbiAgcXVlcnksXG4gIHN0eWxlLFxuICBhbmltYXRlLFxuICB0cmFuc2l0aW9uLFxuICBncm91cCxcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucydcbmltcG9ydCB7IE1vZGFsVHlwZSwgU2l6ZSB9IGZyb20gJ0BzZWJncm91cC9leHRyYWN0J1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhYmxlRm9jdXNUcmFwLFxuICBDb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5LFxufSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSdcbmltcG9ydCB7IGRpc2FibGVCb2R5U2Nyb2xsLCBlbmFibGVCb2R5U2Nyb2xsIH0gZnJvbSAnYm9keS1zY3JvbGwtbG9jaydcbmltcG9ydCB7IE5nZ01vZGFsSGVhZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi9tb2RhbC1oZWFkZXIuZGlyZWN0aXZlJ1xuaW1wb3J0IHsgTmdnTW9kYWxGb290ZXJEaXJlY3RpdmUgfSBmcm9tICcuL21vZGFsLWZvb3Rlci5kaXJlY3RpdmUnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nZy1tb2RhbCcsXG4gIHN0eWxlVXJsczogWycuL21vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignbW9kYWxBbmltYXRpb24nLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgIHF1ZXJ5KCdhc2lkZScsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgxMDAlKScgfSksIHtcbiAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIHF1ZXJ5KCcuYmFja2Ryb3AsIFtyb2xlPWRpYWxvZ10nLCBzdHlsZSh7IG9wYWNpdHk6ICcwJyB9KSwge1xuICAgICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXAoW1xuICAgICAgICAgIHF1ZXJ5KFxuICAgICAgICAgICAgJ2FzaWRlJyxcbiAgICAgICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgICAgICczNTBtcyBjdWJpYy1iZXppZXIoMC4zMywgMSwgMC42OCwgMSknLFxuICAgICAgICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMCknIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHsgb3B0aW9uYWw6IHRydWUgfSxcbiAgICAgICAgICApLFxuICAgICAgICAgIHF1ZXJ5KFxuICAgICAgICAgICAgJy5iYWNrZHJvcCwgW3JvbGU9ZGlhbG9nXScsXG4gICAgICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICAgICAnMzUwbXMgY3ViaWMtYmV6aWVyKDAuMzMsIDEsIDAuNjgsIDEpJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAnMScgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgeyBvcHRpb25hbDogdHJ1ZSB9LFxuICAgICAgICAgICksXG4gICAgICAgIF0pLFxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgIHF1ZXJ5KCdhc2lkZScsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScgfSksIHtcbiAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwKFtcbiAgICAgICAgICBxdWVyeShcbiAgICAgICAgICAgICdhc2lkZScsXG4gICAgICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICAgICAnMzUwbXMgY3ViaWMtYmV6aWVyKDAuMzMsIDEsIDAuNjgsIDEpJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMCUpJyB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB7IG9wdGlvbmFsOiB0cnVlIH0sXG4gICAgICAgICAgKSxcbiAgICAgICAgICBxdWVyeShcbiAgICAgICAgICAgICcuYmFja2Ryb3AsIFtyb2xlPWRpYWxvZ10nLFxuICAgICAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAgICAgJzM1MG1zIGN1YmljLWJlemllcigwLjMzLCAxLCAwLjY4LCAxKScsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogJzAnIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHsgb3B0aW9uYWw6IHRydWUgfSxcbiAgICAgICAgICApLFxuICAgICAgICBdKSxcbiAgICAgIF0pLFxuICAgIF0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ2dNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgQElucHV0KCkgcHVibGljIG1vZGFsVHlwZT86IE1vZGFsVHlwZVxuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyPzogc3RyaW5nXG4gIEBJbnB1dCgpIHB1YmxpYyBjb25maXJtTGFiZWw/OiBzdHJpbmdcbiAgQElucHV0KCkgcHVibGljIGRpc21pc3NMYWJlbD86IHN0cmluZ1xuICBASW5wdXQoKSBwdWJsaWMgc2l6ZT86IFNpemVcbiAgQElucHV0KCkgcHVibGljIGhpZGVIZWFkZXI/OiBib29sZWFuXG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlRm9vdGVyPzogYm9vbGVhblxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZUJvZHlTY3JvbGw/OiBib29sZWFuID0gdHJ1ZVxuICBASW5wdXQoKSBwdWJsaWMgZ2V0IHRyYXBGb2N1cygpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhcEZvY3VzXG4gIH1cbiAgcHVibGljIHNldCB0cmFwRm9jdXModmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90cmFwRm9jdXMgPSB2YWx1ZVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5faXNPcGVuKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlRm9jdXNUcmFwKClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNhYmxlRm9jdXNUcmFwKClcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGlzT3BlbigpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faXNPcGVuXG4gIH1cbiAgcHVibGljIHNldCBpc09wZW4odmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9pc09wZW4gPSB2YWx1ZVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcy50cmFwRm9jdXMpIHtcbiAgICAgICAgdGhpcy5lbmFibGVGb2N1c1RyYXAoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5kaXNhYmxlQm9keVNjcm9sbCkge1xuICAgICAgICBkaXNhYmxlQm9keVNjcm9sbCh0aGlzLnJlZi5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgICAgYWxsb3dUb3VjaE1vdmU6IChlbCkgPT4ge1xuICAgICAgICAgICAgLy8gQWxsb3cgdG91Y2htb3ZlIGZvciBlbGVtZW50cyBpbnNpZGUgbW9kYWwsIGl0cyByZXF1aXJlZCBmb3Igc2Nyb2xsIHRvIHdvcmsgb24gaU9TIGRldmljZXNcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGVsKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzYWJsZUZvY3VzVHJhcCgpXG4gICAgICBpZiAodGhpcy5kaXNhYmxlQm9keVNjcm9sbCkge1xuICAgICAgICBlbmFibGVCb2R5U2Nyb2xsKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBpc09wZW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xvc2VkOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKVxuICBAT3V0cHV0KCkgcHVibGljIGNvbmZpcm06IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpXG4gIEBPdXRwdXQoKSBwdWJsaWMgZGlzbWlzczogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KClcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm9wZW4nKSBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5pc09wZW5cbiAgfVxuICBAVmlld0NoaWxkKCdiYWNrZHJvcCcpIHByaXZhdGUgYmFja2Ryb3BSZWY/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+XG4gIEBDb250ZW50Q2hpbGQoTmdnTW9kYWxIZWFkZXJEaXJlY3RpdmUpXG4gIHB1YmxpYyBtb2RhbEhlYWRlckNvbnRlbnQ/OiBOZ2dNb2RhbEhlYWRlckRpcmVjdGl2ZVxuICBAQ29udGVudENoaWxkKE5nZ01vZGFsRm9vdGVyRGlyZWN0aXZlKVxuICBwdWJsaWMgbW9kYWxGb290ZXJDb250ZW50PzogTmdnTW9kYWxGb290ZXJEaXJlY3RpdmVcbiAgcHJpdmF0ZSBfaXNPcGVuPzogYm9vbGVhblxuICBwcml2YXRlIF90cmFwRm9jdXM/OiBib29sZWFuXG4gIHByaXZhdGUgY29uZmlndXJhYmxlRm9jdXNUcmFwOiBDb25maWd1cmFibGVGb2N1c1RyYXBcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBjb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5OiBDb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5LFxuICApIHtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcCA9IHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUoXG4gICAgICB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgIClcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc09wZW4gJiYgdGhpcy50cmFwRm9jdXMpIHRoaXMuZW5hYmxlRm9jdXNUcmFwKClcbiAgICBlbHNlIHRoaXMuZGlzYWJsZUZvY3VzVHJhcCgpXG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQ2xvc2VDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY2xvc2VNb2RhbChldmVudClcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVCYWNrZHJvcENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLmJhY2tkcm9wUmVmPy5uYXRpdmVFbGVtZW50KSB0aGlzLmNsb3NlTW9kYWwoZXZlbnQpXG4gIH1cblxuICBwdWJsaWMgaGFuZGxlRGlzbWlzcyhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuZGlzbWlzcy5lbWl0KGV2ZW50KVxuICB9XG5cbiAgcHVibGljIGhhbmRsZUNvbmZpcm0oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmNvbmZpcm0uZW1pdChldmVudClcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VNb2RhbChldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmNsb3NlZC5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jbG9zZWQuZW1pdChldmVudClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZVxuICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh0aGlzLmlzT3BlbilcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZUZvY3VzVHJhcCgpIHtcbiAgICBpZiAodGhpcy5jb25maWd1cmFibGVGb2N1c1RyYXApIHtcbiAgICAgIHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwLmVuYWJsZWQgPSB0cnVlXG4gICAgICB0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVGb2N1c1RyYXAoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcC5lbmFibGVkID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcD8uZGVzdHJveSgpXG4gICAgZW5hYmxlQm9keVNjcm9sbCh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KVxuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tuZ2ctbW9kYWwtaGVhZGVyXScsXG4gIHN0eWxlVXJsczogWycuL21vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGgzIGRhdGEtdGVzdGlkPVwibW9kYWwtaGVhZGVyLXRleHRcIj57eyBoZWFkZXIgfX08L2gzPlxuICAgIDxidXR0b25cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtY2xvc2UtYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiY2xvc2VcIlxuICAgICAgKGNsaWNrKT1cInRoaXMuaGFuZGxlQ2xvc2UoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuICAgICAgPGk+PC9pPlxuICAgIDwvYnV0dG9uPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBOZ2dNb2RhbEhlYWRlckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGhlYWRlcj86IHN0cmluZ1xuICBAT3V0cHV0KCkgY2xvc2VkOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KClcblxuICBoYW5kbGVDbG9zZShldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoZXZlbnQpXG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW25nZy1tb2RhbC1ib2R5XScsXG4gIHN0eWxlVXJsczogWycuL21vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXG59KVxuZXhwb3J0IGNsYXNzIE5nZ01vZGFsQm9keUNvbXBvbmVudCB7fVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbbmdnLW1vZGFsLWZvb3Rlcl0nLFxuICBzdHlsZVVybHM6IFsnLi9tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxidXR0b25cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtZGlzbWlzcy1idXR0b25cIlxuICAgICAgKm5nSWY9XCJkaXNtaXNzTGFiZWxcIlxuICAgICAgY2xhc3M9XCJzZWNvbmRhcnlcIlxuICAgICAgKGNsaWNrKT1cInRoaXMuaGFuZGxlRGlzbWlzcygkZXZlbnQpXCJcbiAgICA+XG4gICAgICB7eyBkaXNtaXNzTGFiZWwgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLWNvbmZpcm0tYnV0dG9uXCJcbiAgICAgICpuZ0lmPVwiY29uZmlybUxhYmVsXCJcbiAgICAgIGNsYXNzPVwicHJpbWFyeVwiXG4gICAgICAoY2xpY2spPVwidGhpcy5oYW5kbGVDb25maXJtKCRldmVudClcIlxuICAgID5cbiAgICAgIHt7IGNvbmZpcm1MYWJlbCB9fVxuICAgIDwvYnV0dG9uPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBOZ2dNb2RhbEZvb3RlckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGRpc21pc3NMYWJlbD86IHN0cmluZ1xuICBASW5wdXQoKSBjb25maXJtTGFiZWw/OiBzdHJpbmdcbiAgQE91dHB1dCgpIGRpc21pc3M6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgY29uZmlybTogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgaGFuZGxlRGlzbWlzcyhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuZGlzbWlzcy5lbWl0KGV2ZW50KVxuICB9XG5cbiAgaGFuZGxlQ29uZmlybShldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY29uZmlybS5lbWl0KGV2ZW50KVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiaXNPcGVuXCIgW25nU3dpdGNoXT1cIm1vZGFsVHlwZVwiPlxuICA8ZGl2IGNsYXNzPVwiZ2RzLWRpYWxvZy13cmFwcGVyXCIgW0Btb2RhbEFuaW1hdGlvbl0+XG4gICAgPGFzaWRlXG4gICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsXCJcbiAgICAgICpuZ1N3aXRjaENhc2U9XCInc2xpZGVvdXQnXCJcbiAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgW2NsYXNzLnNtYWxsXT1cInNpemUgPT09ICdzbSdcIlxuICAgICAgW2NsYXNzLm1lZGl1bV09XCJzaXplID09PSAnbWQnXCJcbiAgICAgIFtjbGFzcy5sYXJnZV09XCJzaXplID09PSAnbGcnXCJcbiAgICAgIFtjbGFzcy5lbnRlcmVkXT1cImlzT3BlblwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvYXNpZGU+XG4gICAgPG1haW5cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWxcIlxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIid0YWtlb3ZlcidcIlxuICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICBbY2xhc3MuZW50ZXJlZF09XCJpc09wZW5cIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L21haW4+XG4gICAgPHNlY3Rpb25cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWxcIlxuICAgICAgKm5nU3dpdGNoRGVmYXVsdFxuICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICBbY2xhc3Muc21hbGxdPVwic2l6ZSA9PT0gJ3NtJ1wiXG4gICAgICBbY2xhc3MubWVkaXVtXT1cInNpemUgPT09ICdtZCdcIlxuICAgICAgW2NsYXNzLmxhcmdlXT1cInNpemUgPT09ICdsZydcIlxuICAgICAgW2NsYXNzLmVudGVyZWRdPVwiaXNPcGVuXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9zZWN0aW9uPlxuICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudFRlbXBsYXRlPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoaWRlSGVhZGVyXCI+XG4gICAgICAgIDxoZWFkZXJcbiAgICAgICAgICAqbmdJZj1cIiFtb2RhbEhlYWRlckNvbnRlbnQ7IGVsc2UgaGVhZGVyQ29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICBuZ2ctbW9kYWwtaGVhZGVyXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1oZWFkZXJcIlxuICAgICAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgICAgICAoY2xvc2VkKT1cInRoaXMuaGFuZGxlQ2xvc2VDbGljaygkZXZlbnQpXCJcbiAgICAgICAgPjwvaGVhZGVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2IG5nZy1tb2RhbC1ib2R5IGRhdGEtdGVzdGlkPVwibW9kYWwtYm9keVwiIGNsYXNzPVwiYm9keVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYm9keUNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhpZGVGb290ZXIgJiYgKGRpc21pc3NMYWJlbCB8fCBjb25maXJtTGFiZWwpXCI+XG4gICAgICAgIDxmb290ZXJcbiAgICAgICAgICAqbmdJZj1cIiFtb2RhbEZvb3RlckNvbnRlbnQ7IGVsc2UgZm9vdGVyQ29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICBuZ2ctbW9kYWwtZm9vdGVyXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1mb290ZXJcIlxuICAgICAgICAgIFtkaXNtaXNzTGFiZWxdPVwiZGlzbWlzc0xhYmVsXCJcbiAgICAgICAgICBbY29uZmlybUxhYmVsXT1cImNvbmZpcm1MYWJlbFwiXG4gICAgICAgICAgKGRpc21pc3MpPVwidGhpcy5oYW5kbGVEaXNtaXNzKCRldmVudClcIlxuICAgICAgICAgIChjb25maXJtKT1cInRoaXMuaGFuZGxlQ29uZmlybSgkZXZlbnQpXCJcbiAgICAgICAgPjwvZm9vdGVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2hlYWRlckNvbnRlbnRUZW1wbGF0ZT5cbiAgICAgIDxoZWFkZXIgZGF0YS10ZXN0aWQ9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25nZ01vZGFsSGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvaGVhZGVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNib2R5Q29udGVudFRlbXBsYXRlPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNmb290ZXJDb250ZW50VGVtcGxhdGU+XG4gICAgICA8Zm9vdGVyIGRhdGEtdGVzdGlkPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltuZ2dNb2RhbEZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Zvb3Rlcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgICNiYWNrZHJvcFxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1iYWNrZHJvcFwiXG4gICAgICBjbGFzcz1cImJhY2tkcm9wIGVudGVyZWRcIlxuICAgICAgKGNsaWNrKT1cInRoaXMuaGFuZGxlQmFja2Ryb3BDbGljaygkZXZlbnQpXCJcbiAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cInRydWVcIlxuICAgID48L2Rpdj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -1,4 +1,5 @@
1
1
  import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild, } from '@angular/core';
2
+ import { trigger, query, style, animate, transition, group, } from '@angular/animations';
2
3
  import { ConfigurableFocusTrapFactory, } from '@angular/cdk/a11y';
3
4
  import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';
4
5
  import { NggModalHeaderDirective } from './modal-header.directive';
@@ -103,11 +104,59 @@ export class NggModalComponent {
103
104
  enableBodyScroll(this.ref.nativeElement);
104
105
  }
105
106
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NggModalComponent, deps: [{ token: i0.ElementRef }, { token: i1.ConfigurableFocusTrapFactory }], target: i0.ɵɵFactoryTarget.Component }); }
106
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NggModalComponent, selector: "ngg-modal", inputs: { modalType: "modalType", header: "header", confirmLabel: "confirmLabel", dismissLabel: "dismissLabel", size: "size", hideHeader: "hideHeader", hideFooter: "hideFooter", disableBodyScroll: "disableBodyScroll", trapFocus: "trapFocus", isOpen: "isOpen" }, outputs: { isOpenChange: "isOpenChange", closed: "closed", confirm: "confirm", dismiss: "dismiss" }, host: { properties: { "class.open": "this.open" } }, queries: [{ propertyName: "modalHeaderContent", first: true, predicate: NggModalHeaderDirective, descendants: true }, { propertyName: "modalFooterContent", first: true, predicate: NggModalFooterDirective, descendants: true }], viewQueries: [{ propertyName: "backdropRef", first: true, predicate: ["backdrop"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <div class=\"gds-dialog-wrapper\">\n <aside\n data-testid=\"modal\"\n *ngSwitchCase=\"'slideout'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main\n data-testid=\"modal\"\n *ngSwitchCase=\"'takeover'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section\n data-testid=\"modal\"\n *ngSwitchDefault\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header\n *ngIf=\"!modalHeaderContent; else headerContentTemplate\"\n ngg-modal-header\n data-testid=\"modal-header\"\n [header]=\"header\"\n (closed)=\"this.handleCloseClick($event)\"\n ></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer\n *ngIf=\"!modalFooterContent; else footerContentTemplate\"\n ngg-modal-footer\n data-testid=\"modal-footer\"\n [dismissLabel]=\"dismissLabel\"\n [confirmLabel]=\"confirmLabel\"\n (dismiss)=\"this.handleDismiss($event)\"\n (confirm)=\"this.handleConfirm($event)\"\n ></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div\n #backdrop\n data-testid=\"modal-backdrop\"\n class=\"backdrop entered\"\n (click)=\"this.handleBackdropClick($event)\"\n [attr.aria-hidden]=\"true\"\n ></div>\n </div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitch; }), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchCase; }), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchDefault; }), selector: "[ngSwitchDefault]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalHeaderComponent; }), selector: "[ngg-modal-header]", inputs: ["header"], outputs: ["closed"] }, { kind: "component", type: i0.forwardRef(function () { return NggModalBodyComponent; }), selector: "[ngg-modal-body]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalFooterComponent; }), selector: "[ngg-modal-footer]", inputs: ["dismissLabel", "confirmLabel"], outputs: ["dismiss", "confirm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
107
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NggModalComponent, selector: "ngg-modal", inputs: { modalType: "modalType", header: "header", confirmLabel: "confirmLabel", dismissLabel: "dismissLabel", size: "size", hideHeader: "hideHeader", hideFooter: "hideFooter", disableBodyScroll: "disableBodyScroll", trapFocus: "trapFocus", isOpen: "isOpen" }, outputs: { isOpenChange: "isOpenChange", closed: "closed", confirm: "confirm", dismiss: "dismiss" }, host: { properties: { "class.open": "this.open" } }, queries: [{ propertyName: "modalHeaderContent", first: true, predicate: NggModalHeaderDirective, descendants: true }, { propertyName: "modalFooterContent", first: true, predicate: NggModalFooterDirective, descendants: true }], viewQueries: [{ propertyName: "backdropRef", first: true, predicate: ["backdrop"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <div class=\"gds-dialog-wrapper\" [@modalAnimation]>\n <aside\n data-testid=\"modal\"\n *ngSwitchCase=\"'slideout'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main\n data-testid=\"modal\"\n *ngSwitchCase=\"'takeover'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section\n data-testid=\"modal\"\n *ngSwitchDefault\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header\n *ngIf=\"!modalHeaderContent; else headerContentTemplate\"\n ngg-modal-header\n data-testid=\"modal-header\"\n [header]=\"header\"\n (closed)=\"this.handleCloseClick($event)\"\n ></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer\n *ngIf=\"!modalFooterContent; else footerContentTemplate\"\n ngg-modal-footer\n data-testid=\"modal-footer\"\n [dismissLabel]=\"dismissLabel\"\n [confirmLabel]=\"confirmLabel\"\n (dismiss)=\"this.handleDismiss($event)\"\n (confirm)=\"this.handleConfirm($event)\"\n ></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div\n #backdrop\n data-testid=\"modal-backdrop\"\n class=\"backdrop entered\"\n (click)=\"this.handleBackdropClick($event)\"\n [attr.aria-hidden]=\"true\"\n ></div>\n </div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitch; }), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchCase; }), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchDefault; }), selector: "[ngSwitchDefault]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalHeaderComponent; }), selector: "[ngg-modal-header]", inputs: ["header"], outputs: ["closed"] }, { kind: "component", type: i0.forwardRef(function () { return NggModalBodyComponent; }), selector: "[ngg-modal-body]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalFooterComponent; }), selector: "[ngg-modal-footer]", inputs: ["dismissLabel", "confirmLabel"], outputs: ["dismiss", "confirm"] }], animations: [
108
+ trigger('modalAnimation', [
109
+ transition(':enter', [
110
+ query('aside', style({ transform: 'translateX(100%)' }), {
111
+ optional: true,
112
+ }),
113
+ query('.backdrop, [role=dialog]', style({ opacity: '0' }), {
114
+ optional: true,
115
+ }),
116
+ group([
117
+ query('aside', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(0)' })), { optional: true }),
118
+ query('.backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '1' })), { optional: true }),
119
+ ]),
120
+ ]),
121
+ transition(':leave', [
122
+ query('aside', style({ transform: 'translateX(0)' }), {
123
+ optional: true,
124
+ }),
125
+ group([
126
+ query('aside', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(100%)' })), { optional: true }),
127
+ query('.backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '0' })), { optional: true }),
128
+ ]),
129
+ ]),
130
+ ]),
131
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
107
132
  }
108
133
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NggModalComponent, decorators: [{
109
134
  type: Component,
110
- args: [{ selector: 'ngg-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <div class=\"gds-dialog-wrapper\">\n <aside\n data-testid=\"modal\"\n *ngSwitchCase=\"'slideout'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main\n data-testid=\"modal\"\n *ngSwitchCase=\"'takeover'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section\n data-testid=\"modal\"\n *ngSwitchDefault\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header\n *ngIf=\"!modalHeaderContent; else headerContentTemplate\"\n ngg-modal-header\n data-testid=\"modal-header\"\n [header]=\"header\"\n (closed)=\"this.handleCloseClick($event)\"\n ></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer\n *ngIf=\"!modalFooterContent; else footerContentTemplate\"\n ngg-modal-footer\n data-testid=\"modal-footer\"\n [dismissLabel]=\"dismissLabel\"\n [confirmLabel]=\"confirmLabel\"\n (dismiss)=\"this.handleDismiss($event)\"\n (confirm)=\"this.handleConfirm($event)\"\n ></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div\n #backdrop\n data-testid=\"modal-backdrop\"\n class=\"backdrop entered\"\n (click)=\"this.handleBackdropClick($event)\"\n [attr.aria-hidden]=\"true\"\n ></div>\n </div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] }]
135
+ args: [{ selector: 'ngg-modal', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
136
+ trigger('modalAnimation', [
137
+ transition(':enter', [
138
+ query('aside', style({ transform: 'translateX(100%)' }), {
139
+ optional: true,
140
+ }),
141
+ query('.backdrop, [role=dialog]', style({ opacity: '0' }), {
142
+ optional: true,
143
+ }),
144
+ group([
145
+ query('aside', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(0)' })), { optional: true }),
146
+ query('.backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '1' })), { optional: true }),
147
+ ]),
148
+ ]),
149
+ transition(':leave', [
150
+ query('aside', style({ transform: 'translateX(0)' }), {
151
+ optional: true,
152
+ }),
153
+ group([
154
+ query('aside', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(100%)' })), { optional: true }),
155
+ query('.backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '0' })), { optional: true }),
156
+ ]),
157
+ ]),
158
+ ]),
159
+ ], template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <div class=\"gds-dialog-wrapper\" [@modalAnimation]>\n <aside\n data-testid=\"modal\"\n *ngSwitchCase=\"'slideout'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main\n data-testid=\"modal\"\n *ngSwitchCase=\"'takeover'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section\n data-testid=\"modal\"\n *ngSwitchDefault\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header\n *ngIf=\"!modalHeaderContent; else headerContentTemplate\"\n ngg-modal-header\n data-testid=\"modal-header\"\n [header]=\"header\"\n (closed)=\"this.handleCloseClick($event)\"\n ></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer\n *ngIf=\"!modalFooterContent; else footerContentTemplate\"\n ngg-modal-footer\n data-testid=\"modal-footer\"\n [dismissLabel]=\"dismissLabel\"\n [confirmLabel]=\"confirmLabel\"\n (dismiss)=\"this.handleDismiss($event)\"\n (confirm)=\"this.handleConfirm($event)\"\n ></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div\n #backdrop\n data-testid=\"modal-backdrop\"\n class=\"backdrop entered\"\n (click)=\"this.handleBackdropClick($event)\"\n [attr.aria-hidden]=\"true\"\n ></div>\n </div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] }]
111
160
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ConfigurableFocusTrapFactory }]; }, propDecorators: { modalType: [{
112
161
  type: Input
113
162
  }], header: [{
@@ -255,4 +304,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
255
304
  }], confirm: [{
256
305
  type: Output
257
306
  }] } });
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBRXRCLE9BQU8sRUFFTCw0QkFBNEIsR0FDN0IsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTs7OztBQVFsRSxNQUFNLE9BQU8saUJBQWlCO0lBUzVCLElBQW9CLFNBQVM7UUFDM0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFBO0lBQ3hCLENBQUM7SUFDRCxJQUFXLFNBQVMsQ0FBQyxLQUEwQjtRQUM3QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQTtRQUV2QixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO2FBQ3ZCO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELElBQ1csTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUNyQixDQUFDO0lB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O2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTW9kYWxUeXBlLCBTaXplIH0gZnJvbSAnQHNlYmdyb3VwL2V4dHJhY3QnXG5pbXBvcnQge1xuICBDb25maWd1cmFibGVGb2N1c1RyYXAsXG4gIENvbmZpZ3VyYWJsZUZvY3VzVHJhcEZhY3RvcnksXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5J1xuaW1wb3J0IHsgZGlzYWJsZUJvZHlTY3JvbGwsIGVuYWJsZUJvZHlTY3JvbGwgfSBmcm9tICdib2R5LXNjcm9sbC1sb2NrJ1xuaW1wb3J0IHsgTmdnTW9kYWxIZWFkZXJEaXJlY3RpdmUgfSBmcm9tICcuL21vZGFsLWhlYWRlci5kaXJlY3RpdmUnXG5pbXBvcnQgeyBOZ2dNb2RhbEZvb3RlckRpcmVjdGl2ZSB9IGZyb20gJy4vbW9kYWwtZm9vdGVyLmRpcmVjdGl2ZSdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdnLW1vZGFsJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5nZ01vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xuICBASW5wdXQoKSBwdWJsaWMgbW9kYWxUeXBlPzogTW9kYWxUeXBlXG4gIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXI/OiBzdHJpbmdcbiAgQElucHV0KCkgcHVibGljIGNvbmZpcm1MYWJlbD86IHN0cmluZ1xuICBASW5wdXQoKSBwdWJsaWMgZGlzbWlzc0xhYmVsPzogc3RyaW5nXG4gIEBJbnB1dCgpIHB1YmxpYyBzaXplPzogU2l6ZVxuICBASW5wdXQoKSBwdWJsaWMgaGlkZUhlYWRlcj86IGJvb2xlYW5cbiAgQElucHV0KCkgcHVibGljIGhpZGVGb290ZXI/OiBib29sZWFuXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlQm9keVNjcm9sbD86IGJvb2xlYW4gPSB0cnVlXG4gIEBJbnB1dCgpIHB1YmxpYyBnZXQgdHJhcEZvY3VzKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl90cmFwRm9jdXNcbiAgfVxuICBwdWJsaWMgc2V0IHRyYXBGb2N1cyh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3RyYXBGb2N1cyA9IHZhbHVlXG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLl9pc09wZW4pIHtcbiAgICAgICAgdGhpcy5lbmFibGVGb2N1c1RyYXAoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc2FibGVGb2N1c1RyYXAoKVxuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgaXNPcGVuKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pc09wZW5cbiAgfVxuICBwdWJsaWMgc2V0IGlzT3Blbih2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2lzT3BlbiA9IHZhbHVlXG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnRyYXBGb2N1cykge1xuICAgICAgICB0aGlzLmVuYWJsZUZvY3VzVHJhcCgpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVCb2R5U2Nyb2xsKSB7XG4gICAgICAgIGRpc2FibGVCb2R5U2Nyb2xsKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICBhbGxvd1RvdWNoTW92ZTogKGVsKSA9PiB7XG4gICAgICAgICAgICAvLyBBbGxvdyB0b3VjaG1vdmUgZm9yIGVsZW1lbnRzIGluc2lkZSBtb2RhbCwgaXRzIHJlcXVpcmVkIGZvciBzY3JvbGwgdG8gd29yayBvbiBpT1MgZGV2aWNlc1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZWwpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNhYmxlRm9jdXNUcmFwKClcbiAgICAgIGlmICh0aGlzLmRpc2FibGVCb2R5U2Nyb2xsKSB7XG4gICAgICAgIGVuYWJsZUJvZHlTY3JvbGwodGhpcy5yZWYubmF0aXZlRWxlbWVudClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAT3V0cHV0KCkgcHVibGljIGlzT3BlbkNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KClcbiAgQE91dHB1dCgpIHB1YmxpYyBjbG9zZWQ6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpXG4gIEBPdXRwdXQoKSBwdWJsaWMgY29uZmlybTogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KClcbiAgQE91dHB1dCgpIHB1YmxpYyBkaXNtaXNzOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mub3BlbicpIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLmlzT3BlblxuICB9XG4gIEBWaWV3Q2hpbGQoJ2JhY2tkcm9wJykgcHJpdmF0ZSBiYWNrZHJvcFJlZj86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD5cbiAgQENvbnRlbnRDaGlsZChOZ2dNb2RhbEhlYWRlckRpcmVjdGl2ZSlcbiAgcHVibGljIG1vZGFsSGVhZGVyQ29udGVudD86IE5nZ01vZGFsSGVhZGVyRGlyZWN0aXZlXG4gIEBDb250ZW50Q2hpbGQoTmdnTW9kYWxGb290ZXJEaXJlY3RpdmUpXG4gIHB1YmxpYyBtb2RhbEZvb3RlckNvbnRlbnQ/OiBOZ2dNb2RhbEZvb3RlckRpcmVjdGl2ZVxuICBwcml2YXRlIF9pc09wZW4/OiBib29sZWFuXG4gIHByaXZhdGUgX3RyYXBGb2N1cz86IGJvb2xlYW5cbiAgcHJpdmF0ZSBjb25maWd1cmFibGVGb2N1c1RyYXA6IENvbmZpZ3VyYWJsZUZvY3VzVHJhcFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIGNvbmZpZ3VyYWJsZUZvY3VzVHJhcEZhY3Rvcnk6IENvbmZpZ3VyYWJsZUZvY3VzVHJhcEZhY3RvcnksXG4gICkge1xuICAgIHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwID0gdGhpcy5jb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZShcbiAgICAgIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgKVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzT3BlbiAmJiB0aGlzLnRyYXBGb2N1cykgdGhpcy5lbmFibGVGb2N1c1RyYXAoKVxuICAgIGVsc2UgdGhpcy5kaXNhYmxlRm9jdXNUcmFwKClcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDbG9zZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5jbG9zZU1vZGFsKGV2ZW50KVxuICB9XG5cbiAgcHVibGljIGhhbmRsZUJhY2tkcm9wQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09IHRoaXMuYmFja2Ryb3BSZWY/Lm5hdGl2ZUVsZW1lbnQpIHRoaXMuY2xvc2VNb2RhbChldmVudClcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVEaXNtaXNzKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5kaXNtaXNzLmVtaXQoZXZlbnQpXG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQ29uZmlybShldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY29uZmlybS5lbWl0KGV2ZW50KVxuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZU1vZGFsKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNsb3NlZC5lbWl0KGV2ZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlXG4gICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlRm9jdXNUcmFwKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcCkge1xuICAgICAgdGhpcy5jb25maWd1cmFibGVGb2N1c1RyYXAuZW5hYmxlZCA9IHRydWVcbiAgICAgIHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZUZvY3VzVHJhcCgpIHtcbiAgICBpZiAodGhpcy5jb25maWd1cmFibGVGb2N1c1RyYXApIHtcbiAgICAgIHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwLmVuYWJsZWQgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwPy5kZXN0cm95KClcbiAgICBlbmFibGVCb2R5U2Nyb2xsKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpXG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW25nZy1tb2RhbC1oZWFkZXJdJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aDMgZGF0YS10ZXN0aWQ9XCJtb2RhbC1oZWFkZXItdGV4dFwiPnt7IGhlYWRlciB9fTwvaDM+XG4gICAgPGJ1dHRvblxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1jbG9zZS1idXR0b25cIlxuICAgICAgY2xhc3M9XCJjbG9zZVwiXG4gICAgICAoY2xpY2spPVwidGhpcy5oYW5kbGVDbG9zZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XG4gICAgICA8aT48L2k+XG4gICAgPC9idXR0b24+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIE5nZ01vZGFsSGVhZGVyQ29tcG9uZW50IHtcbiAgQElucHV0KCkgaGVhZGVyPzogc3RyaW5nXG4gIEBPdXRwdXQoKSBjbG9zZWQ6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKVxuXG4gIGhhbmRsZUNsb3NlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5jbG9zZWQuZW1pdChldmVudClcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbbmdnLW1vZGFsLWJvZHldJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGU6IGA8bmctY29udGVudD48L25nLWNvbnRlbnQ+YCxcbn0pXG5leHBvcnQgY2xhc3MgTmdnTW9kYWxCb2R5Q29tcG9uZW50IHt9XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tuZ2ctbW9kYWwtZm9vdGVyXScsXG4gIHN0eWxlVXJsczogWycuL21vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGJ1dHRvblxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1kaXNtaXNzLWJ1dHRvblwiXG4gICAgICAqbmdJZj1cImRpc21pc3NMYWJlbFwiXG4gICAgICBjbGFzcz1cInNlY29uZGFyeVwiXG4gICAgICAoY2xpY2spPVwidGhpcy5oYW5kbGVEaXNtaXNzKCRldmVudClcIlxuICAgID5cbiAgICAgIHt7IGRpc21pc3NMYWJlbCB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtY29uZmlybS1idXR0b25cIlxuICAgICAgKm5nSWY9XCJjb25maXJtTGFiZWxcIlxuICAgICAgY2xhc3M9XCJwcmltYXJ5XCJcbiAgICAgIChjbGljayk9XCJ0aGlzLmhhbmRsZUNvbmZpcm0oJGV2ZW50KVwiXG4gICAgPlxuICAgICAge3sgY29uZmlybUxhYmVsIH19XG4gICAgPC9idXR0b24+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIE5nZ01vZGFsRm9vdGVyQ29tcG9uZW50IHtcbiAgQElucHV0KCkgZGlzbWlzc0xhYmVsPzogc3RyaW5nXG4gIEBJbnB1dCgpIGNvbmZpcm1MYWJlbD86IHN0cmluZ1xuICBAT3V0cHV0KCkgZGlzbWlzczogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBPdXRwdXQoKSBjb25maXJtOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICBoYW5kbGVEaXNtaXNzKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5kaXNtaXNzLmVtaXQoZXZlbnQpXG4gIH1cblxuICBoYW5kbGVDb25maXJtKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5jb25maXJtLmVtaXQoZXZlbnQpXG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJpc09wZW5cIiBbbmdTd2l0Y2hdPVwibW9kYWxUeXBlXCI+XG4gIDxkaXYgY2xhc3M9XCJnZHMtZGlhbG9nLXdyYXBwZXJcIj5cbiAgICA8YXNpZGVcbiAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWxcIlxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIidzbGlkZW91dCdcIlxuICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICBbY2xhc3Muc21hbGxdPVwic2l6ZSA9PT0gJ3NtJ1wiXG4gICAgICBbY2xhc3MubWVkaXVtXT1cInNpemUgPT09ICdtZCdcIlxuICAgICAgW2NsYXNzLmxhcmdlXT1cInNpemUgPT09ICdsZydcIlxuICAgICAgW2NsYXNzLmVudGVyZWRdPVwiaXNPcGVuXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9hc2lkZT5cbiAgICA8bWFpblxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiXG4gICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3Rha2VvdmVyJ1wiXG4gICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgIFtjbGFzcy5lbnRlcmVkXT1cImlzT3BlblwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbWFpbj5cbiAgICA8c2VjdGlvblxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiXG4gICAgICAqbmdTd2l0Y2hEZWZhdWx0XG4gICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgIGFyaWEtbW9kYWw9XCJ0cnVlXCJcbiAgICAgIFtjbGFzcy5zbWFsbF09XCJzaXplID09PSAnc20nXCJcbiAgICAgIFtjbGFzcy5tZWRpdW1dPVwic2l6ZSA9PT0gJ21kJ1wiXG4gICAgICBbY2xhc3MubGFyZ2VdPVwic2l6ZSA9PT0gJ2xnJ1wiXG4gICAgICBbY2xhc3MuZW50ZXJlZF09XCJpc09wZW5cIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3NlY3Rpb24+XG4gICAgPG5nLXRlbXBsYXRlICNjb250ZW50VGVtcGxhdGU+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhpZGVIZWFkZXJcIj5cbiAgICAgICAgPGhlYWRlclxuICAgICAgICAgICpuZ0lmPVwiIW1vZGFsSGVhZGVyQ29udGVudDsgZWxzZSBoZWFkZXJDb250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgIG5nZy1tb2RhbC1oZWFkZXJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLWhlYWRlclwiXG4gICAgICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxuICAgICAgICAgIChjbG9zZWQpPVwidGhpcy5oYW5kbGVDbG9zZUNsaWNrKCRldmVudClcIlxuICAgICAgICA+PC9oZWFkZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgbmdnLW1vZGFsLWJvZHkgZGF0YS10ZXN0aWQ9XCJtb2RhbC1ib2R5XCIgY2xhc3M9XCJib2R5XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5Q29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZUZvb3RlciAmJiAoZGlzbWlzc0xhYmVsIHx8IGNvbmZpcm1MYWJlbClcIj5cbiAgICAgICAgPGZvb3RlclxuICAgICAgICAgICpuZ0lmPVwiIW1vZGFsRm9vdGVyQ29udGVudDsgZWxzZSBmb290ZXJDb250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgIG5nZy1tb2RhbC1mb290ZXJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLWZvb3RlclwiXG4gICAgICAgICAgW2Rpc21pc3NMYWJlbF09XCJkaXNtaXNzTGFiZWxcIlxuICAgICAgICAgIFtjb25maXJtTGFiZWxdPVwiY29uZmlybUxhYmVsXCJcbiAgICAgICAgICAoZGlzbWlzcyk9XCJ0aGlzLmhhbmRsZURpc21pc3MoJGV2ZW50KVwiXG4gICAgICAgICAgKGNvbmZpcm0pPVwidGhpcy5oYW5kbGVDb25maXJtKCRldmVudClcIlxuICAgICAgICA+PC9mb290ZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyQ29udGVudFRlbXBsYXRlPlxuICAgICAgPGhlYWRlciBkYXRhLXRlc3RpZD1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmdnTW9kYWxIZWFkZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9oZWFkZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2JvZHlDb250ZW50VGVtcGxhdGU+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2Zvb3RlckNvbnRlbnRUZW1wbGF0ZT5cbiAgICAgIDxmb290ZXIgZGF0YS10ZXN0aWQ9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25nZ01vZGFsRm9vdGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZm9vdGVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGRpdlxuICAgICAgI2JhY2tkcm9wXG4gICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLWJhY2tkcm9wXCJcbiAgICAgIGNsYXNzPVwiYmFja2Ryb3AgZW50ZXJlZFwiXG4gICAgICAoY2xpY2spPVwidGhpcy5oYW5kbGVCYWNrZHJvcENsaWNrKCRldmVudClcIlxuICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiXG4gICAgPjwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvbW9kYWwvbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFDTCxPQUFPLEVBQ1AsS0FBSyxFQUNMLEtBQUssRUFDTCxPQUFPLEVBQ1AsVUFBVSxFQUNWLEtBQUssR0FDTixNQUFNLHFCQUFxQixDQUFBO0FBRTVCLE9BQU8sRUFFTCw0QkFBNEIsR0FDN0IsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTs7OztBQTZEbEUsTUFBTSxPQUFPLGlCQUFpQjtJQVM1QixJQUFvQixTQUFTO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQTtJQUN4QixDQUFDO0lBQ0QsSUFBVyxTQUFTLENBQUMsS0FBMEI7UUFDN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7UUFFdkIsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTthQUN2QjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtTQUN4QjtJQUNILENBQUM7SUFFRCxJQUNXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDckIsQ0FBQztJQUNELElBQVcsTUFBTSxDQUFDLEtBQTBCO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO1FBRXBCLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNsQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7YUFDdkI7WUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDMUIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUU7b0JBQ3hDLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO3dCQUNyQiw0RkFBNEY7d0JBQzVGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO29CQUM1QyxDQUFDO2lCQUNGLENBQUMsQ0FBQTthQUNIO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1lBQ3ZCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUMxQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFBO2FBQ3pDO1NBQ0Y7SUFDSCxDQUFDO0lBV0QsSUFBK0IsSUFBSTtRQUNqQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUE7SUFDcEIsQ0FBQztJQVVELFlBQ1UsR0FBNEIsRUFDNUIsNEJBQTBEO1FBRDFELFFBQUcsR0FBSCxHQUFHLENBQXlCO1FBQzVCLGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBOEI7UUFuRXBELHNCQUFpQixHQUFhLElBQUksQ0FBQTtRQTRDakMsaUJBQVksR0FDM0IsSUFBSSxZQUFZLEVBQVcsQ0FBQTtRQUNaLFdBQU0sR0FDckIsSUFBSSxZQUFZLEVBQWMsQ0FBQTtRQUNmLFlBQU8sR0FDdEIsSUFBSSxZQUFZLEVBQWMsQ0FBQTtRQUNmLFlBQU8sR0FDdEIsSUFBSSxZQUFZLEVBQWMsQ0FBQTtRQWtCOUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLENBQ25FLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUN2QixDQUFBO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7O1lBQ3JELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO0lBQzlCLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxLQUFpQjtRQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxLQUFpQjtRQUMxQyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhO1lBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM3RSxDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQWlCO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzFCLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBaUI7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDMUIsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFpQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDeEI7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUNwQztJQUNILENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzlCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO1lBQ3pDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyw0QkFBNEIsRUFBRSxDQUFBO1NBQzFEO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM5QixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtTQUMzQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxDQUFBO1FBQ3JDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDMUMsQ0FBQzsrR0FoSVUsaUJBQWlCO21HQUFqQixpQkFBaUIsaWdCQWlFZCx1QkFBdUIscUZBRXZCLHVCQUF1Qix5SkM1SnZDLGt3RkFrRkEscXRDRDBKYSx1QkFBdUIsK0lBZXZCLHFCQUFxQixvR0F5QnJCLHVCQUF1QixnSUFqUHRCO1lBQ1YsT0FBTyxDQUFDLGdCQUFnQixFQUFFO2dCQUN4QixVQUFVLENBQUMsUUFBUSxFQUFFO29CQUNuQixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQUU7d0JBQ3ZELFFBQVEsRUFBRSxJQUFJO3FCQUNmLENBQUM7b0JBQ0YsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO3dCQUN6RCxRQUFRLEVBQUUsSUFBSTtxQkFDZixDQUFDO29CQUNGLEtBQUssQ0FBQzt3QkFDSixLQUFLLENBQ0gsT0FBTyxFQUNQLE9BQU8sQ0FDTCxzQ0FBc0MsRUFDdEMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQ3RDLEVBQ0QsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQ25CO3dCQUNELEtBQUssQ0FDSCwwQkFBMEIsRUFDMUIsT0FBTyxDQUNMLHNDQUFzQyxFQUN0QyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FDeEIsRUFDRCxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FDbkI7cUJBQ0YsQ0FBQztpQkFDSCxDQUFDO2dCQUNGLFVBQVUsQ0FBQyxRQUFRLEVBQUU7b0JBQ25CLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUU7d0JBQ3BELFFBQVEsRUFBRSxJQUFJO3FCQUNmLENBQUM7b0JBQ0YsS0FBSyxDQUFDO3dCQUNKLEtBQUssQ0FDSCxPQUFPLEVBQ1AsT0FBTyxDQUNMLHNDQUFzQyxFQUN0QyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUN6QyxFQUNELEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUNuQjt3QkFDRCxLQUFLLENBQ0gsMEJBQTBCLEVBQzFCLE9BQU8sQ0FDTCxzQ0FBc0MsRUFDdEMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQ3hCLEVBQ0QsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQ25CO3FCQUNGLENBQUM7aUJBQ0gsQ0FBQzthQUNILENBQUM7U0FDSDs7NEZBRVUsaUJBQWlCO2tCQTNEN0IsU0FBUzsrQkFDRSxXQUFXLG1CQUdKLHVCQUF1QixDQUFDLE1BQU0sY0FDbkM7d0JBQ1YsT0FBTyxDQUFDLGdCQUFnQixFQUFFOzRCQUN4QixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQUU7b0NBQ3ZELFFBQVEsRUFBRSxJQUFJO2lDQUNmLENBQUM7Z0NBQ0YsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO29DQUN6RCxRQUFRLEVBQUUsSUFBSTtpQ0FDZixDQUFDO2dDQUNGLEtBQUssQ0FBQztvQ0FDSixLQUFLLENBQ0gsT0FBTyxFQUNQLE9BQU8sQ0FDTCxzQ0FBc0MsRUFDdEMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQ3RDLEVBQ0QsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQ25CO29DQUNELEtBQUssQ0FDSCwwQkFBMEIsRUFDMUIsT0FBTyxDQUNMLHNDQUFzQyxFQUN0QyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FDeEIsRUFDRCxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FDbkI7aUNBQ0YsQ0FBQzs2QkFDSCxDQUFDOzRCQUNGLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ25CLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUU7b0NBQ3BELFFBQVEsRUFBRSxJQUFJO2lDQUNmLENBQUM7Z0NBQ0YsS0FBSyxDQUFDO29DQUNKLEtBQUssQ0FDSCxPQUFPLEVBQ1AsT0FBTyxDQUNMLHNDQUFzQyxFQUN0QyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUN6QyxFQUNELEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUNuQjtvQ0FDRCxLQUFLLENBQ0gsMEJBQTBCLEVBQzFCLE9BQU8sQ0FDTCxzQ0FBc0MsRUFDdEMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQ3hCLEVBQ0QsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQ25CO2lDQUNGLENBQUM7NkJBQ0gsQ0FBQzt5QkFDSCxDQUFDO3FCQUNIOzRJQUdlLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUNjLFNBQVM7c0JBQTVCLEtBQUs7Z0JBZ0JLLE1BQU07c0JBRGhCLEtBQUs7Z0JBNEJXLFlBQVk7c0JBQTVCLE1BQU07Z0JBRVUsTUFBTTtzQkFBdEIsTUFBTTtnQkFFVSxPQUFPO3NCQUF2QixNQUFNO2dCQUVVLE9BQU87c0JBQXZCLE1BQU07Z0JBR3dCLElBQUk7c0JBQWxDLFdBQVc7dUJBQUMsWUFBWTtnQkFHTSxXQUFXO3NCQUF6QyxTQUFTO3VCQUFDLFVBQVU7Z0JBRWQsa0JBQWtCO3NCQUR4QixZQUFZO3VCQUFDLHVCQUF1QjtnQkFHOUIsa0JBQWtCO3NCQUR4QixZQUFZO3VCQUFDLHVCQUF1Qjs7QUFnRnZDLE1BQU0sT0FBTyx1QkFBdUI7SUFoQnBDO1FBa0JZLFdBQU0sR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQTtLQUs1RTtJQUhDLFdBQVcsQ0FBQyxLQUFpQjtRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QixDQUFDOytHQU5VLHVCQUF1QjttR0FBdkIsdUJBQXVCLHVIQVp4Qjs7Ozs7Ozs7OztHQVVUOzs0RkFFVSx1QkFBdUI7a0JBaEJuQyxTQUFTOytCQUVFLG9CQUFvQixZQUVwQjs7Ozs7Ozs7OztHQVVUOzhCQUdRLE1BQU07c0JBQWQsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07O0FBYVQsTUFBTSxPQUFPLHFCQUFxQjsrR0FBckIscUJBQXFCO21HQUFyQixxQkFBcUIsd0RBRnRCLDJCQUEyQjs7NEZBRTFCLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFFRSxrQkFBa0IsWUFFbEIsMkJBQTJCOztBQTJCdkMsTUFBTSxPQUFPLHVCQUF1QjtJQXZCcEM7UUEwQlksWUFBTyxHQUE2QixJQUFJLFlBQVksRUFBRSxDQUFBO1FBQ3RELFlBQU8sR0FBNkIsSUFBSSxZQUFZLEVBQUUsQ0FBQTtLQVNqRTtJQVBDLGFBQWEsQ0FBQyxLQUFpQjtRQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMxQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWlCO1FBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzFCLENBQUM7K0dBWlUsdUJBQXVCO21HQUF2Qix1QkFBdUIsdUxBbkJ4Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQlQ7OzRGQUVVLHVCQUF1QjtrQkF2Qm5DLFNBQVM7K0JBRUUsb0JBQW9CLFlBRXBCOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCVDs4QkFHUSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgdHJpZ2dlcixcbiAgcXVlcnksXG4gIHN0eWxlLFxuICBhbmltYXRlLFxuICB0cmFuc2l0aW9uLFxuICBncm91cCxcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucydcbmltcG9ydCB7IE1vZGFsVHlwZSwgU2l6ZSB9IGZyb20gJ0BzZWJncm91cC9leHRyYWN0J1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhYmxlRm9jdXNUcmFwLFxuICBDb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5LFxufSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSdcbmltcG9ydCB7IGRpc2FibGVCb2R5U2Nyb2xsLCBlbmFibGVCb2R5U2Nyb2xsIH0gZnJvbSAnYm9keS1zY3JvbGwtbG9jaydcbmltcG9ydCB7IE5nZ01vZGFsSGVhZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi9tb2RhbC1oZWFkZXIuZGlyZWN0aXZlJ1xuaW1wb3J0IHsgTmdnTW9kYWxGb290ZXJEaXJlY3RpdmUgfSBmcm9tICcuL21vZGFsLWZvb3Rlci5kaXJlY3RpdmUnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nZy1tb2RhbCcsXG4gIHN0eWxlVXJsczogWycuL21vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignbW9kYWxBbmltYXRpb24nLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgIHF1ZXJ5KCdhc2lkZScsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgxMDAlKScgfSksIHtcbiAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIHF1ZXJ5KCcuYmFja2Ryb3AsIFtyb2xlPWRpYWxvZ10nLCBzdHlsZSh7IG9wYWNpdHk6ICcwJyB9KSwge1xuICAgICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXAoW1xuICAgICAgICAgIHF1ZXJ5KFxuICAgICAgICAgICAgJ2FzaWRlJyxcbiAgICAgICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgICAgICczNTBtcyBjdWJpYy1iZXppZXIoMC4zMywgMSwgMC42OCwgMSknLFxuICAgICAgICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMCknIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHsgb3B0aW9uYWw6IHRydWUgfSxcbiAgICAgICAgICApLFxuICAgICAgICAgIHF1ZXJ5KFxuICAgICAgICAgICAgJy5iYWNrZHJvcCwgW3JvbGU9ZGlhbG9nXScsXG4gICAgICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICAgICAnMzUwbXMgY3ViaWMtYmV6aWVyKDAuMzMsIDEsIDAuNjgsIDEpJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAnMScgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgeyBvcHRpb25hbDogdHJ1ZSB9LFxuICAgICAgICAgICksXG4gICAgICAgIF0pLFxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgIHF1ZXJ5KCdhc2lkZScsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScgfSksIHtcbiAgICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwKFtcbiAgICAgICAgICBxdWVyeShcbiAgICAgICAgICAgICdhc2lkZScsXG4gICAgICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICAgICAnMzUwbXMgY3ViaWMtYmV6aWVyKDAuMzMsIDEsIDAuNjgsIDEpJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMCUpJyB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB7IG9wdGlvbmFsOiB0cnVlIH0sXG4gICAgICAgICAgKSxcbiAgICAgICAgICBxdWVyeShcbiAgICAgICAgICAgICcuYmFja2Ryb3AsIFtyb2xlPWRpYWxvZ10nLFxuICAgICAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAgICAgJzM1MG1zIGN1YmljLWJlemllcigwLjMzLCAxLCAwLjY4LCAxKScsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogJzAnIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHsgb3B0aW9uYWw6IHRydWUgfSxcbiAgICAgICAgICApLFxuICAgICAgICBdKSxcbiAgICAgIF0pLFxuICAgIF0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ2dNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgQElucHV0KCkgcHVibGljIG1vZGFsVHlwZT86IE1vZGFsVHlwZVxuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyPzogc3RyaW5nXG4gIEBJbnB1dCgpIHB1YmxpYyBjb25maXJtTGFiZWw/OiBzdHJpbmdcbiAgQElucHV0KCkgcHVibGljIGRpc21pc3NMYWJlbD86IHN0cmluZ1xuICBASW5wdXQoKSBwdWJsaWMgc2l6ZT86IFNpemVcbiAgQElucHV0KCkgcHVibGljIGhpZGVIZWFkZXI/OiBib29sZWFuXG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlRm9vdGVyPzogYm9vbGVhblxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZUJvZHlTY3JvbGw/OiBib29sZWFuID0gdHJ1ZVxuICBASW5wdXQoKSBwdWJsaWMgZ2V0IHRyYXBGb2N1cygpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhcEZvY3VzXG4gIH1cbiAgcHVibGljIHNldCB0cmFwRm9jdXModmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90cmFwRm9jdXMgPSB2YWx1ZVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5faXNPcGVuKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlRm9jdXNUcmFwKClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNhYmxlRm9jdXNUcmFwKClcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGlzT3BlbigpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faXNPcGVuXG4gIH1cbiAgcHVibGljIHNldCBpc09wZW4odmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9pc09wZW4gPSB2YWx1ZVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcy50cmFwRm9jdXMpIHtcbiAgICAgICAgdGhpcy5lbmFibGVGb2N1c1RyYXAoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5kaXNhYmxlQm9keVNjcm9sbCkge1xuICAgICAgICBkaXNhYmxlQm9keVNjcm9sbCh0aGlzLnJlZi5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgICAgYWxsb3dUb3VjaE1vdmU6IChlbCkgPT4ge1xuICAgICAgICAgICAgLy8gQWxsb3cgdG91Y2htb3ZlIGZvciBlbGVtZW50cyBpbnNpZGUgbW9kYWwsIGl0cyByZXF1aXJlZCBmb3Igc2Nyb2xsIHRvIHdvcmsgb24gaU9TIGRldmljZXNcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGVsKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzYWJsZUZvY3VzVHJhcCgpXG4gICAgICBpZiAodGhpcy5kaXNhYmxlQm9keVNjcm9sbCkge1xuICAgICAgICBlbmFibGVCb2R5U2Nyb2xsKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBpc09wZW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xvc2VkOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKVxuICBAT3V0cHV0KCkgcHVibGljIGNvbmZpcm06IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpXG4gIEBPdXRwdXQoKSBwdWJsaWMgZGlzbWlzczogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KClcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm9wZW4nKSBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5pc09wZW5cbiAgfVxuICBAVmlld0NoaWxkKCdiYWNrZHJvcCcpIHByaXZhdGUgYmFja2Ryb3BSZWY/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+XG4gIEBDb250ZW50Q2hpbGQoTmdnTW9kYWxIZWFkZXJEaXJlY3RpdmUpXG4gIHB1YmxpYyBtb2RhbEhlYWRlckNvbnRlbnQ/OiBOZ2dNb2RhbEhlYWRlckRpcmVjdGl2ZVxuICBAQ29udGVudENoaWxkKE5nZ01vZGFsRm9vdGVyRGlyZWN0aXZlKVxuICBwdWJsaWMgbW9kYWxGb290ZXJDb250ZW50PzogTmdnTW9kYWxGb290ZXJEaXJlY3RpdmVcbiAgcHJpdmF0ZSBfaXNPcGVuPzogYm9vbGVhblxuICBwcml2YXRlIF90cmFwRm9jdXM/OiBib29sZWFuXG4gIHByaXZhdGUgY29uZmlndXJhYmxlRm9jdXNUcmFwOiBDb25maWd1cmFibGVGb2N1c1RyYXBcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBjb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5OiBDb25maWd1cmFibGVGb2N1c1RyYXBGYWN0b3J5LFxuICApIHtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcCA9IHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUoXG4gICAgICB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgIClcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc09wZW4gJiYgdGhpcy50cmFwRm9jdXMpIHRoaXMuZW5hYmxlRm9jdXNUcmFwKClcbiAgICBlbHNlIHRoaXMuZGlzYWJsZUZvY3VzVHJhcCgpXG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQ2xvc2VDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY2xvc2VNb2RhbChldmVudClcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVCYWNrZHJvcENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLmJhY2tkcm9wUmVmPy5uYXRpdmVFbGVtZW50KSB0aGlzLmNsb3NlTW9kYWwoZXZlbnQpXG4gIH1cblxuICBwdWJsaWMgaGFuZGxlRGlzbWlzcyhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuZGlzbWlzcy5lbWl0KGV2ZW50KVxuICB9XG5cbiAgcHVibGljIGhhbmRsZUNvbmZpcm0oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmNvbmZpcm0uZW1pdChldmVudClcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VNb2RhbChldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmNsb3NlZC5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jbG9zZWQuZW1pdChldmVudClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZVxuICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh0aGlzLmlzT3BlbilcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZUZvY3VzVHJhcCgpIHtcbiAgICBpZiAodGhpcy5jb25maWd1cmFibGVGb2N1c1RyYXApIHtcbiAgICAgIHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwLmVuYWJsZWQgPSB0cnVlXG4gICAgICB0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVGb2N1c1RyYXAoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlndXJhYmxlRm9jdXNUcmFwKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcC5lbmFibGVkID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZUZvY3VzVHJhcD8uZGVzdHJveSgpXG4gICAgZW5hYmxlQm9keVNjcm9sbCh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KVxuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tuZ2ctbW9kYWwtaGVhZGVyXScsXG4gIHN0eWxlVXJsczogWycuL21vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGgzIGRhdGEtdGVzdGlkPVwibW9kYWwtaGVhZGVyLXRleHRcIj57eyBoZWFkZXIgfX08L2gzPlxuICAgIDxidXR0b25cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtY2xvc2UtYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiY2xvc2VcIlxuICAgICAgKGNsaWNrKT1cInRoaXMuaGFuZGxlQ2xvc2UoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuICAgICAgPGk+PC9pPlxuICAgIDwvYnV0dG9uPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBOZ2dNb2RhbEhlYWRlckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGhlYWRlcj86IHN0cmluZ1xuICBAT3V0cHV0KCkgY2xvc2VkOiBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KClcblxuICBoYW5kbGVDbG9zZShldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoZXZlbnQpXG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW25nZy1tb2RhbC1ib2R5XScsXG4gIHN0eWxlVXJsczogWycuL21vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXG59KVxuZXhwb3J0IGNsYXNzIE5nZ01vZGFsQm9keUNvbXBvbmVudCB7fVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbbmdnLW1vZGFsLWZvb3Rlcl0nLFxuICBzdHlsZVVybHM6IFsnLi9tb2RhbC5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxidXR0b25cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtZGlzbWlzcy1idXR0b25cIlxuICAgICAgKm5nSWY9XCJkaXNtaXNzTGFiZWxcIlxuICAgICAgY2xhc3M9XCJzZWNvbmRhcnlcIlxuICAgICAgKGNsaWNrKT1cInRoaXMuaGFuZGxlRGlzbWlzcygkZXZlbnQpXCJcbiAgICA+XG4gICAgICB7eyBkaXNtaXNzTGFiZWwgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLWNvbmZpcm0tYnV0dG9uXCJcbiAgICAgICpuZ0lmPVwiY29uZmlybUxhYmVsXCJcbiAgICAgIGNsYXNzPVwicHJpbWFyeVwiXG4gICAgICAoY2xpY2spPVwidGhpcy5oYW5kbGVDb25maXJtKCRldmVudClcIlxuICAgID5cbiAgICAgIHt7IGNvbmZpcm1MYWJlbCB9fVxuICAgIDwvYnV0dG9uPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBOZ2dNb2RhbEZvb3RlckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGRpc21pc3NMYWJlbD86IHN0cmluZ1xuICBASW5wdXQoKSBjb25maXJtTGFiZWw/OiBzdHJpbmdcbiAgQE91dHB1dCgpIGRpc21pc3M6IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgY29uZmlybTogRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgaGFuZGxlRGlzbWlzcyhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuZGlzbWlzcy5lbWl0KGV2ZW50KVxuICB9XG5cbiAgaGFuZGxlQ29uZmlybShldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY29uZmlybS5lbWl0KGV2ZW50KVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiaXNPcGVuXCIgW25nU3dpdGNoXT1cIm1vZGFsVHlwZVwiPlxuICA8ZGl2IGNsYXNzPVwiZ2RzLWRpYWxvZy13cmFwcGVyXCIgW0Btb2RhbEFuaW1hdGlvbl0+XG4gICAgPGFzaWRlXG4gICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsXCJcbiAgICAgICpuZ1N3aXRjaENhc2U9XCInc2xpZGVvdXQnXCJcbiAgICAgIHJvbGU9XCJkaWFsb2dcIlxuICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgW2NsYXNzLnNtYWxsXT1cInNpemUgPT09ICdzbSdcIlxuICAgICAgW2NsYXNzLm1lZGl1bV09XCJzaXplID09PSAnbWQnXCJcbiAgICAgIFtjbGFzcy5sYXJnZV09XCJzaXplID09PSAnbGcnXCJcbiAgICAgIFtjbGFzcy5lbnRlcmVkXT1cImlzT3BlblwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvYXNpZGU+XG4gICAgPG1haW5cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWxcIlxuICAgICAgKm5nU3dpdGNoQ2FzZT1cIid0YWtlb3ZlcidcIlxuICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICBbY2xhc3MuZW50ZXJlZF09XCJpc09wZW5cIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L21haW4+XG4gICAgPHNlY3Rpb25cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWxcIlxuICAgICAgKm5nU3dpdGNoRGVmYXVsdFxuICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICBbY2xhc3Muc21hbGxdPVwic2l6ZSA9PT0gJ3NtJ1wiXG4gICAgICBbY2xhc3MubWVkaXVtXT1cInNpemUgPT09ICdtZCdcIlxuICAgICAgW2NsYXNzLmxhcmdlXT1cInNpemUgPT09ICdsZydcIlxuICAgICAgW2NsYXNzLmVudGVyZWRdPVwiaXNPcGVuXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9zZWN0aW9uPlxuICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudFRlbXBsYXRlPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoaWRlSGVhZGVyXCI+XG4gICAgICAgIDxoZWFkZXJcbiAgICAgICAgICAqbmdJZj1cIiFtb2RhbEhlYWRlckNvbnRlbnQ7IGVsc2UgaGVhZGVyQ29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICBuZ2ctbW9kYWwtaGVhZGVyXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1oZWFkZXJcIlxuICAgICAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgICAgICAoY2xvc2VkKT1cInRoaXMuaGFuZGxlQ2xvc2VDbGljaygkZXZlbnQpXCJcbiAgICAgICAgPjwvaGVhZGVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2IG5nZy1tb2RhbC1ib2R5IGRhdGEtdGVzdGlkPVwibW9kYWwtYm9keVwiIGNsYXNzPVwiYm9keVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYm9keUNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhpZGVGb290ZXIgJiYgKGRpc21pc3NMYWJlbCB8fCBjb25maXJtTGFiZWwpXCI+XG4gICAgICAgIDxmb290ZXJcbiAgICAgICAgICAqbmdJZj1cIiFtb2RhbEZvb3RlckNvbnRlbnQ7IGVsc2UgZm9vdGVyQ29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICBuZ2ctbW9kYWwtZm9vdGVyXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1mb290ZXJcIlxuICAgICAgICAgIFtkaXNtaXNzTGFiZWxdPVwiZGlzbWlzc0xhYmVsXCJcbiAgICAgICAgICBbY29uZmlybUxhYmVsXT1cImNvbmZpcm1MYWJlbFwiXG4gICAgICAgICAgKGRpc21pc3MpPVwidGhpcy5oYW5kbGVEaXNtaXNzKCRldmVudClcIlxuICAgICAgICAgIChjb25maXJtKT1cInRoaXMuaGFuZGxlQ29uZmlybSgkZXZlbnQpXCJcbiAgICAgICAgPjwvZm9vdGVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2hlYWRlckNvbnRlbnRUZW1wbGF0ZT5cbiAgICAgIDxoZWFkZXIgZGF0YS10ZXN0aWQ9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25nZ01vZGFsSGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvaGVhZGVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNib2R5Q29udGVudFRlbXBsYXRlPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNmb290ZXJDb250ZW50VGVtcGxhdGU+XG4gICAgICA8Zm9vdGVyIGRhdGEtdGVzdGlkPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltuZ2dNb2RhbEZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Zvb3Rlcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgICNiYWNrZHJvcFxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1iYWNrZHJvcFwiXG4gICAgICBjbGFzcz1cImJhY2tkcm9wIGVudGVyZWRcIlxuICAgICAgKGNsaWNrKT1cInRoaXMuaGFuZGxlQmFja2Ryb3BDbGljaygkZXZlbnQpXCJcbiAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cInRydWVcIlxuICAgID48L2Rpdj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -1,5 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Directive, EventEmitter, Component, ChangeDetectionStrategy, Input, Output, HostBinding, ViewChild, ContentChild, NgModule } from '@angular/core';
3
+ import { trigger, transition, query, style, group, animate } from '@angular/animations';
3
4
  import * as i1 from '@angular/cdk/a11y';
4
5
  import { A11yModule } from '@angular/cdk/a11y';
5
6
  import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';
@@ -131,11 +132,59 @@ class NggModalComponent {
131
132
  enableBodyScroll(this.ref.nativeElement);
132
133
  }
133
134
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NggModalComponent, deps: [{ token: i0.ElementRef }, { token: i1.ConfigurableFocusTrapFactory }], target: i0.ɵɵFactoryTarget.Component }); }
134
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NggModalComponent, selector: "ngg-modal", inputs: { modalType: "modalType", header: "header", confirmLabel: "confirmLabel", dismissLabel: "dismissLabel", size: "size", hideHeader: "hideHeader", hideFooter: "hideFooter", disableBodyScroll: "disableBodyScroll", trapFocus: "trapFocus", isOpen: "isOpen" }, outputs: { isOpenChange: "isOpenChange", closed: "closed", confirm: "confirm", dismiss: "dismiss" }, host: { properties: { "class.open": "this.open" } }, queries: [{ propertyName: "modalHeaderContent", first: true, predicate: NggModalHeaderDirective, descendants: true }, { propertyName: "modalFooterContent", first: true, predicate: NggModalFooterDirective, descendants: true }], viewQueries: [{ propertyName: "backdropRef", first: true, predicate: ["backdrop"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <div class=\"gds-dialog-wrapper\">\n <aside\n data-testid=\"modal\"\n *ngSwitchCase=\"'slideout'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main\n data-testid=\"modal\"\n *ngSwitchCase=\"'takeover'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section\n data-testid=\"modal\"\n *ngSwitchDefault\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header\n *ngIf=\"!modalHeaderContent; else headerContentTemplate\"\n ngg-modal-header\n data-testid=\"modal-header\"\n [header]=\"header\"\n (closed)=\"this.handleCloseClick($event)\"\n ></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer\n *ngIf=\"!modalFooterContent; else footerContentTemplate\"\n ngg-modal-footer\n data-testid=\"modal-footer\"\n [dismissLabel]=\"dismissLabel\"\n [confirmLabel]=\"confirmLabel\"\n (dismiss)=\"this.handleDismiss($event)\"\n (confirm)=\"this.handleConfirm($event)\"\n ></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div\n #backdrop\n data-testid=\"modal-backdrop\"\n class=\"backdrop entered\"\n (click)=\"this.handleBackdropClick($event)\"\n [attr.aria-hidden]=\"true\"\n ></div>\n </div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitch; }), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchCase; }), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchDefault; }), selector: "[ngSwitchDefault]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalHeaderComponent; }), selector: "[ngg-modal-header]", inputs: ["header"], outputs: ["closed"] }, { kind: "component", type: i0.forwardRef(function () { return NggModalBodyComponent; }), selector: "[ngg-modal-body]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalFooterComponent; }), selector: "[ngg-modal-footer]", inputs: ["dismissLabel", "confirmLabel"], outputs: ["dismiss", "confirm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
135
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NggModalComponent, selector: "ngg-modal", inputs: { modalType: "modalType", header: "header", confirmLabel: "confirmLabel", dismissLabel: "dismissLabel", size: "size", hideHeader: "hideHeader", hideFooter: "hideFooter", disableBodyScroll: "disableBodyScroll", trapFocus: "trapFocus", isOpen: "isOpen" }, outputs: { isOpenChange: "isOpenChange", closed: "closed", confirm: "confirm", dismiss: "dismiss" }, host: { properties: { "class.open": "this.open" } }, queries: [{ propertyName: "modalHeaderContent", first: true, predicate: NggModalHeaderDirective, descendants: true }, { propertyName: "modalFooterContent", first: true, predicate: NggModalFooterDirective, descendants: true }], viewQueries: [{ propertyName: "backdropRef", first: true, predicate: ["backdrop"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <div class=\"gds-dialog-wrapper\" [@modalAnimation]>\n <aside\n data-testid=\"modal\"\n *ngSwitchCase=\"'slideout'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main\n data-testid=\"modal\"\n *ngSwitchCase=\"'takeover'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section\n data-testid=\"modal\"\n *ngSwitchDefault\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header\n *ngIf=\"!modalHeaderContent; else headerContentTemplate\"\n ngg-modal-header\n data-testid=\"modal-header\"\n [header]=\"header\"\n (closed)=\"this.handleCloseClick($event)\"\n ></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer\n *ngIf=\"!modalFooterContent; else footerContentTemplate\"\n ngg-modal-footer\n data-testid=\"modal-footer\"\n [dismissLabel]=\"dismissLabel\"\n [confirmLabel]=\"confirmLabel\"\n (dismiss)=\"this.handleDismiss($event)\"\n (confirm)=\"this.handleConfirm($event)\"\n ></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div\n #backdrop\n data-testid=\"modal-backdrop\"\n class=\"backdrop entered\"\n (click)=\"this.handleBackdropClick($event)\"\n [attr.aria-hidden]=\"true\"\n ></div>\n </div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitch; }), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchCase; }), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgSwitchDefault; }), selector: "[ngSwitchDefault]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalHeaderComponent; }), selector: "[ngg-modal-header]", inputs: ["header"], outputs: ["closed"] }, { kind: "component", type: i0.forwardRef(function () { return NggModalBodyComponent; }), selector: "[ngg-modal-body]" }, { kind: "component", type: i0.forwardRef(function () { return NggModalFooterComponent; }), selector: "[ngg-modal-footer]", inputs: ["dismissLabel", "confirmLabel"], outputs: ["dismiss", "confirm"] }], animations: [
136
+ trigger('modalAnimation', [
137
+ transition(':enter', [
138
+ query('aside', style({ transform: 'translateX(100%)' }), {
139
+ optional: true,
140
+ }),
141
+ query('.backdrop, [role=dialog]', style({ opacity: '0' }), {
142
+ optional: true,
143
+ }),
144
+ group([
145
+ query('aside', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(0)' })), { optional: true }),
146
+ query('.backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '1' })), { optional: true }),
147
+ ]),
148
+ ]),
149
+ transition(':leave', [
150
+ query('aside', style({ transform: 'translateX(0)' }), {
151
+ optional: true,
152
+ }),
153
+ group([
154
+ query('aside', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(100%)' })), { optional: true }),
155
+ query('.backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '0' })), { optional: true }),
156
+ ]),
157
+ ]),
158
+ ]),
159
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
135
160
  }
136
161
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NggModalComponent, decorators: [{
137
162
  type: Component,
138
- args: [{ selector: 'ngg-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <div class=\"gds-dialog-wrapper\">\n <aside\n data-testid=\"modal\"\n *ngSwitchCase=\"'slideout'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main\n data-testid=\"modal\"\n *ngSwitchCase=\"'takeover'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section\n data-testid=\"modal\"\n *ngSwitchDefault\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header\n *ngIf=\"!modalHeaderContent; else headerContentTemplate\"\n ngg-modal-header\n data-testid=\"modal-header\"\n [header]=\"header\"\n (closed)=\"this.handleCloseClick($event)\"\n ></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer\n *ngIf=\"!modalFooterContent; else footerContentTemplate\"\n ngg-modal-footer\n data-testid=\"modal-footer\"\n [dismissLabel]=\"dismissLabel\"\n [confirmLabel]=\"confirmLabel\"\n (dismiss)=\"this.handleDismiss($event)\"\n (confirm)=\"this.handleConfirm($event)\"\n ></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div\n #backdrop\n data-testid=\"modal-backdrop\"\n class=\"backdrop entered\"\n (click)=\"this.handleBackdropClick($event)\"\n [attr.aria-hidden]=\"true\"\n ></div>\n </div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] }]
163
+ args: [{ selector: 'ngg-modal', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
164
+ trigger('modalAnimation', [
165
+ transition(':enter', [
166
+ query('aside', style({ transform: 'translateX(100%)' }), {
167
+ optional: true,
168
+ }),
169
+ query('.backdrop, [role=dialog]', style({ opacity: '0' }), {
170
+ optional: true,
171
+ }),
172
+ group([
173
+ query('aside', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(0)' })), { optional: true }),
174
+ query('.backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '1' })), { optional: true }),
175
+ ]),
176
+ ]),
177
+ transition(':leave', [
178
+ query('aside', style({ transform: 'translateX(0)' }), {
179
+ optional: true,
180
+ }),
181
+ group([
182
+ query('aside', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(100%)' })), { optional: true }),
183
+ query('.backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '0' })), { optional: true }),
184
+ ]),
185
+ ]),
186
+ ]),
187
+ ], template: "<ng-container *ngIf=\"isOpen\" [ngSwitch]=\"modalType\">\n <div class=\"gds-dialog-wrapper\" [@modalAnimation]>\n <aside\n data-testid=\"modal\"\n *ngSwitchCase=\"'slideout'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </aside>\n <main\n data-testid=\"modal\"\n *ngSwitchCase=\"'takeover'\"\n role=\"dialog\"\n aria-modal=\"true\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </main>\n <section\n data-testid=\"modal\"\n *ngSwitchDefault\n role=\"dialog\"\n aria-modal=\"true\"\n [class.small]=\"size === 'sm'\"\n [class.medium]=\"size === 'md'\"\n [class.large]=\"size === 'lg'\"\n [class.entered]=\"isOpen\"\n >\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </section>\n <ng-template #contentTemplate>\n <ng-container *ngIf=\"!hideHeader\">\n <header\n *ngIf=\"!modalHeaderContent; else headerContentTemplate\"\n ngg-modal-header\n data-testid=\"modal-header\"\n [header]=\"header\"\n (closed)=\"this.handleCloseClick($event)\"\n ></header>\n </ng-container>\n <div ngg-modal-body data-testid=\"modal-body\" class=\"body\">\n <ng-container *ngTemplateOutlet=\"bodyContentTemplate\"></ng-container>\n </div>\n <ng-container *ngIf=\"!hideFooter && (dismissLabel || confirmLabel)\">\n <footer\n *ngIf=\"!modalFooterContent; else footerContentTemplate\"\n ngg-modal-footer\n data-testid=\"modal-footer\"\n [dismissLabel]=\"dismissLabel\"\n [confirmLabel]=\"confirmLabel\"\n (dismiss)=\"this.handleDismiss($event)\"\n (confirm)=\"this.handleConfirm($event)\"\n ></footer>\n </ng-container>\n </ng-template>\n <ng-template #headerContentTemplate>\n <header data-testid=\"modal-header\">\n <ng-content select=\"[nggModalHeader]\"></ng-content>\n </header>\n </ng-template>\n <ng-template #bodyContentTemplate>\n <ng-content></ng-content>\n </ng-template>\n <ng-template #footerContentTemplate>\n <footer data-testid=\"modal-footer\">\n <ng-content select=\"[nggModalFooter]\"></ng-content>\n </footer>\n </ng-template>\n <div\n #backdrop\n data-testid=\"modal-backdrop\"\n class=\"backdrop entered\"\n (click)=\"this.handleBackdropClick($event)\"\n [attr.aria-hidden]=\"true\"\n ></div>\n </div>\n</ng-container>\n", styles: [":host.open{height:100vh;left:0;overflow:hidden;position:fixed;top:0;width:100%;z-index:var(--sg-z-index-modal)}:host.open>section[role=dialog]{left:50%;top:50%;transform:translate(-50%,-50%)}.body::-webkit-scrollbar{background-color:#f8f8f8;height:10px;width:10px}.body::-webkit-scrollbar-thumb{background-color:#cecece}.body::-webkit-scrollbar-track{background-color:#f8f8f8;box-shadow:inset 0 0 10px #00000040}\n"] }]
139
188
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.ConfigurableFocusTrapFactory }]; }, propDecorators: { modalType: [{
140
189
  type: Input
141
190
  }], header: [{