@firestitch/app-message 18.0.10 → 18.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/modules/message-queues/components/queues/queues.component.d.ts +1 -0
- package/esm2022/app/modules/message-queues/components/queue/queue.component.mjs +3 -3
- package/esm2022/app/modules/message-queues/components/queues/queues.component.mjs +8 -1
- package/esm2022/app/modules/messages/components/message/message.component.mjs +3 -3
- package/fesm2022/firestitch-app-message.mjs +11 -4
- package/fesm2022/firestitch-app-message.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -28,6 +28,7 @@ export declare class QueuesComponent implements OnInit, OnDestroy {
|
|
|
28
28
|
initList(): void;
|
|
29
29
|
open(messageQueue: any): void;
|
|
30
30
|
ngOnDestroy(): void;
|
|
31
|
+
private _initConfig;
|
|
31
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<QueuesComponent, never>;
|
|
32
33
|
static ɵcmp: i0.ɵɵComponentDeclaration<QueuesComponent, "fs-app-message-queues", never, { "query": { "alias": "query"; "required": false; }; "type": { "alias": "type"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, {}, never, never, false, never>;
|
|
33
34
|
}
|
|
@@ -207,11 +207,11 @@ export class QueueComponent {
|
|
|
207
207
|
return (bytes / Math.pow(1024, e)).toFixed(2) + ' ' + ' KMGTP'.charAt(e) + 'B';
|
|
208
208
|
}
|
|
209
209
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: QueueComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: MAT_DIALOG_DATA }, { token: i1.FsMessage }, { token: i2.FsPrompt }, { token: i3.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
210
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: QueueComponent, selector: "ng-component", viewQueries: [{ propertyName: "logList", first: true, predicate: ["logList"], descendants: true }], ngImport: i0, template: "<fs-dialog *fsSkeleton=\"messageQueue\">\n <div mat-dialog-title>Message Queue</div>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"Overview\">\n <ng-template matTabContent>\n <div class=\"fs-row.gap-large.wrap\">\n <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Recipients\n </fs-label>\n <app-recipient \n *ngFor=\"let recipient of messageQueue.emailMessageQueue.toRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.ccRecipients.length\">\n <fs-label>\n CC\n </fs-label>\n <app-recipient \n *ngFor=\"let recipient of messageQueue.emailMessageQueue.ccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient> \n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.bccRecipients.length\">\n <fs-label>\n BCC\n </fs-label>\n <app-recipient \n *ngFor=\"let recipient of messageQueue.emailMessageQueue.bccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient> \n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.fromName || messageQueue.emailMessageQueue.fromEmail\">\n <fs-label>\n From\n </fs-label>\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromName === messageQueue.emailMessageQueue.fromEmail; else fromEmailName\">\n {{messageQueue.emailMessageQueue.fromName}}\n </ng-container>\n\n <ng-template #fromEmailName>\n {{messageQueue.emailMessageQueue.fromName}}\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromEmail\">\n ({{messageQueue.emailMessageQueue.fromEmail}})\n </ng-container>\n </ng-template>\n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.replyEmail && messageQueue.emailMessageQueue.replyEmail.length\">\n <fs-label>\n Reply To\n </fs-label>\n {{messageQueue.emailMessageQueue.replyEmail.join(', ')}}\n </fs-label-field>\n </ng-container>\n\n <ng-container *ngIf=\"messageQueue.smsMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Number\n </fs-label>\n <app-recipient \n [state]=\"messageQueue.state\"\n [name]=\"messageQueue.smsMessageQueue.toNumber\">\n </app-recipient> \n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.smsMessageQueue.fromNumber\">\n <fs-label>\n From Number\n </fs-label>\n {{messageQueue.smsMessageQueue.fromNumber}}\n </fs-label-field>\n </ng-container>\n \n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{messageQueue.scheduledDate | fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{messageQueueStates[messageQueue.state]}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"messageQueue.message\">\n <fs-label>\n Message Type\n </fs-label>\n <a\n (click)=\"openMessage(messageQueue.message)\"\n *ngIf=\"loadMessage; else elseMessage\">\n {{messageQueue.message.name}}\n </a>\n <ng-template #elseMessage>\n {{messageQueue.message.name}}\n </ng-template>\n </fs-label-field>\n </div>\n\n <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field class=\"subject\">\n <fs-label>\n Subject\n </fs-label>\n {{messageQueue.emailMessageQueue.subject}}\n </fs-label-field>\n\n <fs-label-field class=\"body\">\n <fs-label>\n Body\n </fs-label>\n <div\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.Text\"\n class=\"format-text\"\n [innerHTML]=\"messageQueue.emailMessageQueue.body\">\n </div>\n <fs-iframe\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.HTML || messageQueue.emailMessageQueue.format===emailMessageQueueFormat.RichText\"\n [html]=\"messageQueue.emailMessageQueue.body\"\n [width]=\"'100%'\">\n </fs-iframe>\n </fs-label-field>\n </ng-container>\n\n <ng-container *ngIf=\"messageQueue.smsMessageQueue\">\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.smsMessageQueue.body\">\n </div>\n </fs-label-field>\n </ng-container>\n\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <fs-list [config]=\"logConfig\" #logList>\n <fs-list-column title=\"Message\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createdDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Attachments\">\n <ng-template matTabContent>\n <fs-list [config]=\"attachmentConfig\">\n <fs-list-column title=\"File Name\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.filename}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.prettyFilesize}}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Events\">\n <ng-template matTabContent>\n <fs-list [config]=\"eventConfig\">\n <fs-list-column title=\"Recipient\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.messageQueueRecipient.recipient}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Event\">\n <ng-template fs-list-cell let-row=\"row\">\n {{MessageQueueEventTypes[row.type]}}\n <div class=\"small\" *ngIf=\"row.type === MessageQueueEventType.Click\">\n <a [href]=\"row.meta?.url\" target=\"_blank\">{{row.meta?.url}}</a>\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.createDate | fsDateFormat: 'date-time-yearless'}}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n color=\"primary\">\n Done\n </button>\n <button\n mat-button\n *ngIf=\"resendMessageQueue\"\n type=\"button\"\n (click)=\"resend()\"\n type=\"button\">\n Resend\n </button>\n <button\n mat-button\n *ngIf=\"forwardMessageQueue\"\n type=\"button\"\n (click)=\"forward()\"\n type=\"button\">\n Forward\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [".subject,.body{display:block;margin-top:15px}.format-text{white-space:pre-wrap}app-recipient{display:block}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatTabContent, selector: "[matTabContent]" }, { kind: "component", type: i6.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i7.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i7.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i7.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "component", type: i8.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "component", type: i9.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i9.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "component", type: i10.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { kind: "directive", type: i11.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "directive", type: i12.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: i13.FsIFrameComponent, selector: "fs-iframe", inputs: ["html", "src", "styles", "width", "height"], outputs: ["loaded"] }, { kind: "component", type: i14.RecipientComponent, selector: "app-recipient", inputs: ["name", "state"] }, { kind: "pipe", type: i10.FsDateFormatPipe, name: "fsDateFormat" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
210
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: QueueComponent, selector: "ng-component", viewQueries: [{ propertyName: "logList", first: true, predicate: ["logList"], descendants: true }], ngImport: i0, template: "<fs-dialog *fsSkeleton=\"messageQueue\">\n <div mat-dialog-title>\n Message Queue\n </div>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"Overview\">\n <ng-template matTabContent>\n <div class=\"fs-row.gap-lg.wrap\">\n <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Recipients\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.toRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.ccRecipients.length\">\n <fs-label>\n CC\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.ccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.bccRecipients.length\">\n <fs-label>\n BCC\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.bccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.fromName || messageQueue.emailMessageQueue.fromEmail\">\n <fs-label>\n From\n </fs-label>\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromName === messageQueue.emailMessageQueue.fromEmail; else fromEmailName\">\n {{ messageQueue.emailMessageQueue.fromName }}\n </ng-container>\n <ng-template #fromEmailName>\n {{ messageQueue.emailMessageQueue.fromName }}\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromEmail\">\n ({{ messageQueue.emailMessageQueue.fromEmail }})\n </ng-container>\n </ng-template>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.replyEmail && messageQueue.emailMessageQueue.replyEmail.length\">\n <fs-label>\n Reply To\n </fs-label>\n {{ messageQueue.emailMessageQueue.replyEmail.join(', ') }}\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"messageQueue.smsMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Number\n </fs-label>\n <app-recipient\n [state]=\"messageQueue.state\"\n [name]=\"messageQueue.smsMessageQueue.toNumber\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.smsMessageQueue.fromNumber\">\n <fs-label>\n From Number\n </fs-label>\n {{ messageQueue.smsMessageQueue.fromNumber }}\n </fs-label-field>\n </ng-container>\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{ messageQueue.scheduledDate | fsDateFormat: 'full-date-time' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{ messageQueueStates[messageQueue.state] }}\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.message\">\n <fs-label>\n Message Type\n </fs-label>\n <a\n (click)=\"openMessage(messageQueue.message)\"\n *ngIf=\"loadMessage; else elseMessage\">\n {{ messageQueue.message.name }}\n </a>\n <ng-template #elseMessage>\n {{ messageQueue.message.name }}\n </ng-template>\n </fs-label-field>\n </div>\n <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field class=\"subject\">\n <fs-label>\n Subject\n </fs-label>\n {{ messageQueue.emailMessageQueue.subject }}\n </fs-label-field>\n <fs-label-field class=\"body\">\n <fs-label>\n Body\n </fs-label>\n <div\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.Text\"\n class=\"format-text\"\n [innerHTML]=\"messageQueue.emailMessageQueue.body\">\n </div>\n <fs-iframe\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.HTML || messageQueue.emailMessageQueue.format===emailMessageQueueFormat.RichText\"\n [html]=\"messageQueue.emailMessageQueue.body\"\n [width]=\"'100%'\">\n </fs-iframe>\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"messageQueue.smsMessageQueue\">\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.smsMessageQueue.body\">\n </div>\n </fs-label-field>\n </ng-container>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <fs-list\n [config]=\"logConfig\"\n #logList>\n <fs-list-column title=\"Message\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.message }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.createdDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Attachments\">\n <ng-template matTabContent>\n <fs-list [config]=\"attachmentConfig\">\n <fs-list-column title=\"File Name\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.filename }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.prettyFilesize }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Events\">\n <ng-template matTabContent>\n <fs-list [config]=\"eventConfig\">\n <fs-list-column title=\"Recipient\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.messageQueueRecipient.recipient }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Event\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ MessageQueueEventTypes[row.type] }}\n <div\n class=\"small\"\n *ngIf=\"row.type === MessageQueueEventType.Click\">\n <a\n [href]=\"row.meta?.url\"\n target=\"_blank\">\n {{ row.meta?.url }}\n </a>\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.createDate | fsDateFormat: 'date-time-yearless' }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n color=\"primary\">\n Done\n </button>\n <button\n mat-button\n *ngIf=\"resendMessageQueue\"\n type=\"button\"\n (click)=\"resend()\"\n type=\"button\">\n Resend\n </button>\n <button\n mat-button\n *ngIf=\"forwardMessageQueue\"\n type=\"button\"\n (click)=\"forward()\"\n type=\"button\">\n Forward\n </button>\n </mat-dialog-actions>\n</fs-dialog>", styles: [".subject,.body{display:block;margin-top:15px}.format-text{white-space:pre-wrap}app-recipient{display:block}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatTabContent, selector: "[matTabContent]" }, { kind: "component", type: i6.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i7.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i7.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i7.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "component", type: i8.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "component", type: i9.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i9.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["appearance", "showOutline", "disabled", "focused", "hoverable", "padless"] }, { kind: "component", type: i10.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { kind: "directive", type: i11.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "directive", type: i12.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: i13.FsIFrameComponent, selector: "fs-iframe", inputs: ["html", "src", "styles", "width", "height"], outputs: ["loaded"] }, { kind: "component", type: i14.RecipientComponent, selector: "app-recipient", inputs: ["name", "state"] }, { kind: "pipe", type: i10.FsDateFormatPipe, name: "fsDateFormat" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
211
211
|
}
|
|
212
212
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: QueueComponent, decorators: [{
|
|
213
213
|
type: Component,
|
|
214
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-dialog *fsSkeleton=\"messageQueue\">\n <div mat-dialog-title
|
|
214
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-dialog *fsSkeleton=\"messageQueue\">\n <div mat-dialog-title>\n Message Queue\n </div>\n <mat-dialog-content>\n <mat-tab-group>\n <mat-tab label=\"Overview\">\n <ng-template matTabContent>\n <div class=\"fs-row.gap-lg.wrap\">\n <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Recipients\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.toRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.ccRecipients.length\">\n <fs-label>\n CC\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.ccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.bccRecipients.length\">\n <fs-label>\n BCC\n </fs-label>\n <app-recipient\n *ngFor=\"let recipient of messageQueue.emailMessageQueue.bccRecipients\"\n [state]=\"messageQueueRecipients[recipient]\"\n [name]=\"recipient\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.fromName || messageQueue.emailMessageQueue.fromEmail\">\n <fs-label>\n From\n </fs-label>\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromName === messageQueue.emailMessageQueue.fromEmail; else fromEmailName\">\n {{ messageQueue.emailMessageQueue.fromName }}\n </ng-container>\n <ng-template #fromEmailName>\n {{ messageQueue.emailMessageQueue.fromName }}\n <ng-container *ngIf=\"messageQueue.emailMessageQueue.fromEmail\">\n ({{ messageQueue.emailMessageQueue.fromEmail }})\n </ng-container>\n </ng-template>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.emailMessageQueue.replyEmail && messageQueue.emailMessageQueue.replyEmail.length\">\n <fs-label>\n Reply To\n </fs-label>\n {{ messageQueue.emailMessageQueue.replyEmail.join(', ') }}\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"messageQueue.smsMessageQueue\">\n <fs-label-field>\n <fs-label>\n To Number\n </fs-label>\n <app-recipient\n [state]=\"messageQueue.state\"\n [name]=\"messageQueue.smsMessageQueue.toNumber\">\n </app-recipient>\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.smsMessageQueue.fromNumber\">\n <fs-label>\n From Number\n </fs-label>\n {{ messageQueue.smsMessageQueue.fromNumber }}\n </fs-label-field>\n </ng-container>\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{ messageQueue.scheduledDate | fsDateFormat: 'full-date-time' }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{ messageQueueStates[messageQueue.state] }}\n </fs-label-field>\n <fs-label-field *ngIf=\"messageQueue.message\">\n <fs-label>\n Message Type\n </fs-label>\n <a\n (click)=\"openMessage(messageQueue.message)\"\n *ngIf=\"loadMessage; else elseMessage\">\n {{ messageQueue.message.name }}\n </a>\n <ng-template #elseMessage>\n {{ messageQueue.message.name }}\n </ng-template>\n </fs-label-field>\n </div>\n <ng-container *ngIf=\"messageQueue.emailMessageQueue\">\n <fs-label-field class=\"subject\">\n <fs-label>\n Subject\n </fs-label>\n {{ messageQueue.emailMessageQueue.subject }}\n </fs-label-field>\n <fs-label-field class=\"body\">\n <fs-label>\n Body\n </fs-label>\n <div\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.Text\"\n class=\"format-text\"\n [innerHTML]=\"messageQueue.emailMessageQueue.body\">\n </div>\n <fs-iframe\n *ngIf=\"messageQueue.emailMessageQueue.format===emailMessageQueueFormat.HTML || messageQueue.emailMessageQueue.format===emailMessageQueueFormat.RichText\"\n [html]=\"messageQueue.emailMessageQueue.body\"\n [width]=\"'100%'\">\n </fs-iframe>\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"messageQueue.smsMessageQueue\">\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n <div\n class=\"format-text\"\n [innerHTML]=\"messageQueue.smsMessageQueue.body\">\n </div>\n </fs-label-field>\n </ng-container>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Logs\">\n <ng-template matTabContent>\n <fs-list\n [config]=\"logConfig\"\n #logList>\n <fs-list-column title=\"Message\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.message }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <fs-date-ago [date]=\"row.createdDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Attachments\">\n <ng-template matTabContent>\n <fs-list [config]=\"attachmentConfig\">\n <fs-list-column title=\"File Name\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.filename }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"File Size\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.prettyFilesize }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n <mat-tab label=\"Events\">\n <ng-template matTabContent>\n <fs-list [config]=\"eventConfig\">\n <fs-list-column title=\"Recipient\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.messageQueueRecipient.recipient }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Event\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ MessageQueueEventTypes[row.type] }}\n <div\n class=\"small\"\n *ngIf=\"row.type === MessageQueueEventType.Click\">\n <a\n [href]=\"row.meta?.url\"\n target=\"_blank\">\n {{ row.meta?.url }}\n </a>\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Date\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.createDate | fsDateFormat: 'date-time-yearless' }}\n </ng-template>\n </fs-list-column>\n </fs-list>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"null\"\n color=\"primary\">\n Done\n </button>\n <button\n mat-button\n *ngIf=\"resendMessageQueue\"\n type=\"button\"\n (click)=\"resend()\"\n type=\"button\">\n Resend\n </button>\n <button\n mat-button\n *ngIf=\"forwardMessageQueue\"\n type=\"button\"\n (click)=\"forward()\"\n type=\"button\">\n Forward\n </button>\n </mat-dialog-actions>\n</fs-dialog>", styles: [".subject,.body{display:block;margin-top:15px}.format-text{white-space:pre-wrap}app-recipient{display:block}\n"] }]
|
|
215
215
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
216
216
|
type: Inject,
|
|
217
217
|
args: [FS_APP_MESSAGE_CONFIG]
|
|
@@ -222,4 +222,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
222
222
|
type: ViewChild,
|
|
223
223
|
args: ['logList']
|
|
224
224
|
}] } });
|
|
225
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWUvcXVldWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWUvcXVldWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLGlCQUFpQixFQUMxQyxTQUFTLEVBQ1QsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sa0JBQWtCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRixPQUFPLEVBQUUsdUJBQXVC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LENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNqRixDQUFDO3VHQXhNVSxjQUFjLGtCQXFCZixxQkFBcUIsYUFDckIsZUFBZTsyRkF0QmQsY0FBYyx3SkNsQzNCLDhzUkEyT0E7OzJGRHpNYSxjQUFjO2tCQUwxQixTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU07OzBCQXVCNUMsTUFBTTsyQkFBQyxxQkFBcUI7OzBCQUM1QixNQUFNOzJCQUFDLGVBQWU7Z0pBbkJsQixPQUFPO3NCQURiLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IEZzTGlzdENvbXBvbmVudCwgRnNMaXN0Q29uZmlnIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGlzdCc7XG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgYW5jaG9ybWUgZnJvbSAnYW5jaG9ybWUnO1xuXG5pbXBvcnQgeyBpbmRleE5hbWVWYWx1ZSB9IGZyb20gJy4uLy4uLy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZHVsZXMvbWVzc2FnZXMvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGU19BUFBfTUVTU0FHRV9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi9hcHAtbWVzc2FnZS9pbmplY3RvcnMnO1xuaW1wb3J0IHsgRnNBcHBNZXNzYWdlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGb3J3YXJkTWVzc2FnZVF1ZXVlLCBMb2FkTWVzc2FnZSwgUmVzZW5kTWVzc2FnZVF1ZXVlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvdHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnZVF1ZXVlU3RhdGVzIH0gZnJvbSAnLi4vLi4vY29uc3RzJztcbmltcG9ydCB7IE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbWVzc2FnZS1xdWV1ZS1ldmVudC10eXBlLmNvbnN0JztcbmltcG9ydCB7IEVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0LCBNZXNzYWdlUXVldWVFdmVudFR5cGUsIE1lc3NhZ2VRdWV1ZVR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9xdWV1ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBRdWV1ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKCdsb2dMaXN0JylcbiAgcHVibGljIGxvZ0xpc3Q6IEZzTGlzdENvbXBvbmVudDtcblxuICBwdWJsaWMgbWVzc2FnZVF1ZXVlO1xuICBwdWJsaWMgbG9hZE1lc3NhZ2U6IExvYWRNZXNzYWdlO1xuICBwdWJsaWMgcmVzZW5kTWVzc2FnZVF1ZXVlOiBSZXNlbmRNZXNzYWdlUXVldWU7XG4gIHB1YmxpYyBmb3J3YXJkTWVzc2FnZVF1ZXVlOiBGb3J3YXJkTWVzc2FnZVF1ZXVlO1xuICBwdWJsaWMgbWVzc2FnZVF1ZXVlUmVjaXBpZW50cyA9IHt9O1xuICBwdWJsaWMgZW1haWxNZXNzYWdlUXVldWVGb3JtYXQgPSBFbWFpbE1lc3NhZ2VRdWV1ZUZvcm1hdDtcbiAgcHVibGljIG1lc3NhZ2VRdWV1ZVN0YXRlcztcbiAgcHVibGljIGxvZ0NvbmZpZzogRnNMaXN0Q29uZmlnO1xuICBwdWJsaWMgYXR0YWNobWVudENvbmZpZzogRnNMaXN0Q29uZmlnO1xuICBwdWJsaWMgZXZlbnRDb25maWc6IEZzTGlzdENvbmZpZztcbiAgcHVibGljIE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZXMgPSBpbmRleE5hbWVWYWx1ZShNZXNzYWdlUXVldWVFdmVudFR5cGVzKTtcbiAgcHVibGljIE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZSA9IE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChGU19BUFBfTUVTU0FHRV9DT05GSUcpIHByaXZhdGUgX2NvbmZpZzogRnNBcHBNZXNzYWdlQ29uZmlnLFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwcml2YXRlIF9kYXRhLFxuICAgIHByaXZhdGUgX21lc3NhZ2U6IEZzTWVzc2FnZSxcbiAgICBwcml2YXRlIF9wcm9tcHQ6IEZzUHJvbXB0LFxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tZXNzYWdlUXVldWVTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShNZXNzYWdlUXVldWVTdGF0ZXMpO1xuICAgIHRoaXMucmVzZW5kTWVzc2FnZVF1ZXVlID0gdGhpcy5fY29uZmlnLnJlc2VuZE1lc3NhZ2VRdWV1ZTtcbiAgICB0aGlzLmZvcndhcmRNZXNzYWdlUXVldWUgPSB0aGlzLl9jb25maWcuZm9yd2FyZE1lc3NhZ2VRdWV1ZTtcblxuICAgIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVF1ZXVlKHRoaXMuX2RhdGEubWVzc2FnZVF1ZXVlSWQpXG4gICAgLnN1YnNjcmliZSgobWVzc2FnZVF1ZXVlKSA9PiB7XG4gICAgICB0aGlzLm1lc3NhZ2VRdWV1ZSA9IG1lc3NhZ2VRdWV1ZTtcblxuICAgICAgaWYgKHRoaXMubWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlKSB7XG4gICAgICAgIGxldCBib2R5ID0gdGhpcy5tZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keTtcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZvcm1hdCA9PT0gRW1haWxNZXNzYWdlUXVldWVGb3JtYXQuSFRNTCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGJvZHksICd0ZXh0L2h0bWwnKTtcblxuICAgICAgICAgICAgZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2EnKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBib2R5ID0gZG9jLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw7XG5cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSB0aGlzLmFuY2hvck1lKGJvZHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keSA9IGJvZHk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWUpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlLmJvZHkgPSB0aGlzLmFuY2hvck1lKHRoaXMubWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS5ib2R5KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tZXNzYWdlUXVldWVSZWNpcGllbnRzID0gdGhpcy5tZXNzYWdlUXVldWUubWVzc2FnZVF1ZXVlUmVjaXBpZW50c1xuICAgICAgICAucmVkdWNlKChhY2N1bSwgbWVzc2FnZVF1ZXVlUmVjaXBpZW50KSA9PiB7XG4gICAgICAgICAgYWNjdW1bbWVzc2FnZVF1ZXVlUmVjaXBpZW50LnJlY2lwaWVudF0gPSBtZXNzYWdlUXVldWVSZWNpcGllbnQuc3RhdGU7XG5cbiAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgdGhpcy5fc2V0TG9nc0NvbmZpZyhtZXNzYWdlUXVldWUpO1xuICAgICAgdGhpcy5fc2V0QXR0YWNobWVudHNDb25maWcobWVzc2FnZVF1ZXVlKTtcbiAgICAgIHRoaXMuX3NldEV2ZW50c0NvbmZpZyhtZXNzYWdlUXVldWUpO1xuICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYW5jaG9yTWUoaW5wdXQpIHtcbiAgICByZXR1cm4gYW5jaG9ybWUoe1xuICAgICAgaW5wdXQsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oTWVzc2FnZUNvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAnODUlJ1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2VuZCgpIHtcbiAgICB0aGlzLl9wcm9tcHQuY29uZmlybSh7XG4gICAgICB0aXRsZTogJ0NvbmZpcm0nLFxuICAgICAgdGVtcGxhdGU6ICdBcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8gcmVzZW5kIHRoaXMgbWVzc2FnZT8nXG4gICAgfSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZW5kTWVzc2FnZVF1ZXVlKHRoaXMubWVzc2FnZVF1ZXVlKVxuICAgICAgLnN1YnNjcmliZShtZXNzYWdlUXVldWUgPT4ge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubWVzc2FnZVF1ZXVlLCBtZXNzYWdlUXVldWUpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTdWNjZXNzZnVsbHkgcmVzZW50Jyk7XG5cbiAgICAgICAgaWYgKHRoaXMubG9nTGlzdCkge1xuICAgICAgICAgIHRoaXMubG9nTGlzdC5yZWxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZm9yd2FyZCgpIHtcbiAgICBjb25zdCB0eXBlTmFtZSA9IHRoaXMubWVzc2FnZVF1ZXVlLnR5cGUgPT09IE1lc3NhZ2VRdWV1ZVR5cGUuRW1haWwgPyAnYW4gZW1haWwnIDogJ2EgcGhvbmUgbnVtYmVyJztcblxuICAgIHRoaXMuX3Byb21wdC5pbnB1dCh7XG4gICAgICBsYWJlbDogYFBsZWFzZSBlbnRlciAke3R5cGVOYW1lfSB0byBmb3J3YXJkIHRvYCxcbiAgICAgIHRpdGxlOiAnRm9yd2FyZCBNZXNzYWdlJyxcbiAgICAgIGNvbW1pdExhYmVsOiAnRm9yd2FyZCcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0pLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZm9yd2FyZE1lc3NhZ2VRdWV1ZSh0aGlzLm1lc3NhZ2VRdWV1ZSwgdmFsdWUpXG4gICAgICAgIC5zdWJzY3JpYmUobWVzc2FnZVF1ZXVlID0+IHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VRdWV1ZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMubWVzc2FnZVF1ZXVlLFxuICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTdWNjZXNzZnVsbHkgZm9yd2FyZGVkJyk7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHRoaXMubG9nTGlzdCkge1xuICAgICAgICAgICAgdGhpcy5sb2dMaXN0LnJlbG9hZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TG9nc0NvbmZpZyhtZXNzYWdlUXVldWUpIHtcbiAgICB0aGlzLmxvZ0NvbmZpZyA9IHtcbiAgICAgIGxvYWRNb3JlOiB0cnVlLFxuICAgICAgcXVlcnlQYXJhbTogZmFsc2UsXG4gICAgICBmZXRjaDogcXVlcnkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmxvYWRMb2dzKG1lc3NhZ2VRdWV1ZSwgcXVlcnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEV2ZW50c0NvbmZpZyhtZXNzYWdlUXVldWUpIHtcbiAgICB0aGlzLmV2ZW50Q29uZmlnID0ge1xuICAgICAgbG9hZE1vcmU6IHRydWUsXG4gICAgICBxdWVyeVBhcmFtOiBmYWxzZSxcbiAgICAgIGZldGNoOiAocXVlcnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVF1ZXVlRXZlbnRzKG1lc3NhZ2VRdWV1ZSwgcXVlcnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEF0dGFjaG1lbnRzQ29uZmlnKG1lc3NhZ2VRdWV1ZSkge1xuICAgIHRoaXMuYXR0YWNobWVudENvbmZpZyA9IHtcbiAgICAgIHF1ZXJ5UGFyYW06IGZhbHNlLFxuICAgICAgZmV0Y2g6IHF1ZXJ5ID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVF1ZXVlQXR0YWNobWVudHMobWVzc2FnZVF1ZXVlLCBxdWVyeSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcChyZXNwb25zZSA9PiAoe1xuICAgICAgICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhLm1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsdWUucHJldHR5RmlsZXNpemUgPSB0aGlzLl9wcmV0dHlGaWxlc2l6ZSh2YWx1ZS5maWxlc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICB9KSwgcGFnaW5nOiByZXNwb25zZS5wYWdpbmdcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLl9jb25maWcuZG93bmxvYWRNZXNzYWdlUXVldWVBdHRhY2htZW50KSB7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRDb25maWcucm93QWN0aW9ucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsaWNrOiAobWVzc2FnZUF0dGFjaG1lbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZy5kb3dubG9hZE1lc3NhZ2VRdWV1ZUF0dGFjaG1lbnQobWVzc2FnZUF0dGFjaG1lbnQsIHRoaXMubWVzc2FnZVF1ZXVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxhYmVsOiAnRG93bmxvYWQnLFxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3ByZXR0eUZpbGVzaXplKGJ5dGVzKSB7XG4gICAgaWYgKGJ5dGVzID09PSAwKSB7IHJldHVybiAnMC4wMCBCJzsgfVxuICAgIGNvbnN0IGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKDEwMjQpKTtcbiAgICByZXR1cm4gKGJ5dGVzIC8gTWF0aC5wb3coMTAyNCwgZSkpLnRvRml4ZWQoMikgKyAnICcgKyAnIEtNR1RQJy5jaGFyQXQoZSkgKyAnQic7XG4gIH1cbn1cbiIsIjxmcy1kaWFsb2cgKmZzU2tlbGV0b249XCJtZXNzYWdlUXVldWVcIj5cbiAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlPk1lc3NhZ2UgUXVldWU8L2Rpdj5cbiAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgIDxtYXQtdGFiIGxhYmVsPVwiT3ZlcnZpZXdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLXJvdy5nYXAtbGFyZ2Uud3JhcFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZVwiPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgVG8gUmVjaXBpZW50c1xuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGFwcC1yZWNpcGllbnQgXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmVjaXBpZW50IG9mIG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS50b1JlY2lwaWVudHNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHNbcmVjaXBpZW50XVwiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1yZWNpcGllbnQ+XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmNjUmVjaXBpZW50cy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICBDQ1xuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGFwcC1yZWNpcGllbnQgXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmVjaXBpZW50IG9mIG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5jY1JlY2lwaWVudHNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHNbcmVjaXBpZW50XVwiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1yZWNpcGllbnQ+ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5iY2NSZWNpcGllbnRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIEJDQ1xuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGFwcC1yZWNpcGllbnQgXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmVjaXBpZW50IG9mIG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5iY2NSZWNpcGllbnRzXCJcbiAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJtZXNzYWdlUXVldWVSZWNpcGllbnRzW3JlY2lwaWVudF1cIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwicmVjaXBpZW50XCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtcmVjaXBpZW50PiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbU5hbWUgfHwgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZyb21FbWFpbFwiPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIEZyb21cbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbU5hbWUgPT09IG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tRW1haWw7IGVsc2UgZnJvbUVtYWlsTmFtZVwiPlxuICAgICAgICAgICAgICAgICAge3ttZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbU5hbWV9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmcm9tRW1haWxOYW1lPlxuICAgICAgICAgICAgICAgICAge3ttZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbU5hbWV9fVxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tRW1haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgKHt7bWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZyb21FbWFpbH19KVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUucmVwbHlFbWFpbCAmJiBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUucmVwbHlFbWFpbC5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgICBSZXBseSBUb1xuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAge3ttZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUucmVwbHlFbWFpbC5qb2luKCcsICcpfX1cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZVwiPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgVG8gTnVtYmVyXG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICA8YXBwLXJlY2lwaWVudCBcbiAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJtZXNzYWdlUXVldWUuc3RhdGVcIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwibWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS50b051bWJlclwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLXJlY2lwaWVudD4gICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWUuZnJvbU51bWJlclwiPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIEZyb20gTnVtYmVyXG4gICAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgICB7e21lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWUuZnJvbU51bWJlcn19XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgXG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBEYXRlXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIHt7bWVzc2FnZVF1ZXVlLnNjaGVkdWxlZERhdGUgfCBmc0RhdGVGb3JtYXQ6ICdmdWxsLWRhdGUtdGltZSd9fVxuICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgU3RhdHVzXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIHt7bWVzc2FnZVF1ZXVlU3RhdGVzW21lc3NhZ2VRdWV1ZS5zdGF0ZV19fVxuICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwibWVzc2FnZVF1ZXVlLm1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIE1lc3NhZ2UgVHlwZVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuTWVzc2FnZShtZXNzYWdlUXVldWUubWVzc2FnZSlcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwibG9hZE1lc3NhZ2U7IGVsc2UgZWxzZU1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICB7e21lc3NhZ2VRdWV1ZS5tZXNzYWdlLm5hbWV9fVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZU1lc3NhZ2U+XG4gICAgICAgICAgICAgICAge3ttZXNzYWdlUXVldWUubWVzc2FnZS5uYW1lfX1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlXCI+XG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQgY2xhc3M9XCJzdWJqZWN0XCI+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBTdWJqZWN0XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIHt7bWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLnN1YmplY3R9fVxuICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkIGNsYXNzPVwiYm9keVwiPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgQm9keVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mb3JtYXQ9PT1lbWFpbE1lc3NhZ2VRdWV1ZUZvcm1hdC5UZXh0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybWF0LXRleHRcIlxuICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGZzLWlmcmFtZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZvcm1hdD09PWVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0LkhUTUwgfHwgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZvcm1hdD09PWVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0LlJpY2hUZXh0XCJcbiAgICAgICAgICAgICAgICBbaHRtbF09XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keVwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIicxMDAlJ1wiPlxuICAgICAgICAgICAgICA8L2ZzLWlmcmFtZT5cbiAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZVwiPlxuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgTWVzc2FnZVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtYXQtdGV4dFwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJtZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlLmJvZHlcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L21hdC10YWI+XG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIkxvZ3NcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgPGZzLWxpc3QgW2NvbmZpZ109XCJsb2dDb25maWdcIiAjbG9nTGlzdD5cbiAgICAgICAgICAgIDxmcy1saXN0LWNvbHVtbiB0aXRsZT1cIk1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICAgICAge3tyb3cubWVzc2FnZX19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRGF0ZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICA8ZnMtZGF0ZS1hZ28gW2RhdGVdPVwicm93LmNyZWF0ZWREYXRlXCI+PC9mcy1kYXRlLWFnbz5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgPC9mcy1saXN0PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9tYXQtdGFiPlxuICAgICAgPG1hdC10YWIgbGFiZWw9XCJBdHRhY2htZW50c1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICA8ZnMtbGlzdCBbY29uZmlnXT1cImF0dGFjaG1lbnRDb25maWdcIj5cbiAgICAgICAgICAgIDxmcy1saXN0LWNvbHVtbiB0aXRsZT1cIkZpbGUgTmFtZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICB7e3Jvdy5maWxlbmFtZX19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRmlsZSBTaXplXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIHt7cm93LnByZXR0eUZpbGVzaXplfX1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgPC9mcy1saXN0PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9tYXQtdGFiPlxuICAgICAgPG1hdC10YWIgbGFiZWw9XCJFdmVudHNcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgPGZzLWxpc3QgW2NvbmZpZ109XCJldmVudENvbmZpZ1wiPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiUmVjaXBpZW50XCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIHt7cm93Lm1lc3NhZ2VRdWV1ZVJlY2lwaWVudC5yZWNpcGllbnR9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICAgIDxmcy1saXN0LWNvbHVtbiB0aXRsZT1cIkV2ZW50XCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIHt7TWVzc2FnZVF1ZXVlRXZlbnRUeXBlc1tyb3cudHlwZV19fVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWFsbFwiICpuZ0lmPVwicm93LnR5cGUgPT09IE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZS5DbGlja1wiPlxuICAgICAgICAgICAgICAgICAgPGEgW2hyZWZdPVwicm93Lm1ldGE/LnVybFwiIHRhcmdldD1cIl9ibGFua1wiPnt7cm93Lm1ldGE/LnVybH19PC9hPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICAgIDxmcy1saXN0LWNvbHVtbiB0aXRsZT1cIkRhdGVcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICAgICAge3tyb3cuY3JlYXRlRGF0ZSB8IGZzRGF0ZUZvcm1hdDogJ2RhdGUtdGltZS15ZWFybGVzcyd9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICA8L2ZzLWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L21hdC10YWI+XG4gICAgPC9tYXQtdGFiLWdyb3VwPlxuICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgRG9uZVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAqbmdJZj1cInJlc2VuZE1lc3NhZ2VRdWV1ZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwicmVzZW5kKClcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICBSZXNlbmRcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgKm5nSWY9XCJmb3J3YXJkTWVzc2FnZVF1ZXVlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJmb3J3YXJkKClcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICBGb3J3YXJkXG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuPC9mcy1kaWFsb2c+XG4iXX0=
|
|
225
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWUvcXVldWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWUvcXVldWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLGlCQUFpQixFQUMxQyxTQUFTLEVBQ1QsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sa0JBQWtCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUM7QUFFaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRixPQUFPLEVBQUUsdUJBQXVC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LENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNqRixDQUFDO3VHQXhNVSxjQUFjLGtCQXFCZixxQkFBcUIsYUFDckIsZUFBZTsyRkF0QmQsY0FBYyx3SkNsQzNCLDBrU0FvUFk7OzJGRGxOQyxjQUFjO2tCQUwxQixTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU07OzBCQXVCNUMsTUFBTTsyQkFBQyxxQkFBcUI7OzBCQUM1QixNQUFNOzJCQUFDLGVBQWU7Z0pBbkJsQixPQUFPO3NCQURiLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IEZzTGlzdENvbXBvbmVudCwgRnNMaXN0Q29uZmlnIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGlzdCc7XG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgYW5jaG9ybWUgZnJvbSAnYW5jaG9ybWUnO1xuXG5pbXBvcnQgeyBpbmRleE5hbWVWYWx1ZSB9IGZyb20gJy4uLy4uLy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZHVsZXMvbWVzc2FnZXMvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGU19BUFBfTUVTU0FHRV9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi9hcHAtbWVzc2FnZS9pbmplY3RvcnMnO1xuaW1wb3J0IHsgRnNBcHBNZXNzYWdlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGb3J3YXJkTWVzc2FnZVF1ZXVlLCBMb2FkTWVzc2FnZSwgUmVzZW5kTWVzc2FnZVF1ZXVlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvdHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnZVF1ZXVlU3RhdGVzIH0gZnJvbSAnLi4vLi4vY29uc3RzJztcbmltcG9ydCB7IE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbWVzc2FnZS1xdWV1ZS1ldmVudC10eXBlLmNvbnN0JztcbmltcG9ydCB7IEVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0LCBNZXNzYWdlUXVldWVFdmVudFR5cGUsIE1lc3NhZ2VRdWV1ZVR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9xdWV1ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBRdWV1ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBAVmlld0NoaWxkKCdsb2dMaXN0JylcbiAgcHVibGljIGxvZ0xpc3Q6IEZzTGlzdENvbXBvbmVudDtcblxuICBwdWJsaWMgbWVzc2FnZVF1ZXVlO1xuICBwdWJsaWMgbG9hZE1lc3NhZ2U6IExvYWRNZXNzYWdlO1xuICBwdWJsaWMgcmVzZW5kTWVzc2FnZVF1ZXVlOiBSZXNlbmRNZXNzYWdlUXVldWU7XG4gIHB1YmxpYyBmb3J3YXJkTWVzc2FnZVF1ZXVlOiBGb3J3YXJkTWVzc2FnZVF1ZXVlO1xuICBwdWJsaWMgbWVzc2FnZVF1ZXVlUmVjaXBpZW50cyA9IHt9O1xuICBwdWJsaWMgZW1haWxNZXNzYWdlUXVldWVGb3JtYXQgPSBFbWFpbE1lc3NhZ2VRdWV1ZUZvcm1hdDtcbiAgcHVibGljIG1lc3NhZ2VRdWV1ZVN0YXRlcztcbiAgcHVibGljIGxvZ0NvbmZpZzogRnNMaXN0Q29uZmlnO1xuICBwdWJsaWMgYXR0YWNobWVudENvbmZpZzogRnNMaXN0Q29uZmlnO1xuICBwdWJsaWMgZXZlbnRDb25maWc6IEZzTGlzdENvbmZpZztcbiAgcHVibGljIE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZXMgPSBpbmRleE5hbWVWYWx1ZShNZXNzYWdlUXVldWVFdmVudFR5cGVzKTtcbiAgcHVibGljIE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZSA9IE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZTtcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChGU19BUFBfTUVTU0FHRV9DT05GSUcpIHByaXZhdGUgX2NvbmZpZzogRnNBcHBNZXNzYWdlQ29uZmlnLFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwcml2YXRlIF9kYXRhLFxuICAgIHByaXZhdGUgX21lc3NhZ2U6IEZzTWVzc2FnZSxcbiAgICBwcml2YXRlIF9wcm9tcHQ6IEZzUHJvbXB0LFxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tZXNzYWdlUXVldWVTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShNZXNzYWdlUXVldWVTdGF0ZXMpO1xuICAgIHRoaXMucmVzZW5kTWVzc2FnZVF1ZXVlID0gdGhpcy5fY29uZmlnLnJlc2VuZE1lc3NhZ2VRdWV1ZTtcbiAgICB0aGlzLmZvcndhcmRNZXNzYWdlUXVldWUgPSB0aGlzLl9jb25maWcuZm9yd2FyZE1lc3NhZ2VRdWV1ZTtcblxuICAgIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVF1ZXVlKHRoaXMuX2RhdGEubWVzc2FnZVF1ZXVlSWQpXG4gICAgLnN1YnNjcmliZSgobWVzc2FnZVF1ZXVlKSA9PiB7XG4gICAgICB0aGlzLm1lc3NhZ2VRdWV1ZSA9IG1lc3NhZ2VRdWV1ZTtcblxuICAgICAgaWYgKHRoaXMubWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlKSB7XG4gICAgICAgIGxldCBib2R5ID0gdGhpcy5tZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keTtcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZvcm1hdCA9PT0gRW1haWxNZXNzYWdlUXVldWVGb3JtYXQuSFRNTCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGJvZHksICd0ZXh0L2h0bWwnKTtcblxuICAgICAgICAgICAgZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2EnKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBib2R5ID0gZG9jLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw7XG5cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSB0aGlzLmFuY2hvck1lKGJvZHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keSA9IGJvZHk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWUpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlUXVldWUuc21zTWVzc2FnZVF1ZXVlLmJvZHkgPSB0aGlzLmFuY2hvck1lKHRoaXMubWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS5ib2R5KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tZXNzYWdlUXVldWVSZWNpcGllbnRzID0gdGhpcy5tZXNzYWdlUXVldWUubWVzc2FnZVF1ZXVlUmVjaXBpZW50c1xuICAgICAgICAucmVkdWNlKChhY2N1bSwgbWVzc2FnZVF1ZXVlUmVjaXBpZW50KSA9PiB7XG4gICAgICAgICAgYWNjdW1bbWVzc2FnZVF1ZXVlUmVjaXBpZW50LnJlY2lwaWVudF0gPSBtZXNzYWdlUXVldWVSZWNpcGllbnQuc3RhdGU7XG5cbiAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgdGhpcy5fc2V0TG9nc0NvbmZpZyhtZXNzYWdlUXVldWUpO1xuICAgICAgdGhpcy5fc2V0QXR0YWNobWVudHNDb25maWcobWVzc2FnZVF1ZXVlKTtcbiAgICAgIHRoaXMuX3NldEV2ZW50c0NvbmZpZyhtZXNzYWdlUXVldWUpO1xuICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYW5jaG9yTWUoaW5wdXQpIHtcbiAgICByZXR1cm4gYW5jaG9ybWUoe1xuICAgICAgaW5wdXQsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oTWVzc2FnZUNvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAnODUlJ1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2VuZCgpIHtcbiAgICB0aGlzLl9wcm9tcHQuY29uZmlybSh7XG4gICAgICB0aXRsZTogJ0NvbmZpcm0nLFxuICAgICAgdGVtcGxhdGU6ICdBcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8gcmVzZW5kIHRoaXMgbWVzc2FnZT8nXG4gICAgfSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZW5kTWVzc2FnZVF1ZXVlKHRoaXMubWVzc2FnZVF1ZXVlKVxuICAgICAgLnN1YnNjcmliZShtZXNzYWdlUXVldWUgPT4ge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMubWVzc2FnZVF1ZXVlLCBtZXNzYWdlUXVldWUpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTdWNjZXNzZnVsbHkgcmVzZW50Jyk7XG5cbiAgICAgICAgaWYgKHRoaXMubG9nTGlzdCkge1xuICAgICAgICAgIHRoaXMubG9nTGlzdC5yZWxvYWQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZm9yd2FyZCgpIHtcbiAgICBjb25zdCB0eXBlTmFtZSA9IHRoaXMubWVzc2FnZVF1ZXVlLnR5cGUgPT09IE1lc3NhZ2VRdWV1ZVR5cGUuRW1haWwgPyAnYW4gZW1haWwnIDogJ2EgcGhvbmUgbnVtYmVyJztcblxuICAgIHRoaXMuX3Byb21wdC5pbnB1dCh7XG4gICAgICBsYWJlbDogYFBsZWFzZSBlbnRlciAke3R5cGVOYW1lfSB0byBmb3J3YXJkIHRvYCxcbiAgICAgIHRpdGxlOiAnRm9yd2FyZCBNZXNzYWdlJyxcbiAgICAgIGNvbW1pdExhYmVsOiAnRm9yd2FyZCcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0pLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZm9yd2FyZE1lc3NhZ2VRdWV1ZSh0aGlzLm1lc3NhZ2VRdWV1ZSwgdmFsdWUpXG4gICAgICAgIC5zdWJzY3JpYmUobWVzc2FnZVF1ZXVlID0+IHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VRdWV1ZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMubWVzc2FnZVF1ZXVlLFxuICAgICAgICAgICAgbWVzc2FnZVF1ZXVlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTdWNjZXNzZnVsbHkgZm9yd2FyZGVkJyk7XG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHRoaXMubG9nTGlzdCkge1xuICAgICAgICAgICAgdGhpcy5sb2dMaXN0LnJlbG9hZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TG9nc0NvbmZpZyhtZXNzYWdlUXVldWUpIHtcbiAgICB0aGlzLmxvZ0NvbmZpZyA9IHtcbiAgICAgIGxvYWRNb3JlOiB0cnVlLFxuICAgICAgcXVlcnlQYXJhbTogZmFsc2UsXG4gICAgICBmZXRjaDogcXVlcnkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmxvYWRMb2dzKG1lc3NhZ2VRdWV1ZSwgcXVlcnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEV2ZW50c0NvbmZpZyhtZXNzYWdlUXVldWUpIHtcbiAgICB0aGlzLmV2ZW50Q29uZmlnID0ge1xuICAgICAgbG9hZE1vcmU6IHRydWUsXG4gICAgICBxdWVyeVBhcmFtOiBmYWxzZSxcbiAgICAgIGZldGNoOiAocXVlcnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVF1ZXVlRXZlbnRzKG1lc3NhZ2VRdWV1ZSwgcXVlcnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEF0dGFjaG1lbnRzQ29uZmlnKG1lc3NhZ2VRdWV1ZSkge1xuICAgIHRoaXMuYXR0YWNobWVudENvbmZpZyA9IHtcbiAgICAgIHF1ZXJ5UGFyYW06IGZhbHNlLFxuICAgICAgZmV0Y2g6IHF1ZXJ5ID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVF1ZXVlQXR0YWNobWVudHMobWVzc2FnZVF1ZXVlLCBxdWVyeSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcChyZXNwb25zZSA9PiAoe1xuICAgICAgICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhLm1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsdWUucHJldHR5RmlsZXNpemUgPSB0aGlzLl9wcmV0dHlGaWxlc2l6ZSh2YWx1ZS5maWxlc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICB9KSwgcGFnaW5nOiByZXNwb25zZS5wYWdpbmdcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLl9jb25maWcuZG93bmxvYWRNZXNzYWdlUXVldWVBdHRhY2htZW50KSB7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRDb25maWcucm93QWN0aW9ucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNsaWNrOiAobWVzc2FnZUF0dGFjaG1lbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZy5kb3dubG9hZE1lc3NhZ2VRdWV1ZUF0dGFjaG1lbnQobWVzc2FnZUF0dGFjaG1lbnQsIHRoaXMubWVzc2FnZVF1ZXVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxhYmVsOiAnRG93bmxvYWQnLFxuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3ByZXR0eUZpbGVzaXplKGJ5dGVzKSB7XG4gICAgaWYgKGJ5dGVzID09PSAwKSB7IHJldHVybiAnMC4wMCBCJzsgfVxuICAgIGNvbnN0IGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKDEwMjQpKTtcbiAgICByZXR1cm4gKGJ5dGVzIC8gTWF0aC5wb3coMTAyNCwgZSkpLnRvRml4ZWQoMikgKyAnICcgKyAnIEtNR1RQJy5jaGFyQXQoZSkgKyAnQic7XG4gIH1cbn1cbiIsIjxmcy1kaWFsb2cgKmZzU2tlbGV0b249XCJtZXNzYWdlUXVldWVcIj5cbiAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlPlxuICAgIE1lc3NhZ2UgUXVldWVcbiAgPC9kaXY+XG4gIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPG1hdC10YWItZ3JvdXA+XG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIk92ZXJ2aWV3XCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy1yb3cuZ2FwLWxnLndyYXBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWVcIj5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIFRvIFJlY2lwaWVudHNcbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxhcHAtcmVjaXBpZW50XG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmVjaXBpZW50IG9mIG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS50b1JlY2lwaWVudHNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHNbcmVjaXBpZW50XVwiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1yZWNpcGllbnQ+XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5jY1JlY2lwaWVudHMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgQ0NcbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIDxhcHAtcmVjaXBpZW50XG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmVjaXBpZW50IG9mIG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5jY1JlY2lwaWVudHNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHNbcmVjaXBpZW50XVwiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1yZWNpcGllbnQ+XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5iY2NSZWNpcGllbnRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIEJDQ1xuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGFwcC1yZWNpcGllbnRcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZWNpcGllbnQgb2YgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmJjY1JlY2lwaWVudHNcIlxuICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cIm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHNbcmVjaXBpZW50XVwiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1yZWNpcGllbnQ+XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tTmFtZSB8fCBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbUVtYWlsXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgRnJvbVxuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5mcm9tTmFtZSA9PT0gbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZyb21FbWFpbDsgZWxzZSBmcm9tRW1haWxOYW1lXCI+XG4gICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbU5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Zyb21FbWFpbE5hbWU+XG4gICAgICAgICAgICAgICAgICB7eyBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbU5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbUVtYWlsXCI+XG4gICAgICAgICAgICAgICAgICAgICh7eyBtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZnJvbUVtYWlsIH19KVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLnJlcGx5RW1haWwgJiYgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLnJlcGx5RW1haWwubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgUmVwbHkgVG9cbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5yZXBseUVtYWlsLmpvaW4oJywgJykgfX1cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWVcIj5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIFRvIE51bWJlclxuICAgICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGFwcC1yZWNpcGllbnRcbiAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJtZXNzYWdlUXVldWUuc3RhdGVcIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwibWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS50b051bWJlclwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLXJlY2lwaWVudD5cbiAgICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwibWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS5mcm9tTnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgRnJvbSBOdW1iZXJcbiAgICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWUuZnJvbU51bWJlciB9fVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBEYXRlXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZS5zY2hlZHVsZWREYXRlIHwgZnNEYXRlRm9ybWF0OiAnZnVsbC1kYXRlLXRpbWUnIH19XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgU3RhdHVzXG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZVN0YXRlc1ttZXNzYWdlUXVldWUuc3RhdGVdIH19XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwibWVzc2FnZVF1ZXVlLm1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIE1lc3NhZ2UgVHlwZVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5NZXNzYWdlKG1lc3NhZ2VRdWV1ZS5tZXNzYWdlKVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImxvYWRNZXNzYWdlOyBlbHNlIGVsc2VNZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAge3sgbWVzc2FnZVF1ZXVlLm1lc3NhZ2UubmFtZSB9fVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWxzZU1lc3NhZ2U+XG4gICAgICAgICAgICAgICAge3sgbWVzc2FnZVF1ZXVlLm1lc3NhZ2UubmFtZSB9fVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlXCI+XG4gICAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQgY2xhc3M9XCJzdWJqZWN0XCI+XG4gICAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgICBTdWJqZWN0XG4gICAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZS5lbWFpbE1lc3NhZ2VRdWV1ZS5zdWJqZWN0IH19XG4gICAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsLWZpZWxkIGNsYXNzPVwiYm9keVwiPlxuICAgICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgICAgQm9keVxuICAgICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuZm9ybWF0PT09ZW1haWxNZXNzYWdlUXVldWVGb3JtYXQuVGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtYXQtdGV4dFwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGZzLWlmcmFtZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZvcm1hdD09PWVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0LkhUTUwgfHwgbWVzc2FnZVF1ZXVlLmVtYWlsTWVzc2FnZVF1ZXVlLmZvcm1hdD09PWVtYWlsTWVzc2FnZVF1ZXVlRm9ybWF0LlJpY2hUZXh0XCJcbiAgICAgICAgICAgICAgICBbaHRtbF09XCJtZXNzYWdlUXVldWUuZW1haWxNZXNzYWdlUXVldWUuYm9keVwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIicxMDAlJ1wiPlxuICAgICAgICAgICAgICA8L2ZzLWlmcmFtZT5cbiAgICAgICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VRdWV1ZS5zbXNNZXNzYWdlUXVldWVcIj5cbiAgICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICAgIE1lc3NhZ2VcbiAgICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybWF0LXRleHRcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwibWVzc2FnZVF1ZXVlLnNtc01lc3NhZ2VRdWV1ZS5ib2R5XCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDxtYXQtdGFiIGxhYmVsPVwiTG9nc1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICA8ZnMtbGlzdFxuICAgICAgICAgICAgICBbY29uZmlnXT1cImxvZ0NvbmZpZ1wiXG4gICAgICAgICAgICAgICNsb2dMaXN0PlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiTWVzc2FnZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IHJvdy5tZXNzYWdlIH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRGF0ZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxmcy1kYXRlLWFnbyBbZGF0ZV09XCJyb3cuY3JlYXRlZERhdGVcIj48L2ZzLWRhdGUtYWdvPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICA8L2ZzLWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L21hdC10YWI+XG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIkF0dGFjaG1lbnRzXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgIDxmcy1saXN0IFtjb25maWddPVwiYXR0YWNobWVudENvbmZpZ1wiPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRmlsZSBOYW1lXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgICAgICAgICAgICBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICAgICAge3sgcm93LmZpbGVuYW1lIH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRmlsZSBTaXplXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgICAgICAgICAgICBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICAgICAge3sgcm93LnByZXR0eUZpbGVzaXplIH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgIDwvZnMtbGlzdD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDxtYXQtdGFiIGxhYmVsPVwiRXZlbnRzXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgIDxmcy1saXN0IFtjb25maWddPVwiZXZlbnRDb25maWdcIj5cbiAgICAgICAgICAgIDxmcy1saXN0LWNvbHVtbiB0aXRsZT1cIlJlY2lwaWVudFwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICAgICAgICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IHJvdy5tZXNzYWdlUXVldWVSZWNpcGllbnQucmVjaXBpZW50IH19XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRXZlbnRcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICBmcy1saXN0LWNlbGxcbiAgICAgICAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICB7eyBNZXNzYWdlUXVldWVFdmVudFR5cGVzW3Jvdy50eXBlXSB9fVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicm93LnR5cGUgPT09IE1lc3NhZ2VRdWV1ZUV2ZW50VHlwZS5DbGlja1wiPlxuICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJyb3cubWV0YT8udXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgcm93Lm1ldGE/LnVybCB9fVxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICAgIDxmcy1saXN0LWNvbHVtbiB0aXRsZT1cIkRhdGVcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICBmcy1saXN0LWNlbGxcbiAgICAgICAgICAgICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICB7eyByb3cuY3JlYXRlRGF0ZSB8IGZzRGF0ZUZvcm1hdDogJ2RhdGUtdGltZS15ZWFybGVzcycgfX1cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gICAgICAgICAgPC9mcy1saXN0PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9tYXQtdGFiPlxuICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPGJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIlxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgIERvbmVcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgKm5nSWY9XCJyZXNlbmRNZXNzYWdlUXVldWVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cInJlc2VuZCgpXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgUmVzZW5kXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICpuZ0lmPVwiZm9yd2FyZE1lc3NhZ2VRdWV1ZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiZm9yd2FyZCgpXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgRm9yd2FyZFxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbjwvZnMtZGlhbG9nPiJdfQ==
|
|
@@ -47,6 +47,7 @@ export class QueuesComponent {
|
|
|
47
47
|
}
|
|
48
48
|
ngOnInit() {
|
|
49
49
|
this.messageQueueStates = indexNameValue(MessageQueueStates);
|
|
50
|
+
this._initConfig();
|
|
50
51
|
this.initList();
|
|
51
52
|
this.initWebhook();
|
|
52
53
|
}
|
|
@@ -213,6 +214,12 @@ export class QueuesComponent {
|
|
|
213
214
|
this._destroy$.next(null);
|
|
214
215
|
this._destroy$.complete();
|
|
215
216
|
}
|
|
217
|
+
_initConfig() {
|
|
218
|
+
this.config = {
|
|
219
|
+
filters: [],
|
|
220
|
+
...this.config,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
216
223
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: QueuesComponent, deps: [{ token: FS_APP_MESSAGE_CONFIG }, { token: i1.FsMessageQueueService }, { token: i0.ChangeDetectorRef }, { token: i2.FsStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
217
224
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: QueuesComponent, selector: "fs-app-message-queues", inputs: { query: "query", type: "type", config: "config" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<ng-container *ngIf=\"webHookEnabled === false\">\n <fs-message-info>\n <div class=\"fs-row\">\n <span class=\"fs-flex\">\n The webhook which provides email delivery confirmations is not enabled.\n </span>\n <a\n (click)=\"enableWebhook()\"\n mat-raised-button>\n Enable\n </a>\n </div>\n </fs-message-info>\n</ng-container>\n<fs-list\n [config]=\"listConfig\"\n #list>\n <fs-list-column\n title=\"Message\"\n name=\"subject\"\n [sortable]=\"true\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <ng-container *ngIf=\"row.emailMessageQueue\">\n <a (click)=\"open(row)\">\n {{ row.emailMessageQueue.subject|truncate:100 }}\n </a>\n <ng-container *ngIf=\"row.messageQueueAttachmentCount\">\n <mat-icon\n class=\"attachment-icon\"\n [matTooltip]=\"row.messageQueueAttachmentCount + ' Attachment(s)'\">\n attach_file\n </mat-icon>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"row.smsMessageQueue\">\n <a (click)=\"open(row)\">\n {{ row.smsMessageQueue.body|truncate:100 }}\n </a>\n </ng-container>\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Recipients\"\n class=\"col-recipients\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <ng-container *ngIf=\"row.emailMessageQueue\">\n <ng-container *ngIf=\"row.emailMessageQueue.toRecipients.length; else unspecified\">\n <div\n class=\"small\"\n *ngFor=\"let recipient of row.emailMessageQueue.toRecipients\">\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n </ng-container>\n <div\n class=\"small\"\n *ngFor=\"let recipient of row.emailMessageQueue.ccRecipients\">\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n <div\n class=\"small\"\n *ngFor=\"let recipient of row.emailMessageQueue.bccRecipients\">\n <app-recipient\n [state]=\"row.messageQueueRecipients[recipient] || row.state\"\n [name]=\"recipient\">\n </app-recipient>\n </div>\n </ng-container>\n <ng-container *ngIf=\"row.smsMessageQueue\">\n <ng-container *ngIf=\"row.smsMessageQueue.toNumber; else unspecified\">\n <app-recipient\n class=\"small\"\n [state]=\"row.state\"\n [name]=\"row.smsMessageQueue.toNumber\">\n </app-recipient>\n </ng-container>\n </ng-container>\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Status\"\n class=\"col-state\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n <ng-container *ngIf=\"row.scheduled; else state\">\n Scheduled\n <div class=\"small\">\n {{ row.scheduledDate | fsDateFormat: 'date-time' }}\n </div>\n </ng-container>\n <ng-template #state>\n <span [class]=\"'state-' + row.state\">\n {{ messageQueueStates[row.state] }}\n </span>\n </ng-template>\n </ng-template>\n </fs-list-column>\n <fs-list-column\n title=\"Date\"\n name=\"created_date\"\n [sortable]=\"true\">\n <ng-template\n fs-list-cell\n let-row=\"row\">\n {{ row.createdDate | fsDateFormat: 'date-time-yeardiff' }}\n </ng-template>\n </fs-list-column>\n</fs-list>\n<ng-template #unspecified>\n <app-recipient\n class=\"small\"\n [state]=\"MessageQueueState.Failed\"\n name=\"Unspecified\">\n </app-recipient>\n</ng-template>", styles: [":host ::ng-deep .col-recipients small+small:before{content:\", \"}:host ::ng-deep .col-state .state-F,:host ::ng-deep .col-state .state-P{color:#d8524e}.attachment-icon{vertical-align:bottom}fs-message-info{margin-bottom:10px;display:block}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i5.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i7.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i7.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "directive", type: i8.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: i9.FsMessageInfoComponent, selector: "fs-message-info" }, { kind: "component", type: i10.RecipientComponent, selector: "app-recipient", inputs: ["name", "state"] }, { kind: "pipe", type: i11.FsDateFormatPipe, name: "fsDateFormat" }, { kind: "pipe", type: i12.TruncatePipe, name: "truncate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
218
225
|
}
|
|
@@ -232,4 +239,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
232
239
|
}], config: [{
|
|
233
240
|
type: Input
|
|
234
241
|
}] } });
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9tZXNzYWdlLXF1ZXVlcy9jb21wb25lbnRzL3F1ZXVlcy9xdWV1ZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWVzL3F1ZXVlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduSSxPQUFPLEVBQUUsUUFBUSxFQUFZLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUF3QixlQUFlLEVBQWdCLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FB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QUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3FCQUN4RCxDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7WUFDTixDQUFDO1NBQ0ssQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVNLElBQUksQ0FBQyxZQUFZO1FBQ3RCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2FBQ3hELElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO3VHQXROVSxlQUFlLGtCQWtCaEIscUJBQXFCOzJGQWxCcEIsZUFBZSwrSkFFZixlQUFlLDhEQy9CNUIsZzNIQTRIYzs7MkZEL0ZELGVBQWU7a0JBTjNCLFNBQVM7K0JBQ0UsdUJBQXVCLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNOzswQkFvQjVDLE1BQU07MkJBQUMscUJBQXFCO21JQWZ4QixJQUFJO3NCQURWLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHNUIsS0FBSztzQkFBcEIsS0FBSztnQkFFVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5cbmltcG9ydCB7IEl0ZW1UeXBlLCBUZXh0SXRlbSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc0xpc3RBY3Rpb25TZWxlY3RlZCwgRnNMaXN0Q29tcG9uZW50LCBGc0xpc3RDb25maWcsIFBhZ2luYXRpb25TdHJhdGVneSB9IGZyb20gJ0BmaXJlc3RpdGNoL2xpc3QnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQWN0aW9uVHlwZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBGc1N0b3JlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc3RvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGlzQWZ0ZXIgfSBmcm9tICdkYXRlLWZucyc7XG5cbmltcG9ydCB7IGluZGV4TmFtZVZhbHVlIH0gZnJvbSAnLi4vLi4vLi4vLi4vaGVscGVycyc7XG5pbXBvcnQgeyBNZXNzYWdlUXVldWVzQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGU19BUFBfTUVTU0FHRV9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi9hcHAtbWVzc2FnZS9pbmplY3RvcnMnO1xuaW1wb3J0IHsgRnNBcHBNZXNzYWdlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZXNzYWdlUXVldWVTdGF0ZXMgfSBmcm9tICcuLi8uLi9jb25zdHMnO1xuaW1wb3J0IHsgTWVzc2FnZVF1ZXVlVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IE1lc3NhZ2VRdWV1ZVN0YXRlIH0gZnJvbSAnLi4vLi4vZW51bXMvbWVzc2FnZS1xdWV1ZS1zdGF0ZS5lbnVtJztcbmltcG9ydCB7IEZzTWVzc2FnZVF1ZXVlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2UtcXVldWUuc2VydmljZSc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtYXBwLW1lc3NhZ2UtcXVldWVzJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVldWVzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWV1ZXMuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUXVldWVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBWaWV3Q2hpbGQoRnNMaXN0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgbGlzdDogRnNMaXN0Q29tcG9uZW50ID0gbnVsbDtcblxuICBASW5wdXQoKSBwdWJsaWMgcXVlcnkgPSB7fTtcblxuICBASW5wdXQoKSBwdWJsaWMgdHlwZTogTWVzc2FnZVF1ZXVlVHlwZTtcbiAgQElucHV0KCkgcHVibGljIGNvbmZpZzogTWVzc2FnZVF1ZXVlc0NvbmZpZztcblxuICBwdWJsaWMgbGlzdENvbmZpZzogRnNMaXN0Q29uZmlnID0gbnVsbDtcbiAgcHVibGljIG1lc3NhZ2VRdWV1ZVN0YXRlcyA9IHt9O1xuICBwdWJsaWMgTWVzc2FnZVF1ZXVlU3RhdGUgPSBNZXNzYWdlUXVldWVTdGF0ZTtcbiAgcHVibGljIHdlYkhvb2tFbmFibGVkO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEZTX0FQUF9NRVNTQUdFX0NPTkZJRykgcHJpdmF0ZSBfY29uZmlnOiBGc0FwcE1lc3NhZ2VDb25maWcsXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVF1ZXVlU2VydmljZTogRnNNZXNzYWdlUXVldWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9zdG9yZTogRnNTdG9yZSxcbiAgKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tZXNzYWdlUXVldWVTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShNZXNzYWdlUXVldWVTdGF0ZXMpO1xuICAgIHRoaXMuaW5pdExpc3QoKTtcbiAgICB0aGlzLmluaXRXZWJob29rKCk7XG4gIH1cblxuICBwdWJsaWMgZW5hYmxlV2ViaG9vaygpIHtcbiAgICB0aGlzLl9jb25maWcuY3JlYXRlV2ViaG9vaygpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5pbml0V2ViaG9vaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaW5pdFdlYmhvb2soKSB7XG4gICAgY29uc3QgZG9tYWluID0gZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWU7XG5cbiAgICBpZihkb21haW4gPT09ICdsb2NhbGhvc3QnIHx8IGRvbWFpbiA9PT0gJ1s6OjFdJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbmZpZy5sb2FkV2ViaG9va3MoeyBkb21haW4gfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiAhdGhpcy5fc3RvcmUuZ2V0KCdtZXNzYWdlc1dlYmhvb2tFbmFibGVkJyk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgod2ViaG9va3MpID0+IHtcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMud2ViSG9va0VuYWJsZWQgPSB3ZWJob29rc1xuICAgICAgICAgIC5zb21lKCh3ZWJob29rKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHdlYmhvb2sudXJsKTtcblxuICAgICAgICAgICAgcmV0dXJuIHVybC5ob3N0ID09PSBkb21haW47XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc3RvcmUuc2V0KCdtZXNzYWdlc1dlYmhvb2tFbmFibGVkJywgdGhpcy53ZWJIb29rRW5hYmxlZCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0TGlzdCgpIHtcbiAgICB0aGlzLmxpc3RDb25maWcgPSB7XG4gICAgICBmaWx0ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgdHlwZTogSXRlbVR5cGUuS2V5d29yZCxcbiAgICAgICAgICBsYWJlbDogJ1NlYXJjaCcsXG4gICAgICAgICAgY2hhbmdlOiAoaXRlbTogVGV4dEl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmKFN0cmluZyhpdGVtLnZhbHVlID8/ICcnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5saXN0LmZpbHRlclJlZlxuICAgICAgICAgICAgICAgIC51cGRhdGVTb3J0KHsgXG4gICAgICAgICAgICAgICAgICBzb3J0Qnk6ICdyZWxldmFuY2UnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5saXN0LmZpbHRlclJlZlxuICAgICAgICAgICAgICAgIC51cGRhdGVTb3J0KHsgXG4gICAgICAgICAgICAgICAgICBzb3J0Qnk6ICdjcmVhdGVkX2RhdGUnLFxuICAgICAgICAgICAgICAgICAgc29ydERpcmVjdGlvbjogJ2Rlc2MnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc3RhdGUnLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLlNlbGVjdCxcbiAgICAgICAgICBsYWJlbDogJ1N0YXR1cycsXG4gICAgICAgICAgdmFsdWVzOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gTWVzc2FnZVF1ZXVlU3RhdGVzO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZGF0ZScsXG4gICAgICAgICAgdHlwZTogSXRlbVR5cGUuRGF0ZVJhbmdlLFxuICAgICAgICAgIGxhYmVsOiBbJ0Zyb20gRGF0ZScsICdUbyBEYXRlJ10sXG4gICAgICAgIH0sXG4gICAgICAgIC4uLih0aGlzLmNvbmZpZz8uZmlsdGVycyB8fCBbXSksXG4gICAgICBdLFxuICAgICAgcGFnaW5nOiB7XG4gICAgICAgIHN0cmF0ZWd5OiBQYWdpbmF0aW9uU3RyYXRlZ3kuTWFueSxcbiAgICAgIH0sXG4gICAgICBzb3J0czogW1xuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6ICdyZWxldmFuY2UnLFxuICAgICAgICAgIG5hbWU6ICdSZWxldmFuY2UnLFxuICAgICAgICAgIGRpcmVjdGlvbjogJ2Rlc2MnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHNvcnQ6IHsgXG4gICAgICAgIHZhbHVlOiAnY3JlYXRlZF9kYXRlJywgXG4gICAgICAgIGRpcmVjdGlvbjogJ2Rlc2MnLFxuICAgICAgfSxcbiAgICAgIGZldGNoOiAocXVlcnkpID0+IHtcbiAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgLi4ucXVlcnksXG4gICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgbWVzc2FnZVF1ZXVlQXR0YWNobWVudENvdW50czogdHJ1ZSxcbiAgICAgICAgICBlbWFpbE1lc3NhZ2VRdWV1ZXM6IHRydWUsXG4gICAgICAgICAgZW1haWxNZXNzYWdlUXVldWVCb2RpZXM6IGZhbHNlLFxuICAgICAgICAgIHNtc01lc3NhZ2VRdWV1ZXM6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZVF1ZXVlcyhxdWVyeSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+ICh7XG4gICAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLmRhdGFcbiAgICAgICAgICAgICAgICAubWFwKChtZXNzYWdlUXVldWUpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLm1lc3NhZ2VRdWV1ZSxcbiAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkOiBtZXNzYWdlUXVldWUuc3RhdGUgPT09IE1lc3NhZ2VRdWV1ZVN0YXRlLlF1ZXVlZCAmJiBpc0FmdGVyKG1lc3NhZ2VRdWV1ZS5zY2hlZHVsZWREYXRlLCBuZXcgRGF0ZSgpKSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVF1ZXVlUmVjaXBpZW50czogbWVzc2FnZVF1ZXVlLm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHNcbiAgICAgICAgICAgICAgICAgICAgICAucmVkdWNlKChhY2N1bSwgbWVzc2FnZVF1ZXVlUmVjaXBpZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2N1bVttZXNzYWdlUXVldWVSZWNpcGllbnQucmVjaXBpZW50XSA9IG1lc3NhZ2VRdWV1ZVJlY2lwaWVudC5zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICAgICAgICAgICAgICAgIH0sIHt9KSxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSksIHBhZ2luZzogcmVzcG9uc2UucGFnaW5nLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLmJ1bGtNZXNzYWdlUXVldWVzKSB7XG4gICAgICB0aGlzLmxpc3RDb25maWcuc2VsZWN0aW9uID0ge1xuICAgICAgICBzZWxlY3RBbGw6IGZhbHNlLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogU2VsZWN0aW9uQWN0aW9uVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICBuYW1lOiAncXVldWUnLFxuICAgICAgICAgICAgbGFiZWw6ICdRdWV1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBTZWxlY3Rpb25BY3Rpb25UeXBlLkFjdGlvbixcbiAgICAgICAgICAgIG5hbWU6ICdyZXNlbmQnLFxuICAgICAgICAgICAgbGFiZWw6ICdSZXNlbmQnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogU2VsZWN0aW9uQWN0aW9uVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICBuYW1lOiAnY2FuY2VsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnQ2FuY2VsJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBhY3Rpb25TZWxlY3RlZDogKGFjdGlvblNlbGVjdGVkOiBGc0xpc3RBY3Rpb25TZWxlY3RlZCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9jb25maWcuYnVsa01lc3NhZ2VRdWV1ZXMoYWN0aW9uU2VsZWN0ZWQuYWN0aW9uLm5hbWUsIGFjdGlvblNlbGVjdGVkLnNlbGVjdGVkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0LnJlbG9hZCgpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnLmZpbHRlcnMucHVzaCh7XG4gICAgICBuYW1lOiAnbWVzc2FnZUlkJyxcbiAgICAgIHR5cGU6IEl0ZW1UeXBlLlNlbGVjdCxcbiAgICAgIGxhYmVsOiAnTWVzc2FnZSBUeXBlJyxcbiAgICAgIHZhbHVlczogKHF1ZXJ5KSA9PiB7XG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnF1ZXJ5LFxuICAgICAgICAgIGxpbWl0OiA1MCxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmxvYWRNZXNzYWdlcyhxdWVyeSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICB7IHZhbHVlOiBudWxsLCBuYW1lOiAnQWxsJyB9LFxuICAgICAgICAgICAgICAgIC4uLnJlc3BvbnNlLmRhdGFcbiAgICAgICAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+ICh7IG5hbWU6IGl0ZW0ubmFtZSwgdmFsdWU6IGl0ZW0uaWQgfSkpLFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSBhcyBhbnkpO1xuICB9XG5cbiAgcHVibGljIG9wZW4obWVzc2FnZVF1ZXVlKSB7XG4gICAgdGhpcy5fbWVzc2FnZVF1ZXVlU2VydmljZS5vcGVuTWVzc2FnZVF1ZXVlKG1lc3NhZ2VRdWV1ZS5pZClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubGlzdC5yZWxvYWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQobnVsbCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIndlYkhvb2tFbmFibGVkID09PSBmYWxzZVwiPlxuICA8ZnMtbWVzc2FnZS1pbmZvPlxuICAgIDxkaXYgY2xhc3M9XCJmcy1yb3dcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZnMtZmxleFwiPlxuICAgICAgICBUaGUgd2ViaG9vayB3aGljaCBwcm92aWRlcyBlbWFpbCBkZWxpdmVyeSBjb25maXJtYXRpb25zIGlzIG5vdCBlbmFibGVkLlxuICAgICAgPC9zcGFuPlxuICAgICAgPGFcbiAgICAgICAgICAoY2xpY2spPVwiZW5hYmxlV2ViaG9vaygpXCJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbj5cbiAgICAgICAgRW5hYmxlXG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZnMtbWVzc2FnZS1pbmZvPlxuPC9uZy1jb250YWluZXI+XG48ZnMtbGlzdFxuICAgIFtjb25maWddPVwibGlzdENvbmZpZ1wiXG4gICAgI2xpc3Q+XG4gIDxmcy1saXN0LWNvbHVtblxuICAgICAgdGl0bGU9XCJNZXNzYWdlXCJcbiAgICAgIG5hbWU9XCJzdWJqZWN0XCJcbiAgICAgIFtzb3J0YWJsZV09XCJ0cnVlXCI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICBsZXQtcm93PVwicm93XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LmVtYWlsTWVzc2FnZVF1ZXVlXCI+XG4gICAgICAgIDxhIChjbGljayk9XCJvcGVuKHJvdylcIj5cbiAgICAgICAgICB7eyByb3cuZW1haWxNZXNzYWdlUXVldWUuc3ViamVjdHx0cnVuY2F0ZToxMDAgfX1cbiAgICAgICAgPC9hPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93Lm1lc3NhZ2VRdWV1ZUF0dGFjaG1lbnRDb3VudFwiPlxuICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgICBjbGFzcz1cImF0dGFjaG1lbnQtaWNvblwiXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInJvdy5tZXNzYWdlUXVldWVBdHRhY2htZW50Q291bnQgKyAnIEF0dGFjaG1lbnQocyknXCI+XG4gICAgICAgICAgICBhdHRhY2hfZmlsZVxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LnNtc01lc3NhZ2VRdWV1ZVwiPlxuICAgICAgICA8YSAoY2xpY2spPVwib3Blbihyb3cpXCI+XG4gICAgICAgICAge3sgcm93LnNtc01lc3NhZ2VRdWV1ZS5ib2R5fHRydW5jYXRlOjEwMCB9fVxuICAgICAgICA8L2E+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8ZnMtbGlzdC1jb2x1bW5cbiAgICAgIHRpdGxlPVwiUmVjaXBpZW50c1wiXG4gICAgICBjbGFzcz1cImNvbC1yZWNpcGllbnRzXCI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICBsZXQtcm93PVwicm93XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LmVtYWlsTWVzc2FnZVF1ZXVlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuZW1haWxNZXNzYWdlUXVldWUudG9SZWNpcGllbnRzLmxlbmd0aDsgZWxzZSB1bnNwZWNpZmllZFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZWNpcGllbnQgb2Ygcm93LmVtYWlsTWVzc2FnZVF1ZXVlLnRvUmVjaXBpZW50c1wiPlxuICAgICAgICAgICAgPGFwcC1yZWNpcGllbnRcbiAgICAgICAgICAgICAgW3N0YXRlXT1cInJvdy5tZXNzYWdlUXVldWVSZWNpcGllbnRzW3JlY2lwaWVudF0gfHwgcm93LnN0YXRlXCJcbiAgICAgICAgICAgICAgW25hbWVdPVwicmVjaXBpZW50XCI+XG4gICAgICAgICAgICA8L2FwcC1yZWNpcGllbnQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNtYWxsXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZWNpcGllbnQgb2Ygcm93LmVtYWlsTWVzc2FnZVF1ZXVlLmNjUmVjaXBpZW50c1wiPlxuICAgICAgICAgIDxhcHAtcmVjaXBpZW50XG4gICAgICAgICAgICBbc3RhdGVdPVwicm93Lm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHNbcmVjaXBpZW50XSB8fCByb3cuc3RhdGVcIlxuICAgICAgICAgICAgW25hbWVdPVwicmVjaXBpZW50XCI+XG4gICAgICAgICAgPC9hcHAtcmVjaXBpZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzbWFsbFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmVjaXBpZW50IG9mIHJvdy5lbWFpbE1lc3NhZ2VRdWV1ZS5iY2NSZWNpcGllbnRzXCI+XG4gICAgICAgICAgPGFwcC1yZWNpcGllbnRcbiAgICAgICAgICAgIFtzdGF0ZV09XCJyb3cubWVzc2FnZVF1ZXVlUmVjaXBpZW50c1tyZWNpcGllbnRdIHx8IHJvdy5zdGF0ZVwiXG4gICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICA8L2FwcC1yZWNpcGllbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LnNtc01lc3NhZ2VRdWV1ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LnNtc01lc3NhZ2VRdWV1ZS50b051bWJlcjsgZWxzZSB1bnNwZWNpZmllZFwiPlxuICAgICAgICAgIDxhcHAtcmVjaXBpZW50XG4gICAgICAgICAgICBjbGFzcz1cInNtYWxsXCJcbiAgICAgICAgICAgIFtzdGF0ZV09XCJyb3cuc3RhdGVcIlxuICAgICAgICAgICAgW25hbWVdPVwicm93LnNtc01lc3NhZ2VRdWV1ZS50b051bWJlclwiPlxuICAgICAgICAgIDwvYXBwLXJlY2lwaWVudD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8ZnMtbGlzdC1jb2x1bW5cbiAgICAgIHRpdGxlPVwiU3RhdHVzXCJcbiAgICAgIGNsYXNzPVwiY29sLXN0YXRlXCI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIGZzLWxpc3QtY2VsbFxuICAgICAgICBsZXQtcm93PVwicm93XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LnNjaGVkdWxlZDsgZWxzZSBzdGF0ZVwiPlxuICAgICAgICBTY2hlZHVsZWRcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsXCI+XG4gICAgICAgICAge3sgcm93LnNjaGVkdWxlZERhdGUgfCBmc0RhdGVGb3JtYXQ6ICdkYXRlLXRpbWUnIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI3N0YXRlPlxuICAgICAgICA8c3BhbiBbY2xhc3NdPVwiJ3N0YXRlLScgKyByb3cuc3RhdGVcIj5cbiAgICAgICAgICB7eyBtZXNzYWdlUXVldWVTdGF0ZXNbcm93LnN0YXRlXSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbGlzdC1jb2x1bW4+XG4gIDxmcy1saXN0LWNvbHVtblxuICAgICAgdGl0bGU9XCJEYXRlXCJcbiAgICAgIG5hbWU9XCJjcmVhdGVkX2RhdGVcIlxuICAgICAgW3NvcnRhYmxlXT1cInRydWVcIj5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIHt7IHJvdy5jcmVhdGVkRGF0ZSB8IGZzRGF0ZUZvcm1hdDogJ2RhdGUtdGltZS15ZWFyZGlmZicgfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuPC9mcy1saXN0PlxuPG5nLXRlbXBsYXRlICN1bnNwZWNpZmllZD5cbiAgPGFwcC1yZWNpcGllbnRcbiAgICBjbGFzcz1cInNtYWxsXCJcbiAgICBbc3RhdGVdPVwiTWVzc2FnZVF1ZXVlU3RhdGUuRmFpbGVkXCJcbiAgICBuYW1lPVwiVW5zcGVjaWZpZWRcIj5cbiAgPC9hcHAtcmVjaXBpZW50PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9tZXNzYWdlLXF1ZXVlcy9jb21wb25lbnRzL3F1ZXVlcy9xdWV1ZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL21lc3NhZ2UtcXVldWVzL2NvbXBvbmVudHMvcXVldWVzL3F1ZXVlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduSSxPQUFPLEVBQUUsUUFBUSxFQUFZLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUF3QixlQUFlLEVBQWdCLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FB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bXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5cbmltcG9ydCB7IEl0ZW1UeXBlLCBUZXh0SXRlbSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc0xpc3RBY3Rpb25TZWxlY3RlZCwgRnNMaXN0Q29tcG9uZW50LCBGc0xpc3RDb25maWcsIFBhZ2luYXRpb25TdHJhdGVneSB9IGZyb20gJ0BmaXJlc3RpdGNoL2xpc3QnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQWN0aW9uVHlwZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBGc1N0b3JlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc3RvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGlzQWZ0ZXIgfSBmcm9tICdkYXRlLWZucyc7XG5cbmltcG9ydCB7IGluZGV4TmFtZVZhbHVlIH0gZnJvbSAnLi4vLi4vLi4vLi4vaGVscGVycyc7XG5pbXBvcnQgeyBNZXNzYWdlUXVldWVzQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGU19BUFBfTUVTU0FHRV9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi9hcHAtbWVzc2FnZS9pbmplY3RvcnMnO1xuaW1wb3J0IHsgRnNBcHBNZXNzYWdlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vYXBwLW1lc3NhZ2UvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZXNzYWdlUXVldWVTdGF0ZXMgfSBmcm9tICcuLi8uLi9jb25zdHMnO1xuaW1wb3J0IHsgTWVzc2FnZVF1ZXVlVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IE1lc3NhZ2VRdWV1ZVN0YXRlIH0gZnJvbSAnLi4vLi4vZW51bXMvbWVzc2FnZS1xdWV1ZS1zdGF0ZS5lbnVtJztcbmltcG9ydCB7IEZzTWVzc2FnZVF1ZXVlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lc3NhZ2UtcXVldWUuc2VydmljZSc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtYXBwLW1lc3NhZ2UtcXVldWVzJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVldWVzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWV1ZXMuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUXVldWVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBWaWV3Q2hpbGQoRnNMaXN0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgbGlzdDogRnNMaXN0Q29tcG9uZW50ID0gbnVsbDtcblxuICBASW5wdXQoKSBwdWJsaWMgcXVlcnkgPSB7fTtcblxuICBASW5wdXQoKSBwdWJsaWMgdHlwZTogTWVzc2FnZVF1ZXVlVHlwZTtcbiAgQElucHV0KCkgcHVibGljIGNvbmZpZzogTWVzc2FnZVF1ZXVlc0NvbmZpZztcblxuICBwdWJsaWMgbGlzdENvbmZpZzogRnNMaXN0Q29uZmlnID0gbnVsbDtcbiAgcHVibGljIG1lc3NhZ2VRdWV1ZVN0YXRlcyA9IHt9O1xuICBwdWJsaWMgTWVzc2FnZVF1ZXVlU3RhdGUgPSBNZXNzYWdlUXVldWVTdGF0ZTtcbiAgcHVibGljIHdlYkhvb2tFbmFibGVkO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEZTX0FQUF9NRVNTQUdFX0NPTkZJRykgcHJpdmF0ZSBfY29uZmlnOiBGc0FwcE1lc3NhZ2VDb25maWcsXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVF1ZXVlU2VydmljZTogRnNNZXNzYWdlUXVldWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9zdG9yZTogRnNTdG9yZSxcbiAgKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tZXNzYWdlUXVldWVTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShNZXNzYWdlUXVldWVTdGF0ZXMpO1xuICAgIHRoaXMuX2luaXRDb25maWcoKTtcbiAgICB0aGlzLmluaXRMaXN0KCk7XG4gICAgdGhpcy5pbml0V2ViaG9vaygpO1xuICB9XG5cbiAgcHVibGljIGVuYWJsZVdlYmhvb2soKSB7XG4gICAgdGhpcy5fY29uZmlnLmNyZWF0ZVdlYmhvb2soKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdFdlYmhvb2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGluaXRXZWJob29rKCkge1xuICAgIGNvbnN0IGRvbWFpbiA9IGRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gICAgaWYoZG9tYWluID09PSAnbG9jYWxob3N0JyB8fCBkb21haW4gPT09ICdbOjoxXScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25maWcubG9hZFdlYmhvb2tzKHsgZG9tYWluIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gIXRoaXMuX3N0b3JlLmdldCgnbWVzc2FnZXNXZWJob29rRW5hYmxlZCcpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHdlYmhvb2tzKSA9PiB7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLndlYkhvb2tFbmFibGVkID0gd2ViaG9va3NcbiAgICAgICAgICAuc29tZSgod2ViaG9vaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh3ZWJob29rLnVybCk7XG5cbiAgICAgICAgICAgIHJldHVybiB1cmwuaG9zdCA9PT0gZG9tYWluO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3N0b3JlLnNldCgnbWVzc2FnZXNXZWJob29rRW5hYmxlZCcsIHRoaXMud2ViSG9va0VuYWJsZWQpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaW5pdExpc3QoKSB7XG4gICAgdGhpcy5saXN0Q29uZmlnID0ge1xuICAgICAgZmlsdGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2tleXdvcmQnLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLktleXdvcmQsXG4gICAgICAgICAgbGFiZWw6ICdTZWFyY2gnLFxuICAgICAgICAgIGNoYW5nZTogKGl0ZW06IFRleHRJdGVtKSA9PiB7XG4gICAgICAgICAgICBpZihTdHJpbmcoaXRlbS52YWx1ZSA/PyAnJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMubGlzdC5maWx0ZXJSZWZcbiAgICAgICAgICAgICAgICAudXBkYXRlU29ydCh7IFxuICAgICAgICAgICAgICAgICAgc29ydEJ5OiAncmVsZXZhbmNlJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubGlzdC5maWx0ZXJSZWZcbiAgICAgICAgICAgICAgICAudXBkYXRlU29ydCh7IFxuICAgICAgICAgICAgICAgICAgc29ydEJ5OiAnY3JlYXRlZF9kYXRlJyxcbiAgICAgICAgICAgICAgICAgIHNvcnREaXJlY3Rpb246ICdkZXNjJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3N0YXRlJyxcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5TZWxlY3QsXG4gICAgICAgICAgbGFiZWw6ICdTdGF0dXMnLFxuICAgICAgICAgIHZhbHVlczogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIE1lc3NhZ2VRdWV1ZVN0YXRlcztcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2RhdGUnLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLkRhdGVSYW5nZSxcbiAgICAgICAgICBsYWJlbDogWydGcm9tIERhdGUnLCAnVG8gRGF0ZSddLFxuICAgICAgICB9LFxuICAgICAgICAuLi4odGhpcy5jb25maWc/LmZpbHRlcnMgfHwgW10pLFxuICAgICAgXSxcbiAgICAgIHBhZ2luZzoge1xuICAgICAgICBzdHJhdGVneTogUGFnaW5hdGlvblN0cmF0ZWd5Lk1hbnksXG4gICAgICB9LFxuICAgICAgc29ydHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiAncmVsZXZhbmNlJyxcbiAgICAgICAgICBuYW1lOiAnUmVsZXZhbmNlJyxcbiAgICAgICAgICBkaXJlY3Rpb246ICdkZXNjJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBzb3J0OiB7IFxuICAgICAgICB2YWx1ZTogJ2NyZWF0ZWRfZGF0ZScsIFxuICAgICAgICBkaXJlY3Rpb246ICdkZXNjJyxcbiAgICAgIH0sXG4gICAgICBmZXRjaDogKHF1ZXJ5KSA9PiB7XG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnF1ZXJ5LFxuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgIG1lc3NhZ2VRdWV1ZUF0dGFjaG1lbnRDb3VudHM6IHRydWUsXG4gICAgICAgICAgZW1haWxNZXNzYWdlUXVldWVzOiB0cnVlLFxuICAgICAgICAgIGVtYWlsTWVzc2FnZVF1ZXVlQm9kaWVzOiBmYWxzZSxcbiAgICAgICAgICBzbXNNZXNzYWdlUXVldWVzOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcubG9hZE1lc3NhZ2VRdWV1ZXMocXVlcnkpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiAoe1xuICAgICAgICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhXG4gICAgICAgICAgICAgICAgLm1hcCgobWVzc2FnZVF1ZXVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5tZXNzYWdlUXVldWUsXG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlZDogbWVzc2FnZVF1ZXVlLnN0YXRlID09PSBNZXNzYWdlUXVldWVTdGF0ZS5RdWV1ZWQgJiYgaXNBZnRlcihtZXNzYWdlUXVldWUuc2NoZWR1bGVkRGF0ZSwgbmV3IERhdGUoKSksXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZVJlY2lwaWVudHM6IG1lc3NhZ2VRdWV1ZS5tZXNzYWdlUXVldWVSZWNpcGllbnRzXG4gICAgICAgICAgICAgICAgICAgICAgLnJlZHVjZSgoYWNjdW0sIG1lc3NhZ2VRdWV1ZVJlY2lwaWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjdW1bbWVzc2FnZVF1ZXVlUmVjaXBpZW50LnJlY2lwaWVudF0gPSBtZXNzYWdlUXVldWVSZWNpcGllbnQuc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgICAgICAgICAgICAgICAgICB9LCB7fSksXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pLCBwYWdpbmc6IHJlc3BvbnNlLnBhZ2luZyxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICApO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5idWxrTWVzc2FnZVF1ZXVlcykge1xuICAgICAgdGhpcy5saXN0Q29uZmlnLnNlbGVjdGlvbiA9IHtcbiAgICAgICAgc2VsZWN0QWxsOiBmYWxzZSxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFNlbGVjdGlvbkFjdGlvblR5cGUuQWN0aW9uLFxuICAgICAgICAgICAgbmFtZTogJ3F1ZXVlJyxcbiAgICAgICAgICAgIGxhYmVsOiAnUXVldWUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogU2VsZWN0aW9uQWN0aW9uVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICBuYW1lOiAncmVzZW5kJyxcbiAgICAgICAgICAgIGxhYmVsOiAnUmVzZW5kJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFNlbGVjdGlvbkFjdGlvblR5cGUuQWN0aW9uLFxuICAgICAgICAgICAgbmFtZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICBsYWJlbDogJ0NhbmNlbCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgYWN0aW9uU2VsZWN0ZWQ6IChhY3Rpb25TZWxlY3RlZDogRnNMaXN0QWN0aW9uU2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmJ1bGtNZXNzYWdlUXVldWVzKGFjdGlvblNlbGVjdGVkLmFjdGlvbi5uYW1lLCBhY3Rpb25TZWxlY3RlZC5zZWxlY3RlZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdC5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZy5maWx0ZXJzLnB1c2goe1xuICAgICAgbmFtZTogJ21lc3NhZ2VJZCcsXG4gICAgICB0eXBlOiBJdGVtVHlwZS5TZWxlY3QsXG4gICAgICBsYWJlbDogJ01lc3NhZ2UgVHlwZScsXG4gICAgICB2YWx1ZXM6IChxdWVyeSkgPT4ge1xuICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAuLi5xdWVyeSxcbiAgICAgICAgICBsaW1pdDogNTAsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5sb2FkTWVzc2FnZXMocXVlcnkpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgeyB2YWx1ZTogbnVsbCwgbmFtZTogJ0FsbCcgfSxcbiAgICAgICAgICAgICAgICAuLi5yZXNwb25zZS5kYXRhXG4gICAgICAgICAgICAgICAgICAubWFwKChpdGVtKSA9PiAoeyBuYW1lOiBpdGVtLm5hbWUsIHZhbHVlOiBpdGVtLmlkIH0pKSxcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICB9LFxuICAgIH0gYXMgYW55KTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuKG1lc3NhZ2VRdWV1ZSkge1xuICAgIHRoaXMuX21lc3NhZ2VRdWV1ZVNlcnZpY2Uub3Blbk1lc3NhZ2VRdWV1ZShtZXNzYWdlUXVldWUuaWQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmxpc3QucmVsb2FkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0Q29uZmlnKCkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgZmlsdGVyczogW10sXG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICB9O1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwid2ViSG9va0VuYWJsZWQgPT09IGZhbHNlXCI+XG4gIDxmcy1tZXNzYWdlLWluZm8+XG4gICAgPGRpdiBjbGFzcz1cImZzLXJvd1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmcy1mbGV4XCI+XG4gICAgICAgIFRoZSB3ZWJob29rIHdoaWNoIHByb3ZpZGVzIGVtYWlsIGRlbGl2ZXJ5IGNvbmZpcm1hdGlvbnMgaXMgbm90IGVuYWJsZWQuXG4gICAgICA8L3NwYW4+XG4gICAgICA8YVxuICAgICAgICAgIChjbGljayk9XCJlbmFibGVXZWJob29rKClcIlxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uPlxuICAgICAgICBFbmFibGVcbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cbiAgPC9mcy1tZXNzYWdlLWluZm8+XG48L25nLWNvbnRhaW5lcj5cbjxmcy1saXN0XG4gICAgW2NvbmZpZ109XCJsaXN0Q29uZmlnXCJcbiAgICAjbGlzdD5cbiAgPGZzLWxpc3QtY29sdW1uXG4gICAgICB0aXRsZT1cIk1lc3NhZ2VcIlxuICAgICAgbmFtZT1cInN1YmplY3RcIlxuICAgICAgW3NvcnRhYmxlXT1cInRydWVcIj5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuZW1haWxNZXNzYWdlUXVldWVcIj5cbiAgICAgICAgPGEgKGNsaWNrKT1cIm9wZW4ocm93KVwiPlxuICAgICAgICAgIHt7IHJvdy5lbWFpbE1lc3NhZ2VRdWV1ZS5zdWJqZWN0fHRydW5jYXRlOjEwMCB9fVxuICAgICAgICA8L2E+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cubWVzc2FnZVF1ZXVlQXR0YWNobWVudENvdW50XCI+XG4gICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXR0YWNobWVudC1pY29uXCJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwicm93Lm1lc3NhZ2VRdWV1ZUF0dGFjaG1lbnRDb3VudCArICcgQXR0YWNobWVudChzKSdcIj5cbiAgICAgICAgICAgIGF0dGFjaF9maWxlXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuc21zTWVzc2FnZVF1ZXVlXCI+XG4gICAgICAgIDxhIChjbGljayk9XCJvcGVuKHJvdylcIj5cbiAgICAgICAgICB7eyByb3cuc21zTWVzc2FnZVF1ZXVlLmJvZHl8dHJ1bmNhdGU6MTAwIH19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbGlzdC1jb2x1bW4+XG4gIDxmcy1saXN0LWNvbHVtblxuICAgICAgdGl0bGU9XCJSZWNpcGllbnRzXCJcbiAgICAgIGNsYXNzPVwiY29sLXJlY2lwaWVudHNcIj5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuZW1haWxNZXNzYWdlUXVldWVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdy5lbWFpbE1lc3NhZ2VRdWV1ZS50b1JlY2lwaWVudHMubGVuZ3RoOyBlbHNlIHVuc3BlY2lmaWVkXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInNtYWxsXCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJlY2lwaWVudCBvZiByb3cuZW1haWxNZXNzYWdlUXVldWUudG9SZWNpcGllbnRzXCI+XG4gICAgICAgICAgICA8YXBwLXJlY2lwaWVudFxuICAgICAgICAgICAgICBbc3RhdGVdPVwicm93Lm1lc3NhZ2VRdWV1ZVJlY2lwaWVudHNbcmVjaXBpZW50XSB8fCByb3cuc3RhdGVcIlxuICAgICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICAgIDwvYXBwLXJlY2lwaWVudD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic21hbGxcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJlY2lwaWVudCBvZiByb3cuZW1haWxNZXNzYWdlUXVldWUuY2NSZWNpcGllbnRzXCI+XG4gICAgICAgICAgPGFwcC1yZWNpcGllbnRcbiAgICAgICAgICAgIFtzdGF0ZV09XCJyb3cubWVzc2FnZVF1ZXVlUmVjaXBpZW50c1tyZWNpcGllbnRdIHx8IHJvdy5zdGF0ZVwiXG4gICAgICAgICAgICBbbmFtZV09XCJyZWNpcGllbnRcIj5cbiAgICAgICAgICA8L2FwcC1yZWNpcGllbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNtYWxsXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZWNpcGllbnQgb2Ygcm93LmVtYWlsTWVzc2FnZVF1ZXVlLmJjY1JlY2lwaWVudHNcIj5cbiAgICAgICAgICA8YXBwLXJlY2lwaWVudFxuICAgICAgICAgICAgW3N0YXRlXT1cInJvdy5tZXNzYWdlUXVldWVSZWNpcGllbnRzW3JlY2lwaWVudF0gfHwgcm93LnN0YXRlXCJcbiAgICAgICAgICAgIFtuYW1lXT1cInJlY2lwaWVudFwiPlxuICAgICAgICAgIDwvYXBwLXJlY2lwaWVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuc21zTWVzc2FnZVF1ZXVlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuc21zTWVzc2FnZVF1ZXVlLnRvTnVtYmVyOyBlbHNlIHVuc3BlY2lmaWVkXCI+XG4gICAgICAgICAgPGFwcC1yZWNpcGllbnRcbiAgICAgICAgICAgIGNsYXNzPVwic21hbGxcIlxuICAgICAgICAgICAgW3N0YXRlXT1cInJvdy5zdGF0ZVwiXG4gICAgICAgICAgICBbbmFtZV09XCJyb3cuc21zTWVzc2FnZVF1ZXVlLnRvTnVtYmVyXCI+XG4gICAgICAgICAgPC9hcHAtcmVjaXBpZW50PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbGlzdC1jb2x1bW4+XG4gIDxmcy1saXN0LWNvbHVtblxuICAgICAgdGl0bGU9XCJTdGF0dXNcIlxuICAgICAgY2xhc3M9XCJjb2wtc3RhdGVcIj5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgZnMtbGlzdC1jZWxsXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuc2NoZWR1bGVkOyBlbHNlIHN0YXRlXCI+XG4gICAgICAgIFNjaGVkdWxlZFxuICAgICAgICA8ZGl2IGNsYXNzPVwic21hbGxcIj5cbiAgICAgICAgICB7eyByb3cuc2NoZWR1bGVkRGF0ZSB8IGZzRGF0ZUZvcm1hdDogJ2RhdGUtdGltZScgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjc3RhdGU+XG4gICAgICAgIDxzcGFuIFtjbGFzc109XCInc3RhdGUtJyArIHJvdy5zdGF0ZVwiPlxuICAgICAgICAgIHt7IG1lc3NhZ2VRdWV1ZVN0YXRlc1tyb3cuc3RhdGVdIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mcy1saXN0LWNvbHVtbj5cbiAgPGZzLWxpc3QtY29sdW1uXG4gICAgICB0aXRsZT1cIkRhdGVcIlxuICAgICAgbmFtZT1cImNyZWF0ZWRfZGF0ZVwiXG4gICAgICBbc29ydGFibGVdPVwidHJ1ZVwiPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBmcy1saXN0LWNlbGxcbiAgICAgICAgbGV0LXJvdz1cInJvd1wiPlxuICAgICAge3sgcm93LmNyZWF0ZWREYXRlIHwgZnNEYXRlRm9ybWF0OiAnZGF0ZS10aW1lLXllYXJkaWZmJyB9fVxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbGlzdC1jb2x1bW4+XG48L2ZzLWxpc3Q+XG48bmctdGVtcGxhdGUgI3Vuc3BlY2lmaWVkPlxuICA8YXBwLXJlY2lwaWVudFxuICAgIGNsYXNzPVwic21hbGxcIlxuICAgIFtzdGF0ZV09XCJNZXNzYWdlUXVldWVTdGF0ZS5GYWlsZWRcIlxuICAgIG5hbWU9XCJVbnNwZWNpZmllZFwiPlxuICA8L2FwcC1yZWNpcGllbnQ+XG48L25nLXRlbXBsYXRlPiJdfQ==
|