UNPKG

@dbg-riskit/angular-view

Version:

507 lines 48.3 kB
import { CommonModule, DatePipe, DecimalPipe } from '@angular/common'; import { ChangeDetectionStrategy, Component, Inject, Injectable, NgModule } from '@angular/core'; import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatBadgeModule } from '@angular/material/badge'; import { MatBottomSheetModule } from '@angular/material/bottom-sheet'; import { MatButtonModule } from '@angular/material/button'; import { MatButtonToggleModule } from '@angular/material/button-toggle'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatChipsModule } from '@angular/material/chips'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatDialogModule } from '@angular/material/dialog'; import { MatDividerModule } from '@angular/material/divider'; import { MatExpansionModule } from '@angular/material/expansion'; import { MatFormFieldModule } from '@angular/material/form-field'; import { MatGridListModule } from '@angular/material/grid-list'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatListModule } from '@angular/material/list'; import { MatMenuModule } from '@angular/material/menu'; import { MatPaginatorModule } from '@angular/material/paginator'; import { MatProgressBarModule } from '@angular/material/progress-bar'; import { MatProgressSpinnerModule, MatSpinner } from '@angular/material/progress-spinner'; import { MatRadioModule } from '@angular/material/radio'; import { MatSelectModule } from '@angular/material/select'; import { MatSidenavModule } from '@angular/material/sidenav'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { MatSliderModule } from '@angular/material/slider'; import { MatSnackBarModule } from '@angular/material/snack-bar'; import { MatSortModule } from '@angular/material/sort'; import { MatStepperModule } from '@angular/material/stepper'; import { MatTableModule } from '@angular/material/table'; import { MatTabsModule } from '@angular/material/tabs'; import { MatToolbarModule } from '@angular/material/toolbar'; import { MatTooltipModule } from '@angular/material/tooltip'; import { MatTreeModule } from '@angular/material/tree'; import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations'; import { RouterModule } from '@angular/router'; import { DATE_FORMAT } from '@dbg-riskit/angular-common'; import { LoggingModule } from '@dbg-riskit/angular-logging'; import { DialogService } from './dialog.service'; import { FlexComponent } from './flex.component'; import { FlexSpacerComponent } from './flex.spacer.component'; import { FooterLayoutDirective, HorizontalLayoutDirective, LayoutComponent, VerticalLayoutDirective, VerticalLayoutIconDirective, VerticalLayoutTitleDirective } from './layout.component'; import { LinkActiveDirective } from './link.active.directive'; import { LoaderComponent } from './loader.component'; import { MatchMedia } from './match.media'; import { COMPONENT_SELECTOR, MessageComponent } from './message.component'; import { MessageDialogComponent } from './message.dialog.component'; import { PercentPipe } from './percent.pipe'; import { ProgressLoaderComponent } from './progress.loader.component'; import { SubLinkDirective } from './sub.link.directive'; import { ToolbarComponent } from './toolbar.component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "@angular/material/card"; export class DateFormatter { constructor(format, datePipe) { this.format = format; this.datePipe = datePipe; } transform(value) { return this.datePipe.transform(value, this.format); } } DateFormatter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: DateFormatter, deps: [{ token: DATE_FORMAT }, { token: i1.DatePipe }], target: i0.ɵɵFactoryTarget.Injectable }); DateFormatter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: DateFormatter }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: DateFormatter, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [DATE_FORMAT] }] }, { type: i1.DatePipe }]; } }); export class CommonViewModulePrivate { } CommonViewModulePrivate.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: CommonViewModulePrivate, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); CommonViewModulePrivate.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: CommonViewModulePrivate, declarations: [ // Layout component LayoutComponent, VerticalLayoutDirective, VerticalLayoutTitleDirective, VerticalLayoutIconDirective, HorizontalLayoutDirective, FooterLayoutDirective, // Dialogs MessageDialogComponent, LoaderComponent, ProgressLoaderComponent, // Pipes PercentPipe, // Flex components FlexComponent, FlexSpacerComponent, // Router links and sublinks LinkActiveDirective, SubLinkDirective, // Toolbar ToolbarComponent], imports: [ // Angular modules CommonModule, RouterModule, // Our modules LoggingModule, // Material modules MatAutocompleteModule, MatBadgeModule, MatBottomSheetModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatDialogModule, MatDividerModule, MatExpansionModule, MatFormFieldModule, MatGridListModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatPaginatorModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatSelectModule, MatSidenavModule, MatSliderModule, MatSlideToggleModule, MatSnackBarModule, MatSortModule, MatStepperModule, MatTableModule, MatTabsModule, MatToolbarModule, MatTooltipModule, MatTreeModule], exports: [ // Material modules MatAutocompleteModule, MatBadgeModule, MatBottomSheetModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatDialogModule, MatDividerModule, MatExpansionModule, MatFormFieldModule, MatGridListModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatPaginatorModule, MatProgressBarModule, MatRadioModule, MatSelectModule, MatSidenavModule, MatSliderModule, MatSlideToggleModule, MatSnackBarModule, MatSortModule, MatStepperModule, MatTableModule, MatTabsModule, MatToolbarModule, MatTooltipModule, MatTreeModule, // Layout component LayoutComponent, VerticalLayoutDirective, VerticalLayoutTitleDirective, VerticalLayoutIconDirective, HorizontalLayoutDirective, FooterLayoutDirective, // Dialogs MessageDialogComponent, LoaderComponent, ProgressLoaderComponent, // Pipes PercentPipe, // Flex components FlexComponent, FlexSpacerComponent, // Router links and sublinks LinkActiveDirective, SubLinkDirective, // Toolbar ToolbarComponent] }); CommonViewModulePrivate.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: CommonViewModulePrivate, providers: [ // Pipes and formatters so we can inject these DateFormatter, DecimalPipe, DatePipe, PercentPipe, // Services DialogService, MatchMedia ], imports: [[ // Angular modules CommonModule, RouterModule, // Our modules LoggingModule, // Material modules MatAutocompleteModule, MatBadgeModule, MatBottomSheetModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatDialogModule, MatDividerModule, MatExpansionModule, MatFormFieldModule, MatGridListModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatPaginatorModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatSelectModule, MatSidenavModule, MatSliderModule, MatSlideToggleModule, MatSnackBarModule, MatSortModule, MatStepperModule, MatTableModule, MatTabsModule, MatToolbarModule, MatTooltipModule, MatTreeModule ], // Material modules MatAutocompleteModule, MatBadgeModule, MatBottomSheetModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatDialogModule, MatDividerModule, MatExpansionModule, MatFormFieldModule, MatGridListModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatPaginatorModule, MatProgressBarModule, MatRadioModule, MatSelectModule, MatSidenavModule, MatSliderModule, MatSlideToggleModule, MatSnackBarModule, MatSortModule, MatStepperModule, MatTableModule, MatTabsModule, MatToolbarModule, MatTooltipModule, MatTreeModule] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: CommonViewModulePrivate, decorators: [{ type: NgModule, args: [{ imports: [ // Angular modules CommonModule, RouterModule, // Our modules LoggingModule, // Material modules MatAutocompleteModule, MatBadgeModule, MatBottomSheetModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatDialogModule, MatDividerModule, MatExpansionModule, MatFormFieldModule, MatGridListModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatPaginatorModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatSelectModule, MatSidenavModule, MatSliderModule, MatSlideToggleModule, MatSnackBarModule, MatSortModule, MatStepperModule, MatTableModule, MatTabsModule, MatToolbarModule, MatTooltipModule, MatTreeModule ], declarations: [ // Layout component LayoutComponent, VerticalLayoutDirective, VerticalLayoutTitleDirective, VerticalLayoutIconDirective, HorizontalLayoutDirective, FooterLayoutDirective, // Dialogs MessageDialogComponent, LoaderComponent, ProgressLoaderComponent, // Pipes PercentPipe, // Flex components FlexComponent, FlexSpacerComponent, // Router links and sublinks LinkActiveDirective, SubLinkDirective, // Toolbar ToolbarComponent ], exports: [ // Material modules MatAutocompleteModule, MatBadgeModule, MatBottomSheetModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatDialogModule, MatDividerModule, MatExpansionModule, MatFormFieldModule, MatGridListModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatPaginatorModule, MatProgressBarModule, MatRadioModule, MatSelectModule, MatSidenavModule, MatSliderModule, MatSlideToggleModule, MatSnackBarModule, MatSortModule, MatStepperModule, MatTableModule, MatTabsModule, MatToolbarModule, MatTooltipModule, MatTreeModule, // Layout component LayoutComponent, VerticalLayoutDirective, VerticalLayoutTitleDirective, VerticalLayoutIconDirective, HorizontalLayoutDirective, FooterLayoutDirective, // Dialogs MessageDialogComponent, LoaderComponent, ProgressLoaderComponent, // Pipes PercentPipe, // Flex components FlexComponent, FlexSpacerComponent, // Router links and sublinks LinkActiveDirective, SubLinkDirective, // Toolbar ToolbarComponent ], entryComponents: [ MessageDialogComponent, LoaderComponent, ProgressLoaderComponent ], providers: [ // Pipes and formatters so we can inject these DateFormatter, DecimalPipe, DatePipe, PercentPipe, // Services DialogService, MatchMedia ] }] }] }); export class CommonViewModule { } CommonViewModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: CommonViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); CommonViewModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: CommonViewModule, declarations: [MessageComponent], imports: [CommonModule, BrowserAnimationsModule, CommonViewModulePrivate, MatProgressSpinnerModule], exports: [MessageComponent, CommonViewModulePrivate, MatProgressSpinnerModule] }); CommonViewModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: CommonViewModule, imports: [[ CommonModule, BrowserAnimationsModule, CommonViewModulePrivate, MatProgressSpinnerModule ], CommonViewModulePrivate, MatProgressSpinnerModule] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: CommonViewModule, decorators: [{ type: NgModule, args: [{ imports: [ CommonModule, BrowserAnimationsModule, CommonViewModulePrivate, MatProgressSpinnerModule ], declarations: [ MessageComponent ], exports: [ MessageComponent, CommonViewModulePrivate, MatProgressSpinnerModule ] }] }] }); export class SpinnerStubComponent extends MatSpinner { } SpinnerStubComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: SpinnerStubComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); SpinnerStubComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.6", type: SpinnerStubComponent, selector: "mat-spinner, mat-progress-spinner", inputs: { diameter: "diameter" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: SpinnerStubComponent, decorators: [{ type: Component, args: [{ /* eslint-disable @angular-eslint/component-selector */ selector: 'mat-spinner, mat-progress-spinner', /* eslint-enable */ template: '', changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property inputs: [ 'diameter' ] }] }] }); export class NoopAnimationMessageComponent extends MessageComponent { } NoopAnimationMessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: NoopAnimationMessageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); NoopAnimationMessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.6", type: NoopAnimationMessageComponent, selector: "risk-error, risk-good, risk-info, risk-message, risk-warn, risk-initial-load, risk-no-data, risk-update-failed", usesInheritance: true, ngImport: i0, template: "<mat-card [ngClass]=\"color\">\n <ng-template [ngIf]=\"initialLoad\">\n <mat-spinner [diameter]=\"50\"></mat-spinner>\n Loading...\n </ng-template>\n <ng-template [ngIf]=\"noData\">No data available.</ng-template>\n <ng-template [ngIf]=\"updateError\">Failed to update the data: {{message}}.</ng-template>\n <ng-template [ngIf]=\"!initialLoad && !noData && !updateError\">{{message}}</ng-template>\n <ng-content></ng-content>\n</mat-card>", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host(.risk-message-initial-load) .mat-card{display:-webkit-flex;display:flex;line-height:50px;padding:15px 24px}:host(.risk-message-initial-load) .mat-card .mat-spinner{margin-right:15px}\n"], components: [{ type: i2.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: SpinnerStubComponent, selector: "mat-spinner, mat-progress-spinner", inputs: ["diameter"] }], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: NoopAnimationMessageComponent, decorators: [{ type: Component, args: [{ selector: COMPONENT_SELECTOR, changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, template: "<mat-card [ngClass]=\"color\">\n <ng-template [ngIf]=\"initialLoad\">\n <mat-spinner [diameter]=\"50\"></mat-spinner>\n Loading...\n </ng-template>\n <ng-template [ngIf]=\"noData\">No data available.</ng-template>\n <ng-template [ngIf]=\"updateError\">Failed to update the data: {{message}}.</ng-template>\n <ng-template [ngIf]=\"!initialLoad && !noData && !updateError\">{{message}}</ng-template>\n <ng-content></ng-content>\n</mat-card>", styles: [":host{display:block;padding:0;margin:0}:host>*{vertical-align:bottom}\n", ":host(.risk-message-initial-load) .mat-card{display:-webkit-flex;display:flex;line-height:50px;padding:15px 24px}:host(.risk-message-initial-load) .mat-card .mat-spinner{margin-right:15px}\n"] }] }] }); export class NoopAnimationsCommonViewModule { } NoopAnimationsCommonViewModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: NoopAnimationsCommonViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); NoopAnimationsCommonViewModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: NoopAnimationsCommonViewModule, declarations: [NoopAnimationMessageComponent, SpinnerStubComponent], imports: [CommonModule, NoopAnimationsModule, CommonViewModulePrivate], exports: [NoopAnimationMessageComponent, SpinnerStubComponent, CommonViewModulePrivate] }); NoopAnimationsCommonViewModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: NoopAnimationsCommonViewModule, imports: [[ CommonModule, NoopAnimationsModule, CommonViewModulePrivate ], CommonViewModulePrivate] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImport: i0, type: NoopAnimationsCommonViewModule, decorators: [{ type: NgModule, args: [{ imports: [ CommonModule, NoopAnimationsModule, CommonViewModulePrivate ], declarations: [ NoopAnimationMessageComponent, SpinnerStubComponent ], exports: [ NoopAnimationMessageComponent, SpinnerStubComponent, CommonViewModulePrivate ] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnZpZXcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGtnL2RiZy1yaXNraXQvYW5ndWxhci12aWV3L3NyYy9saWIvY29tbW9uLnZpZXcubW9kdWxlLnRzIiwiLi4vLi4vLi4vLi4vLi4vcGtnL2RiZy1yaXNraXQvYW5ndWxhci12aWV3L3NyYy9saWIvbWVzc2FnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyx3QkFBd0IsRUFBRSxVQUFVLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFDLHVCQUF1QixFQUFFLG9CQUFvQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDbkcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQ0gscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6QixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDL0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDcEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFHckQsTUFBTSxPQUFPLGFBQWE7SUFFdEIsWUFBeUQsTUFBYyxFQUNuQyxRQUFrQjtRQURHLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDbkMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUN0RCxDQUFDO0lBRU0sU0FBUyxDQUFDLEtBQVc7UUFDeEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7OzBHQVJRLGFBQWEsa0JBRUssV0FBVzs4R0FGN0IsYUFBYTsyRkFBYixhQUFhO2tCQUR6QixVQUFVOzswQkFHYSxNQUFNOzJCQUFDLFdBQVc7O0FBa0sxQyxNQUFNLE9BQU8sdUJBQXVCOztvSEFBdkIsdUJBQXVCO3FIQUF2Qix1QkFBdUI7UUEzRzVCLG1CQUFtQjtRQUNuQixlQUFlO1FBQ2YsdUJBQXVCO1FBQ3ZCLDRCQUE0QjtRQUM1QiwyQkFBMkI7UUFDM0IseUJBQXlCO1FBQ3pCLHFCQUFxQjtRQUVyQixVQUFVO1FBQ1Ysc0JBQXNCO1FBQ3RCLGVBQWU7UUFDZix1QkFBdUI7UUFFdkIsUUFBUTtRQUNSLFdBQVc7UUFFWCxrQkFBa0I7UUFDbEIsYUFBYTtRQUNiLG1CQUFtQjtRQUVuQiw0QkFBNEI7UUFDNUIsbUJBQW1CO1FBQ25CLGdCQUFnQjtRQUVoQixVQUFVO1FBQ1YsZ0JBQWdCO1FBckVoQixrQkFBa0I7UUFDbEIsWUFBWTtRQUNaLFlBQVk7UUFFWixjQUFjO1FBQ2QsYUFBYTtRQUViLG1CQUFtQjtRQUNuQixxQkFBcUI7UUFDckIsY0FBYztRQUNkLG9CQUFvQjtRQUNwQixlQUFlO1FBQ2YscUJBQXFCO1FBQ3JCLGFBQWE7UUFDYixpQkFBaUI7UUFDakIsY0FBYztRQUNkLG1CQUFtQjtRQUNuQixlQUFlO1FBQ2YsZ0JBQWdCO1FBQ2hCLGtCQUFrQjtRQUNsQixrQkFBa0I7UUFDbEIsaUJBQWlCO1FBQ2pCLGFBQWE7UUFDYixjQUFjO1FBQ2QsYUFBYTtRQUNiLGFBQWE7UUFDYixrQkFBa0I7UUFDbEIsb0JBQW9CO1FBQ3BCLHdCQUF3QjtRQUN4QixjQUFjO1FBQ2QsZUFBZTtRQUNmLGdCQUFnQjtRQUNoQixlQUFlO1FBQ2Ysb0JBQW9CO1FBQ3BCLGlCQUFpQjtRQUNqQixhQUFhO1FBQ2IsZ0JBQWdCO1FBQ2hCLGNBQWM7UUFDZCxhQUFhO1FBQ2IsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtRQUNoQixhQUFhO1FBK0JiLG1CQUFtQjtRQUNuQixxQkFBcUI7UUFDckIsY0FBYztRQUNkLG9CQUFvQjtRQUNwQixlQUFlO1FBQ2YscUJBQXFCO1FBQ3JCLGFBQWE7UUFDYixpQkFBaUI7UUFDakIsY0FBYztRQUNkLG1CQUFtQjtRQUNuQixlQUFlO1FBQ2YsZ0JBQWdCO1FBQ2hCLGtCQUFrQjtRQUNsQixrQkFBa0I7UUFDbEIsaUJBQWlCO1FBQ2pCLGFBQWE7UUFDYixjQUFjO1FBQ2QsYUFBYTtRQUNiLGFBQWE7UUFDYixrQkFBa0I7UUFDbEIsb0JBQW9CO1FBQ3BCLGNBQWM7UUFDZCxlQUFlO1FBQ2YsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixvQkFBb0I7UUFDcEIsaUJBQWlCO1FBQ2pCLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsY0FBYztRQUNkLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLGFBQWE7UUFFYixtQkFBbUI7UUFDbkIsZUFBZTtRQUNmLHVCQUF1QjtRQUN2Qiw0QkFBNEI7UUFDNUIsMkJBQTJCO1FBQzNCLHlCQUF5QjtRQUN6QixxQkFBcUI7UUFFckIsVUFBVTtRQUNWLHNCQUFzQjtRQUN0QixlQUFlO1FBQ2YsdUJBQXVCO1FBRXZCLFFBQVE7UUFDUixXQUFXO1FBRVgsa0JBQWtCO1FBQ2xCLGFBQWE7UUFDYixtQkFBbUI7UUFFbkIsNEJBQTRCO1FBQzVCLG1CQUFtQjtRQUNuQixnQkFBZ0I7UUFFaEIsVUFBVTtRQUNWLGdCQUFnQjtxSEFtQlgsdUJBQXVCLGFBWmY7UUFDYiw4Q0FBOEM7UUFDOUMsYUFBYTtRQUNiLFdBQVc7UUFDWCxRQUFRO1FBQ1IsV0FBVztRQUVYLFdBQVc7UUFDWCxhQUFhO1FBQ2IsVUFBVTtLQUNiLFlBdEpnQjtZQUNiLGtCQUFrQjtZQUNsQixZQUFZO1lBQ1osWUFBWTtZQUVaLGNBQWM7WUFDZCxhQUFhO1lBRWIsbUJBQW1CO1lBQ25CLHFCQUFxQjtZQUNyQixjQUFjO1lBQ2Qsb0JBQW9CO1lBQ3BCLGVBQWU7WUFDZixxQkFBcUI7WUFDckIsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixjQUFjO1lBQ2QsbUJBQW1CO1lBQ25CLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsa0JBQWtCO1lBQ2xCLGtCQUFrQjtZQUNsQixpQkFBaUI7WUFDakIsYUFBYTtZQUNiLGNBQWM7WUFDZCxhQUFhO1lBQ2IsYUFBYTtZQUNiLGtCQUFrQjtZQUNsQixvQkFBb0I7WUFDcEIsd0JBQXdCO1lBQ3hCLGNBQWM7WUFDZCxlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixvQkFBb0I7WUFDcEIsaUJBQWlCO1lBQ2pCLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsY0FBYztZQUNkLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGFBQWE7U0FDaEI7UUE4QkcsbUJBQW1CO1FBQ25CLHFCQUFxQjtRQUNyQixjQUFjO1FBQ2Qsb0JBQW9CO1FBQ3BCLGVBQWU7UUFDZixxQkFBcUI7UUFDckIsYUFBYTtRQUNiLGlCQUFpQjtRQUNqQixjQUFjO1FBQ2QsbUJBQW1CO1FBQ25CLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsa0JBQWtCO1FBQ2xCLGtCQUFrQjtRQUNsQixpQkFBaUI7UUFDakIsYUFBYTtRQUNiLGNBQWM7UUFDZCxhQUFhO1FBQ2IsYUFBYTtRQUNiLGtCQUFrQjtRQUNsQixvQkFBb0I7UUFDcEIsY0FBYztRQUNkLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixpQkFBaUI7UUFDakIsYUFBYTtRQUNiLGdCQUFnQjtRQUNoQixjQUFjO1FBQ2QsYUFBYTtRQUNiLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsYUFBYTsyRkE4Q1IsdUJBQXVCO2tCQXpKbkMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQVU7d0JBQ2Isa0JBQWtCO3dCQUNsQixZQUFZO3dCQUNaLFlBQVk7d0JBRVosY0FBYzt3QkFDZCxhQUFhO3dCQUViLG1CQUFtQjt3QkFDbkIscUJBQXFCO3dCQUNyQixjQUFjO3dCQUNkLG9CQUFvQjt3QkFDcEIsZUFBZTt3QkFDZixxQkFBcUI7d0JBQ3JCLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLHdCQUF3Qjt3QkFDeEIsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsYUFBYTtxQkFDaEI7b0JBQ0QsWUFBWSxFQUFLO3dCQUNiLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZix1QkFBdUI7d0JBQ3ZCLDRCQUE0Qjt3QkFDNUIsMkJBQTJCO3dCQUMzQix5QkFBeUI7d0JBQ3pCLHFCQUFxQjt3QkFFckIsVUFBVTt3QkFDVixzQkFBc0I7d0JBQ3RCLGVBQWU7d0JBQ2YsdUJBQXVCO3dCQUV2QixRQUFRO3dCQUNSLFdBQVc7d0JBRVgsa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLG1CQUFtQjt3QkFFbkIsNEJBQTRCO3dCQUM1QixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFFaEIsVUFBVTt3QkFDVixnQkFBZ0I7cUJBQ25CO29CQUNELE9BQU8sRUFBVTt3QkFDYixtQkFBbUI7d0JBQ25CLHFCQUFxQjt3QkFDckIsY0FBYzt3QkFDZCxvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YscUJBQXFCO3dCQUNyQixhQUFhO3dCQUNiLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEIsaUJBQWlCO3dCQUNqQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixhQUFhO3dCQUNiLGtCQUFrQjt3QkFDbEIsb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIsaUJBQWlCO3dCQUNqQixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUViLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZix1QkFBdUI7d0JBQ3ZCLDRCQUE0Qjt3QkFDNUIsMkJBQTJCO3dCQUMzQix5QkFBeUI7d0JBQ3pCLHFCQUFxQjt3QkFFckIsVUFBVTt3QkFDVixzQkFBc0I7d0JBQ3RCLGVBQWU7d0JBQ2YsdUJBQXVCO3dCQUV2QixRQUFRO3dCQUNSLFdBQVc7d0JBRVgsa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLG1CQUFtQjt3QkFFbkIsNEJBQTRCO3dCQUM1QixtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFFaEIsVUFBVTt3QkFDVixnQkFBZ0I7cUJBQ25CO29CQUNELGVBQWUsRUFBRTt3QkFDYixzQkFBc0I7d0JBQ3RCLGVBQWU7d0JBQ2YsdUJBQXVCO3FCQUMxQjtvQkFDRCxTQUFTLEVBQVE7d0JBQ2IsOENBQThDO3dCQUM5QyxhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsUUFBUTt3QkFDUixXQUFXO3dCQUVYLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixVQUFVO3FCQUNiO2lCQUNKOztBQW9CRCxNQUFNLE9BQU8sZ0JBQWdCOzs2R0FBaEIsZ0JBQWdCOzhHQUFoQixnQkFBZ0IsaUJBUnJCLGdCQUFnQixhQU5oQixZQUFZO1FBQ1osdUJBQXVCLEVBTmxCLHVCQUF1QixFQVE1Qix3QkFBd0IsYUFNeEIsZ0JBQWdCLEVBZFgsdUJBQXVCLEVBZ0I1Qix3QkFBd0I7OEdBR25CLGdCQUFnQixZQWZYO1lBQ1YsWUFBWTtZQUNaLHVCQUF1QjtZQUN2Qix1QkFBdUI7WUFDdkIsd0JBQXdCO1NBQzNCLEVBVFEsdUJBQXVCLEVBZ0I1Qix3QkFBd0I7MkZBR25CLGdCQUFnQjtrQkFoQjVCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFPO3dCQUNWLFlBQVk7d0JBQ1osdUJBQXVCO3dCQUN2Qix1QkFBdUI7d0JBQ3ZCLHdCQUF3QjtxQkFDM0I7b0JBQ0QsWUFBWSxFQUFFO3dCQUNWLGdCQUFnQjtxQkFDbkI7b0JBQ0QsT0FBTyxFQUFPO3dCQUNWLGdCQUFnQjt3QkFDaEIsdUJBQXVCO3dCQUN2Qix3QkFBd0I7cUJBQzNCO2lCQUNKOztBQWdCRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsVUFBVTs7aUhBQXZDLG9CQUFvQjtxR0FBcEIsb0JBQW9CLGtJQVJSLEVBQUU7MkZBUWQsb0JBQW9CO2tCQVpoQyxTQUFTO21CQUFDO29CQUNQLHVEQUF1RDtvQkFDdkQsUUFBUSxFQUFFLG1DQUFtQztvQkFDN0MsbUJBQW1CO29CQUNuQixRQUFRLEVBQWEsRUFBRTtvQkFDdkIsZUFBZSxFQUFNLHVCQUF1QixDQUFDLE1BQU07b0JBQ25ELG1CQUFtQixFQUFFLEtBQUs7b0JBQzFCLHVFQUF1RTtvQkFDdkUsTUFBTSxFQUFFO3dCQUNKLFVBQVU7cUJBQ2I7aUJBQ0o7O0FBY0QsTUFBTSxPQUFPLDZCQUE4QixTQUFRLGdCQUFnQjs7MEhBQXRELDZCQUE2Qjs4R0FBN0IsNkJBQTZCLDZLQ2pSMUMsd2RBU1csaVhEMlBFLG9CQUFvQjsyRkFhcEIsNkJBQTZCO2tCQVZ6QyxTQUFTOytCQUNlLGtCQUFrQixtQkFNbEIsdUJBQXVCLENBQUMsTUFBTSx1QkFDOUIsS0FBSzs7QUFxQjlCLE1BQU0sT0FBTyw4QkFBOEI7OzJIQUE5Qiw4QkFBOEI7NEhBQTlCLDhCQUE4QixpQkFuQjlCLDZCQUE2QixFQWI3QixvQkFBb0IsYUFrQnpCLFlBQVk7UUFDWixvQkFBb0IsRUFyRGYsdUJBQXVCLGFBK0N2Qiw2QkFBNkIsRUFiN0Isb0JBQW9CLEVBbENwQix1QkFBdUI7NEhBa0V2Qiw4QkFBOEIsWUFmekI7WUFDVixZQUFZO1lBQ1osb0JBQW9CO1lBQ3BCLHVCQUF1QjtTQUMxQixFQXZEUSx1QkFBdUI7MkZBa0V2Qiw4QkFBOEI7a0JBaEIxQyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBTzt3QkFDVixZQUFZO3dCQUNaLG9CQUFvQjt3QkFDcEIsdUJBQXVCO3FCQUMxQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1YsNkJBQTZCO3dCQUM3QixvQkFBb0I7cUJBQ3ZCO29CQUNELE9BQU8sRUFBTzt3QkFDViw2QkFBNkI7d0JBQzdCLG9CQUFvQjt3QkFDcEIsdUJBQXVCO3FCQUMxQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tbW9uTW9kdWxlLCBEYXRlUGlwZSwgRGVjaW1hbFBpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCwgSW5qZWN0YWJsZSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNYXRBdXRvY29tcGxldGVNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQge01hdEJhZGdlTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XG5pbXBvcnQge01hdEJvdHRvbVNoZWV0TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9ib3R0b20tc2hlZXQnO1xuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQge01hdEJ1dHRvblRvZ2dsZU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XG5pbXBvcnQge01hdENhcmRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHtNYXRDaGVja2JveE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHtNYXRDaGlwc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHtNYXREYXRlcGlja2VyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7TWF0RGlhbG9nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtNYXREaXZpZGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7TWF0RXhwYW5zaW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHtNYXRGb3JtRmllbGRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHtNYXRHcmlkTGlzdE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZ3JpZC1saXN0JztcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQge01hdElucHV0TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQge01hdExpc3RNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xuaW1wb3J0IHtNYXRNZW51TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7TWF0UGFnaW5hdG9yTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHtNYXRQcm9ncmVzc0Jhck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7TWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLCBNYXRTcGlubmVyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7TWF0UmFkaW9Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3JhZGlvJztcbmltcG9ydCB7TWF0U2VsZWN0TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHtNYXRTaWRlbmF2TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7TWF0U2xpZGVUb2dnbGVNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5pbXBvcnQge01hdFNsaWRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGVyJztcbmltcG9ydCB7TWF0U25hY2tCYXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQge01hdFNvcnRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHtNYXRTdGVwcGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zdGVwcGVyJztcbmltcG9ydCB7TWF0VGFibGVNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7TWF0VGFic01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQge01hdFRvb2xiYXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2xiYXInO1xuaW1wb3J0IHtNYXRUb29sdGlwTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7TWF0VHJlZU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQge0Jyb3dzZXJBbmltYXRpb25zTW9kdWxlLCBOb29wQW5pbWF0aW9uc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9hbmltYXRpb25zJztcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtEQVRFX0ZPUk1BVH0gZnJvbSAnQGRiZy1yaXNraXQvYW5ndWxhci1jb21tb24nO1xuaW1wb3J0IHtMb2dnaW5nTW9kdWxlfSBmcm9tICdAZGJnLXJpc2tpdC9hbmd1bGFyLWxvZ2dpbmcnO1xuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tICcuL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7RmxleENvbXBvbmVudH0gZnJvbSAnLi9mbGV4LmNvbXBvbmVudCc7XG5pbXBvcnQge0ZsZXhTcGFjZXJDb21wb25lbnR9IGZyb20gJy4vZmxleC5zcGFjZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgRm9vdGVyTGF5b3V0RGlyZWN0aXZlLFxuICAgIEhvcml6b250YWxMYXlvdXREaXJlY3RpdmUsXG4gICAgTGF5b3V0Q29tcG9uZW50LFxuICAgIFZlcnRpY2FsTGF5b3V0RGlyZWN0aXZlLFxuICAgIFZlcnRpY2FsTGF5b3V0SWNvbkRpcmVjdGl2ZSxcbiAgICBWZXJ0aWNhbExheW91dFRpdGxlRGlyZWN0aXZlXG59IGZyb20gJy4vbGF5b3V0LmNvbXBvbmVudCc7XG5pbXBvcnQge0xpbmtBY3RpdmVEaXJlY3RpdmV9IGZyb20gJy4vbGluay5hY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7TG9hZGVyQ29tcG9uZW50fSBmcm9tICcuL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHtNYXRjaE1lZGlhfSBmcm9tICcuL21hdGNoLm1lZGlhJztcbmltcG9ydCB7Q09NUE9ORU5UX1NFTEVDVE9SLCBNZXNzYWdlQ29tcG9uZW50fSBmcm9tICcuL21lc3NhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7TWVzc2FnZURpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi9tZXNzYWdlLmRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHtQZXJjZW50UGlwZX0gZnJvbSAnLi9wZXJjZW50LnBpcGUnO1xuaW1wb3J0IHtQcm9ncmVzc0xvYWRlckNvbXBvbmVudH0gZnJvbSAnLi9wcm9ncmVzcy5sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7U3ViTGlua0RpcmVjdGl2ZX0gZnJvbSAnLi9zdWIubGluay5kaXJlY3RpdmUnO1xuaW1wb3J0IHtUb29sYmFyQ29tcG9uZW50fSBmcm9tICcuL3Rvb2xiYXIuY29tcG9uZW50JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERhdGVGb3JtYXR0ZXIge1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKEBJbmplY3QoREFURV9GT1JNQVQpIHByaXZhdGUgcmVhZG9ubHkgZm9ybWF0OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0ZVBpcGU6IERhdGVQaXBlKSB7XG4gICAgfVxuXG4gICAgcHVibGljIHRyYW5zZm9ybSh2YWx1ZTogRGF0ZSk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsIHRoaXMuZm9ybWF0KTtcbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0cyAgICAgICAgOiBbXG4gICAgICAgIC8vIEFuZ3VsYXIgbW9kdWxlc1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZHVsZSxcblxuICAgICAgICAvLyBPdXIgbW9kdWxlc1xuICAgICAgICBMb2dnaW5nTW9kdWxlLFxuXG4gICAgICAgIC8vIE1hdGVyaWFsIG1vZHVsZXNcbiAgICAgICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgICAgICBNYXRCYWRnZU1vZHVsZSxcbiAgICAgICAgTWF0Qm90dG9tU2hlZXRNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLFxuICAgICAgICBNYXRDYXJkTW9kdWxlLFxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgTWF0Q2hpcHNNb2R1bGUsXG4gICAgICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXG4gICAgICAgIE1hdERpYWxvZ01vZHVsZSxcbiAgICAgICAgTWF0RGl2aWRlck1vZHVsZSxcbiAgICAgICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIE1hdEdyaWRMaXN0TW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICAgICAgTWF0TGlzdE1vZHVsZSxcbiAgICAgICAgTWF0TWVudU1vZHVsZSxcbiAgICAgICAgTWF0UGFnaW5hdG9yTW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBNYXRSYWRpb01vZHVsZSxcbiAgICAgICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgICAgICBNYXRTaWRlbmF2TW9kdWxlLFxuICAgICAgICBNYXRTbGlkZXJNb2R1bGUsXG4gICAgICAgIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLFxuICAgICAgICBNYXRTbmFja0Jhck1vZHVsZSxcbiAgICAgICAgTWF0U29ydE1vZHVsZSxcbiAgICAgICAgTWF0U3RlcHBlck1vZHVsZSxcbiAgICAgICAgTWF0VGFibGVNb2R1bGUsXG4gICAgICAgIE1hdFRhYnNNb2R1bGUsXG4gICAgICAgIE1hdFRvb2xiYXJNb2R1bGUsXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgICAgIE1hdFRyZWVNb2R1bGVcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9ucyAgIDogW1xuICAgICAgICAvLyBMYXlvdXQgY29tcG9uZW50XG4gICAgICAgIExheW91dENvbXBvbmVudCxcbiAgICAgICAgVmVydGljYWxMYXlvdXREaXJlY3RpdmUsXG4gICAgICAgIFZlcnRpY2FsTGF5b3V0VGl0bGVEaXJlY3RpdmUsXG4gICAgICAgIFZlcnRpY2FsTGF5b3V0SWNvbkRpcmVjdGl2ZSxcbiAgICAgICAgSG9yaXpvbnRhbExheW91dERpcmVjdGl2ZSxcbiAgICAgICAgRm9vdGVyTGF5b3V0RGlyZWN0aXZlLFxuXG4gICAgICAgIC8vIERpYWxvZ3NcbiAgICAgICAgTWVzc2FnZURpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgTG9hZGVyQ29tcG9uZW50LFxuICAgICAgICBQcm9ncmVzc0xvYWRlckNvbXBvbmVudCxcblxuICAgICAgICAvLyBQaXBlc1xuICAgICAgICBQZXJjZW50UGlwZSxcblxuICAgICAgICAvLyBGbGV4IGNvbXBvbmVudHNcbiAgICAgICAgRmxleENvbXBvbmVudCxcbiAgICAgICAgRmxleFNwYWNlckNvbXBvbmVudCxcblxuICAgICAgICAvLyBSb3V0ZXIgbGlua3MgYW5kIHN1YmxpbmtzXG4gICAgICAgIExpbmtBY3RpdmVEaXJlY3RpdmUsXG4gICAgICAgIFN1YkxpbmtEaXJlY3RpdmUsXG5cbiAgICAgICAgLy8gVG9vbGJhclxuICAgICAgICBUb29sYmFyQ29tcG9uZW50XG4gICAgXSxcbiAgICBleHBvcnRzICAgICAgICA6IFtcbiAgICAgICAgLy8gTWF0ZXJpYWwgbW9kdWxlc1xuICAgICAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgICAgIE1hdEJhZGdlTW9kdWxlLFxuICAgICAgICBNYXRCb3R0b21TaGVldE1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Ub2dnbGVNb2R1bGUsXG4gICAgICAgIE1hdENhcmRNb2R1bGUsXG4gICAgICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgICAgICBNYXRDaGlwc01vZHVsZSxcbiAgICAgICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICAgICAgTWF0RGlhbG9nTW9kdWxlLFxuICAgICAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgICAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0R3JpZExpc3RNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBNYXRMaXN0TW9kdWxlLFxuICAgICAgICBNYXRNZW51TW9kdWxlLFxuICAgICAgICBNYXRQYWdpbmF0b3JNb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzQmFyTW9kdWxlLFxuICAgICAgICBNYXRSYWRpb01vZHVsZSxcbiAgICAgICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgICAgICBNYXRTaWRlbmF2TW9kdWxlLFxuICAgICAgICBNYXRTbGlkZXJNb2R1bGUsXG4gICAgICAgIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLFxuICAgICAgICBNYXRTbmFja0Jhck1vZHVsZSxcbiAgICAgICAgTWF0U29ydE1vZHVsZSxcbiAgICAgICAgTWF0U3RlcHBlck1vZHVsZSxcbiAgICAgICAgTWF0VGFibGVNb2R1bGUsXG4gICAgICAgIE1hdFRhYnNNb2R1bGUsXG4gICAgICAgIE1hdFRvb2xiYXJNb2R1bGUsXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgICAgIE1hdFRyZWVNb2R1bGUsXG5cbiAgICAgICAgLy8gTGF5b3V0IGNvbXBvbmVudFxuICAgICAgICBMYXlvdXRDb21wb25lbnQsXG4gICAgICAgIFZlcnRpY2FsTGF5b3V0RGlyZWN0aXZlLFxuICAgICAgICBWZXJ0aWNhbExheW91dFRpdGxlRGlyZWN0aXZlLFxuICAgICAgICBWZXJ0aWNhbExheW91dEljb25EaXJlY3RpdmUsXG4gICAgICAgIEhvcml6b250YWxMYXlvdXREaXJlY3RpdmUsXG4gICAgICAgIEZvb3RlckxheW91dERpcmVjdGl2ZSxcblxuICAgICAgICAvLyBEaWFsb2dzXG4gICAgICAgIE1lc3NhZ2VEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIExvYWRlckNvbXBvbmVudCxcbiAgICAgICAgUHJvZ3Jlc3NMb2FkZXJDb21wb25lbnQsXG5cbiAgICAgICAgLy8gUGlwZXNcbiAgICAgICAgUGVyY2VudFBpcGUsXG5cbiAgICAgICAgLy8gRmxleCBjb21wb25lbnRzXG4gICAgICAgIEZsZXhDb21wb25lbnQsXG4gICAgICAgIEZsZXhTcGFjZXJDb21wb25lbnQsXG5cbiAgICAgICAgLy8gUm91dGVyIGxpbmtzIGFuZCBzdWJsaW5rc1xuICAgICAgICBMaW5rQWN0aXZlRGlyZWN0aXZlLFxuICAgICAgICBTdWJMaW5rRGlyZWN0aXZlLFxuXG4gICAgICAgIC8vIFRvb2xiYXJcbiAgICAgICAgVG9vbGJhckNvbXBvbmVudFxuICAgIF0sXG4gICAgZW50cnlDb21wb25lbnRzOiBbXG4gICAgICAgIE1lc3NhZ2VEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIExvYWRlckNvbXBvbmVudCxcbiAgICAgICAgUHJvZ3Jlc3NMb2FkZXJDb21wb25lbnRcbiAgICBdLFxuICAgIHByb3ZpZGVycyAgICAgIDogW1xuICAgICAgICAvLyBQaXBlcyBhbmQgZm9ybWF0dGVycyBzbyB3ZSBjYW4gaW5qZWN0IHRoZXNlXG4gICAgICAgIERhdGVGb3JtYXR0ZXIsXG4gICAgICAgIERlY2ltYWxQaXBlLFxuICAgICAgICBEYXRlUGlwZSxcbiAgICAgICAgUGVyY2VudFBpcGUsXG5cbiAgICAgICAgLy8gU2VydmljZXNcbiAgICAgICAgRGlhbG9nU2VydmljZSxcbiAgICAgICAgTWF0Y2hNZWRpYVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQ29tbW9uVmlld01vZHVsZVByaXZhdGUge1xufVxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHMgICAgIDogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEJyb3dzZXJBbmltYXRpb25zTW9kdWxlLFxuICAgICAgICBDb21tb25WaWV3TW9kdWxlUHJpdmF0ZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgTWVzc2FnZUNvbXBvbmVudFxuICAgIF0sXG4gICAgZXhwb3J0cyAgICAgOiBbXG4gICAgICAgIE1lc3NhZ2VDb21wb25lbnQsXG4gICAgICAgIENvbW1vblZpZXdNb2R1bGVQcml2YXRlLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbW1vblZpZXdNb2R1bGUge1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG4gICAgc2VsZWN0b3I6ICdtYXQtc3Bpbm5lciwgbWF0LXByb2dyZXNzLXNwaW5uZXInLFxuICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICB0ZW1wbGF0ZSAgICAgICAgICAgOiAnJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb24gICAgOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dHMtbWV0YWRhdGEtcHJvcGVydHlcbiAgICBpbnB1dHM6IFtcbiAgICAgICAgJ2RpYW1ldGVyJ1xuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgU3Bpbm5lclN0dWJDb21wb25lbnQgZXh0ZW5kcyBNYXRTcGlubmVyIHtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3IgICAgICAgICAgIDogQ09NUE9ORU5UX1NFTEVDVE9SLFxuICAgIHRlbXBsYXRlVXJsICAgICAgICA6ICdtZXNzYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHMgICAgICAgICAgOiBbXG4gICAgICAgICcuLi8uLi8uLi9jb21wb25lbnQuc2NzcycsXG4gICAgICAgICdtZXNzYWdlLmNvbXBvbmVudC5zY3NzJ1xuICAgIF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uICAgIDogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIE5vb3BBbmltYXRpb25NZXNzYWdlQ29tcG9uZW50IGV4dGVuZHMgTWVzc2FnZUNvbXBvbmVudCB7XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0cyAgICAgOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTm9vcEFuaW1hdGlvbnNNb2R1bGUsXG4gICAgICAgIENvbW1vblZpZXdNb2R1bGVQcml2YXRlXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgTm9vcEFuaW1hdGlvbk1lc3NhZ2VDb21wb25lbnQsXG4gICAgICAgIFNwaW5uZXJTdHViQ29tcG9uZW50XG4gICAgXSxcbiAgICBleHBvcnRzICAgICA6IFtcbiAgICAgICAgTm9vcEFuaW1hdGlvbk1lc3NhZ2VDb21wb25lbnQsXG4gICAgICAgIFNwaW5uZXJTdHViQ29tcG9uZW50LFxuICAgICAgICBDb21tb25WaWV3TW9kdWxlUHJpdmF0ZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTm9vcEFuaW1hdGlvbnNDb21tb25WaWV3TW9kdWxlIHtcbn1cbiIsIjxtYXQtY2FyZCBbbmdDbGFzc109XCJjb2xvclwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpbml0aWFsTG9hZFwiPlxuICAgICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgTG9hZGluZy4uLlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIm5vRGF0YVwiPk5vIGRhdGEgYXZhaWxhYmxlLjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInVwZGF0ZUVycm9yXCI+RmFpbGVkIHRvIHVwZGF0ZSB0aGUgZGF0YToge3ttZXNzYWdlfX0uPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWluaXRpYWxMb2FkICYmICFub0RhdGEgJiYgIXVwZGF0ZUVycm9yXCI+e3ttZXNzYWdlfX08L25nLXRlbXBsYXRlPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbWF0LWNhcmQ+Il19