@tilde-nlp/ngx-translate 7.0.2 → 7.0.3

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.
@@ -114,12 +114,12 @@ export class TldTranslateFileMultipleComponent extends TldFileTranslateBaseCompo
114
114
  this.showVendorNotification = this.config.fileConfig.progressIndicatorTitleVisibleForVendors.includes(vendor);
115
115
  }
116
116
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: TldTranslateFileMultipleComponent, deps: [{ token: i1.TldTranslateFileService }, { token: i2.TldTranslateConfigService }, { token: i3.MatDialog }, { token: i4.TldTranslateButtonService }, { token: i2.TldTranslateSystemManagementService }, { token: i5.AlertService }], target: i0.ɵɵFactoryTarget.Component });
117
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.4", type: TldTranslateFileMultipleComponent, selector: "tld-translate-file-multiple", inputs: { translationFiles: "translationFiles" }, usesInheritance: true, ngImport: i0, template: "<div class=\"tld-translate-file-container\" [ngClass.xs]=\"'tld-multiple-mobile'\" fxLayout=\"column\" fxFlex\r\n fxLayoutAlign=\"start center\">\r\n <div class=\"cdk-visually-hidden\" aria-live=\"polite\">\r\n {{'MULTIPLE_FILES.SCREEN_READER_ANNOUNCEMENT' | translate: {translated:translatedFilesCount , total: fileCount} }}\r\n </div>\r\n <div fxLayout=\"column\" fxLayoutGap=\"0.5rem\" fxFlex class=\"multiple-files-body\">\r\n <div *ngFor=\"let file of translationFiles\" class=\"file-row\" [ngClass.gt-sm]=\"'extra-width'\" fxLayout=\"row\"\r\n fxLayoutAlign=\"center center\" fxLayoutAlign.xs=\"flex-start center\">\r\n <div fxLayout=\"column\" fxFlex>\r\n <div fxLayout=\"row\" fxLayoutAlign.xs=\"space-between center\" fxLayoutAlign=\"space-between center\">\r\n <div class=\"file-name\">\r\n {{file.originalFileName}}\r\n </div>\r\n <div fxLayout=\"row\" class=\"file-actions\">\r\n <tld-translate-file-download-button (tldClick)=\"download(file, $event)\" *ngIf=\"file.downloadAvailable\"\r\n [sourceDownload]=\"true\" [disabled]=\"file.isDownloading\" [file]=\"file\">\r\n </tld-translate-file-download-button>\r\n <tld-close-button [tooltip]=\"'FILE_UPLOAD.CLEAR'\" (tldClick)=\"remove(file)\"></tld-close-button>\r\n </div>\r\n </div>\r\n <mat-progress-bar *ngIf=\"file.translationStatuss===translatingStatuss\" color=\"accent\" mode=\"determinate\"\r\n [value]=\"file.progress\"></mat-progress-bar>\r\n <div class=\"progress-message text-s\"\r\n *ngIf=\"(file.translationStatuss !== errorTranslatingStatuss) && (file.translationStatuss !== completedTranslatingStatuss) && (file.translationStatuss !== uploadedTranslatingStatuss)\">\r\n {{'MULTIPLE_FILES.STATUSS_' + file.translationStatuss | translate: {percent: file.progress} }}\r\n </div>\r\n <ng-container *ngIf=\"file.messages.length>0\">\r\n <lib-inline-message *ngFor=\"let message of file.messages\" [message]=\"message\"></lib-inline-message>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <tld-file-upload *ngIf=\"!translationStarted\" fxFlex class=\"tld-append-files\" (fileChange)=\"fileChange($event)\"\r\n [accept]=\"allowedFileTypes\" [maxSize]=\"maxFileUploadSize\" [multiple]=\"multipleFiles\"\r\n [disabled]=\"disableAppendFiles\" (errorEvent)=\"fileUploadError($event)\" [extendedAcceptList]=\"extendedFileTypes\">\r\n {{'MULTIPLE_FILES.APPEND' | translate}} ({{fileCount}}/{{maxFileCount}})\r\n </tld-file-upload>\r\n </div>\r\n <ng-container *ngIf=\"sourceDownloadPDF\">\r\n <ng-container\r\n *ngTemplateOutlet=\"conversionMessage; context: { messageKey:'MULTIPLE_FILES.PDF_DISCLAIMER', dialogParams: pdfConversion, buttonText: 'MULTIPLE_FILES.PDF_DISCLAIMER_LINK'}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"sourceDownloadImage\">\r\n <ng-container\r\n *ngTemplateOutlet=\"conversionMessage; context: { messageKey:'MULTIPLE_FILES.IMAGE_DISCLAIMER', dialogParams: imageConversion, buttonText: 'MULTIPLE_FILES.IMAGE_DISCLAIMER_LINK'}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showVendorNotification\">\r\n <vendor-disclaimer></vendor-disclaimer>\r\n </ng-container>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayout.xs=\"column\" fxLayuotGap.xs=\"1rem\" class=\"button-container\">\r\n <tld-translate-button [disabled]=\"disableTranslateButton\" (clicked)=\"translateButtonClick()\"\r\n *ngIf=\"!translationStarted\"></tld-translate-button>\r\n <button (click)=\"clearAll()\" mat-stroked-button color=\"accent\"\r\n class=\"cancel-button border-accent\">{{'MULTIPLE_FILES.CLEAR_ALL' | translate}}</button>\r\n </div>\r\n</div>\r\n\r\n<ng-template #conversionMessage let-messageKey=\"messageKey\" let-dialogParams=\"dialogParams\" let-buttonText=\"buttonText\">\r\n\r\n <p class=\"conversion-disclaimer text-m\" [ngClass.gt-sm]=\"'conversion-info-margins-gt-sm'\">\r\n <span class=\"material-icons\">\r\n info\r\n </span>\r\n <span>\r\n {{messageKey | translate }}\r\n </span>\r\n <button class=\"conversion-message-action text-m-semi-bold\" (click)=\"conversionDialog(dialogParams)\">{{buttonText |\r\n translate}}</button>\r\n</ng-template>\r\n", styles: [".semi-bold,.text-s-semi-bold,.text-m-semi-bold,.text-l-semi-bold,.text-xl-semi-bold,.text-2-xl,.text-3-xl,.text-4-xl{font-weight:600}@media (min-width: 600px){.text-4-xl{font-size:2.75rem;line-height:3.375rem}}@media (min-width: 0) and (max-width: 599.9px){.text-4-xl{font-size:2rem;line-height:2.625rem}}.text-3-xl{font-size:2rem;line-height:2.625rem}.text-2-xl{font-size:1.5rem;line-height:2.125rem}.text-xl,.text-xl-semi-bold{font-size:1.25rem;line-height:2rem}.text-l,.cancel-button,.text-l-semi-bold{font-size:1rem;line-height:1.625rem}.text-m,.text-m-semi-bold{font-size:.875rem;line-height:1.4375rem}.text-s,.text-s-semi-bold{font-size:.75rem;line-height:1.25rem}.tld-translate-file-container{padding:3em;width:100%}.tld-translate-file-container .file-row{min-height:4rem;width:100%;padding:.5em 0;border-bottom:1px solid var(--base-70)}.tld-translate-file-container .file-row .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tld-translate-file-container .file-row lib-inline-message{margin-top:.5rem}.tld-translate-file-container .file-row .file-actions{margin-left:.5rem}.tld-append-files{font-size:1em;margin-top:1rem}:host ::ng-deep .tld-append-files .upload-button{justify-content:center!important;min-height:3.5rem!important}.conversion-disclaimer.conversion-info-margins-gt-sm{margin:.5em 20%}.conversion-disclaimer:not(.conversion-info-margins-gt-sm){text-align:center}tld-translate-button{margin:1em}.tld-multiple-mobile{padding:1rem}.tld-multiple-mobile tld-translate-button{margin:1rem 0 0;width:100%}.tld-multiple-mobile .file-row,.tld-multiple-mobile .multiple-files-body,.tld-multiple-mobile .cancel-button,.tld-multiple-mobile .button-container{width:100%}.multiple-files-body ::ng-deep tld-file-upload .file-upload .upload-button{text-align:center}.download-file{cursor:pointer}.material-icons{vertical-align:middle;color:var(--base-40)}.conversion-message-action{background:transparent;color:var(--accent);border:none;cursor:pointer}.extra-width{min-width:30rem}.progress-message{color:var(--base-40)}mat-progress-bar{margin:.375rem 0}.cancel-button{padding:.375rem 1.5rem}vendor-disclaimer{margin-bottom:1rem}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.TldTranslateButtonComponent, selector: "tld-translate-button", inputs: ["disabled", "enablePulseAnimation"], outputs: ["clicked"] }, { kind: "directive", type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: i5.CloseButtonComponent, selector: "tld-close-button", inputs: ["ariaCode", "disabled", "tooltip"], outputs: ["tldClick"] }, { kind: "component", type: i5.InlineMessageComponent, selector: "lib-inline-message", inputs: ["iconName", "message"] }, { kind: "component", type: i10.VendorDisclaimerComponent, selector: "vendor-disclaimer" }, { kind: "component", type: i5.FileUploadComponent, selector: "tld-file-upload", inputs: ["accept", "maxSize", "multiple", "filePreviewProgress", "allowEmpty", "disabled", "uploadIconName", "extendedAcceptList"], outputs: ["fileChange", "errorEvent"] }, { kind: "component", type: i11.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i12.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.TldTranslateFileDownloadButtonComponent, selector: "tld-translate-file-download-button", inputs: ["file", "disabled", "sourceDownload"], outputs: ["tldClick"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] });
117
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.4", type: TldTranslateFileMultipleComponent, selector: "tld-translate-file-multiple", inputs: { translationFiles: "translationFiles" }, usesInheritance: true, ngImport: i0, template: "<div class=\"tld-translate-file-container\" [ngClass.xs]=\"'tld-multiple-mobile'\" fxLayout=\"column\" fxFlex\r\n fxLayoutAlign=\"start center\">\r\n <div class=\"cdk-visually-hidden\" aria-live=\"polite\">\r\n {{'MULTIPLE_FILES.SCREEN_READER_ANNOUNCEMENT' | translate: {translated:translatedFilesCount , total: fileCount} }}\r\n </div>\r\n <div fxLayout=\"column\" fxLayoutGap=\"0.5rem\" fxFlex class=\"multiple-files-body\">\r\n <div *ngFor=\"let file of translationFiles\" class=\"file-row\" [ngClass.gt-sm]=\"'extra-width'\" fxLayout=\"row\"\r\n fxLayoutAlign=\"center center\" fxLayoutAlign.xs=\"flex-start center\">\r\n <div fxLayout=\"column\" fxFlex>\r\n <div fxLayout=\"row\" fxLayoutAlign.xs=\"space-between center\" fxLayoutAlign=\"space-between center\">\r\n <div class=\"file-name\">\r\n {{file.originalFileName}}\r\n </div>\r\n <div fxLayout=\"row\" class=\"file-actions\">\r\n <tld-translate-file-download-button (tldClick)=\"download(file, $event)\" *ngIf=\"file.downloadAvailable\"\r\n [sourceDownload]=\"true\" [disabled]=\"file.isDownloading\" [file]=\"file\">\r\n </tld-translate-file-download-button>\r\n <tld-close-button [tooltip]=\"'FILE_UPLOAD.CLEAR'\" (tldClick)=\"remove(file)\"></tld-close-button>\r\n </div>\r\n </div>\r\n <mat-progress-bar *ngIf=\"file.translationStatuss===translatingStatuss\" color=\"accent\" mode=\"determinate\"\r\n [value]=\"file.progress\"></mat-progress-bar>\r\n <div class=\"progress-message text-s\"\r\n *ngIf=\"(file.translationStatuss !== errorTranslatingStatuss) && (file.translationStatuss !== completedTranslatingStatuss) && (file.translationStatuss !== uploadedTranslatingStatuss)\">\r\n {{'MULTIPLE_FILES.STATUSS_' + file.translationStatuss | translate: {percent: file.progress} }}\r\n </div>\r\n <ng-container *ngIf=\"file.messages.length>0\">\r\n <lib-inline-message *ngFor=\"let message of file.messages\" [message]=\"message\"></lib-inline-message>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <lib-file-upload *ngIf=\"!translationStarted\" fxFlex class=\"tld-append-files\" (fileChange)=\"fileChange($event)\"\r\n [accept]=\"allowedFileTypes\" [maxSize]=\"maxFileUploadSize\" [multiple]=\"multipleFiles\"\r\n [disabled]=\"disableAppendFiles\" (errorEvent)=\"fileUploadError($event)\" [extendedAcceptList]=\"extendedFileTypes\">\r\n {{'MULTIPLE_FILES.APPEND' | translate}} ({{fileCount}}/{{maxFileCount}})\r\n </lib-file-upload>\r\n </div>\r\n <ng-container *ngIf=\"sourceDownloadPDF\">\r\n <ng-container\r\n *ngTemplateOutlet=\"conversionMessage; context: { messageKey:'MULTIPLE_FILES.PDF_DISCLAIMER', dialogParams: pdfConversion, buttonText: 'MULTIPLE_FILES.PDF_DISCLAIMER_LINK'}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"sourceDownloadImage\">\r\n <ng-container\r\n *ngTemplateOutlet=\"conversionMessage; context: { messageKey:'MULTIPLE_FILES.IMAGE_DISCLAIMER', dialogParams: imageConversion, buttonText: 'MULTIPLE_FILES.IMAGE_DISCLAIMER_LINK'}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showVendorNotification\">\r\n <vendor-disclaimer></vendor-disclaimer>\r\n </ng-container>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayout.xs=\"column\" fxLayuotGap.xs=\"1rem\" class=\"button-container\">\r\n <tld-translate-button [disabled]=\"disableTranslateButton\" (clicked)=\"translateButtonClick()\"\r\n *ngIf=\"!translationStarted\"></tld-translate-button>\r\n <button (click)=\"clearAll()\" mat-stroked-button color=\"accent\"\r\n class=\"cancel-button border-accent\">{{'MULTIPLE_FILES.CLEAR_ALL' | translate}}</button>\r\n </div>\r\n</div>\r\n\r\n<ng-template #conversionMessage let-messageKey=\"messageKey\" let-dialogParams=\"dialogParams\" let-buttonText=\"buttonText\">\r\n\r\n <p class=\"conversion-disclaimer text-m\" [ngClass.gt-sm]=\"'conversion-info-margins-gt-sm'\">\r\n <span class=\"material-icons\">\r\n info\r\n </span>\r\n <span>\r\n {{messageKey | translate }}\r\n </span>\r\n <button class=\"conversion-message-action text-m-semi-bold\" (click)=\"conversionDialog(dialogParams)\">{{buttonText |\r\n translate}}</button>\r\n</ng-template>\r\n", styles: [".semi-bold,.text-s-semi-bold,.text-m-semi-bold,.text-l-semi-bold,.text-xl-semi-bold,.text-2-xl,.text-3-xl,.text-4-xl{font-weight:600}@media (min-width: 600px){.text-4-xl{font-size:2.75rem;line-height:3.375rem}}@media (min-width: 0) and (max-width: 599.9px){.text-4-xl{font-size:2rem;line-height:2.625rem}}.text-3-xl{font-size:2rem;line-height:2.625rem}.text-2-xl{font-size:1.5rem;line-height:2.125rem}.text-xl,.text-xl-semi-bold{font-size:1.25rem;line-height:2rem}.text-l,.cancel-button,.text-l-semi-bold{font-size:1rem;line-height:1.625rem}.text-m,.text-m-semi-bold{font-size:.875rem;line-height:1.4375rem}.text-s,.text-s-semi-bold{font-size:.75rem;line-height:1.25rem}.tld-translate-file-container{padding:3em;width:100%}.tld-translate-file-container .file-row{min-height:4rem;width:100%;padding:.5em 0;border-bottom:1px solid var(--base-70)}.tld-translate-file-container .file-row .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tld-translate-file-container .file-row lib-inline-message{margin-top:.5rem}.tld-translate-file-container .file-row .file-actions{margin-left:.5rem}.tld-append-files{font-size:1em;margin-top:1rem}:host ::ng-deep .tld-append-files .upload-button{justify-content:center!important;min-height:3.5rem!important}.conversion-disclaimer.conversion-info-margins-gt-sm{margin:.5em 20%}.conversion-disclaimer:not(.conversion-info-margins-gt-sm){text-align:center}tld-translate-button{margin:1em}.tld-multiple-mobile{padding:1rem}.tld-multiple-mobile tld-translate-button{margin:1rem 0 0;width:100%}.tld-multiple-mobile .file-row,.tld-multiple-mobile .multiple-files-body,.tld-multiple-mobile .cancel-button,.tld-multiple-mobile .button-container{width:100%}.multiple-files-body ::ng-deep lib-file-upload .file-upload .upload-button{text-align:center}.download-file{cursor:pointer}.material-icons{vertical-align:middle;color:var(--base-40)}.conversion-message-action{background:transparent;color:var(--accent);border:none;cursor:pointer}.extra-width{min-width:30rem}.progress-message{color:var(--base-40)}mat-progress-bar{margin:.375rem 0}.cancel-button{padding:.375rem 1.5rem}vendor-disclaimer{margin-bottom:1rem}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.TldTranslateButtonComponent, selector: "tld-translate-button", inputs: ["disabled", "enablePulseAnimation"], outputs: ["clicked"] }, { kind: "directive", type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: i5.CloseButtonComponent, selector: "tld-close-button", inputs: ["ariaCode", "disabled", "tooltip"], outputs: ["tldClick"] }, { kind: "component", type: i5.InlineMessageComponent, selector: "lib-inline-message", inputs: ["iconName", "message"] }, { kind: "component", type: i10.VendorDisclaimerComponent, selector: "vendor-disclaimer" }, { kind: "component", type: i5.FileUploadComponent, selector: "lib-file-upload", inputs: ["accept", "useCompactUpload", "maxSize", "multiple", "filePreviewProgress", "allowEmpty", "disabled", "dragZoneLabel", "uploadIconName", "uploadButtonLabel", "openExtensionPopupLabel", "extendedAcceptList"], outputs: ["fileChange", "errorEvent"] }, { kind: "component", type: i11.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i12.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.TldTranslateFileDownloadButtonComponent, selector: "tld-translate-file-download-button", inputs: ["file", "disabled", "sourceDownload"], outputs: ["tldClick"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] });
118
118
  }
119
119
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: TldTranslateFileMultipleComponent, decorators: [{
120
120
  type: Component,
121
- args: [{ selector: 'tld-translate-file-multiple', template: "<div class=\"tld-translate-file-container\" [ngClass.xs]=\"'tld-multiple-mobile'\" fxLayout=\"column\" fxFlex\r\n fxLayoutAlign=\"start center\">\r\n <div class=\"cdk-visually-hidden\" aria-live=\"polite\">\r\n {{'MULTIPLE_FILES.SCREEN_READER_ANNOUNCEMENT' | translate: {translated:translatedFilesCount , total: fileCount} }}\r\n </div>\r\n <div fxLayout=\"column\" fxLayoutGap=\"0.5rem\" fxFlex class=\"multiple-files-body\">\r\n <div *ngFor=\"let file of translationFiles\" class=\"file-row\" [ngClass.gt-sm]=\"'extra-width'\" fxLayout=\"row\"\r\n fxLayoutAlign=\"center center\" fxLayoutAlign.xs=\"flex-start center\">\r\n <div fxLayout=\"column\" fxFlex>\r\n <div fxLayout=\"row\" fxLayoutAlign.xs=\"space-between center\" fxLayoutAlign=\"space-between center\">\r\n <div class=\"file-name\">\r\n {{file.originalFileName}}\r\n </div>\r\n <div fxLayout=\"row\" class=\"file-actions\">\r\n <tld-translate-file-download-button (tldClick)=\"download(file, $event)\" *ngIf=\"file.downloadAvailable\"\r\n [sourceDownload]=\"true\" [disabled]=\"file.isDownloading\" [file]=\"file\">\r\n </tld-translate-file-download-button>\r\n <tld-close-button [tooltip]=\"'FILE_UPLOAD.CLEAR'\" (tldClick)=\"remove(file)\"></tld-close-button>\r\n </div>\r\n </div>\r\n <mat-progress-bar *ngIf=\"file.translationStatuss===translatingStatuss\" color=\"accent\" mode=\"determinate\"\r\n [value]=\"file.progress\"></mat-progress-bar>\r\n <div class=\"progress-message text-s\"\r\n *ngIf=\"(file.translationStatuss !== errorTranslatingStatuss) && (file.translationStatuss !== completedTranslatingStatuss) && (file.translationStatuss !== uploadedTranslatingStatuss)\">\r\n {{'MULTIPLE_FILES.STATUSS_' + file.translationStatuss | translate: {percent: file.progress} }}\r\n </div>\r\n <ng-container *ngIf=\"file.messages.length>0\">\r\n <lib-inline-message *ngFor=\"let message of file.messages\" [message]=\"message\"></lib-inline-message>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <tld-file-upload *ngIf=\"!translationStarted\" fxFlex class=\"tld-append-files\" (fileChange)=\"fileChange($event)\"\r\n [accept]=\"allowedFileTypes\" [maxSize]=\"maxFileUploadSize\" [multiple]=\"multipleFiles\"\r\n [disabled]=\"disableAppendFiles\" (errorEvent)=\"fileUploadError($event)\" [extendedAcceptList]=\"extendedFileTypes\">\r\n {{'MULTIPLE_FILES.APPEND' | translate}} ({{fileCount}}/{{maxFileCount}})\r\n </tld-file-upload>\r\n </div>\r\n <ng-container *ngIf=\"sourceDownloadPDF\">\r\n <ng-container\r\n *ngTemplateOutlet=\"conversionMessage; context: { messageKey:'MULTIPLE_FILES.PDF_DISCLAIMER', dialogParams: pdfConversion, buttonText: 'MULTIPLE_FILES.PDF_DISCLAIMER_LINK'}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"sourceDownloadImage\">\r\n <ng-container\r\n *ngTemplateOutlet=\"conversionMessage; context: { messageKey:'MULTIPLE_FILES.IMAGE_DISCLAIMER', dialogParams: imageConversion, buttonText: 'MULTIPLE_FILES.IMAGE_DISCLAIMER_LINK'}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showVendorNotification\">\r\n <vendor-disclaimer></vendor-disclaimer>\r\n </ng-container>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayout.xs=\"column\" fxLayuotGap.xs=\"1rem\" class=\"button-container\">\r\n <tld-translate-button [disabled]=\"disableTranslateButton\" (clicked)=\"translateButtonClick()\"\r\n *ngIf=\"!translationStarted\"></tld-translate-button>\r\n <button (click)=\"clearAll()\" mat-stroked-button color=\"accent\"\r\n class=\"cancel-button border-accent\">{{'MULTIPLE_FILES.CLEAR_ALL' | translate}}</button>\r\n </div>\r\n</div>\r\n\r\n<ng-template #conversionMessage let-messageKey=\"messageKey\" let-dialogParams=\"dialogParams\" let-buttonText=\"buttonText\">\r\n\r\n <p class=\"conversion-disclaimer text-m\" [ngClass.gt-sm]=\"'conversion-info-margins-gt-sm'\">\r\n <span class=\"material-icons\">\r\n info\r\n </span>\r\n <span>\r\n {{messageKey | translate }}\r\n </span>\r\n <button class=\"conversion-message-action text-m-semi-bold\" (click)=\"conversionDialog(dialogParams)\">{{buttonText |\r\n translate}}</button>\r\n</ng-template>\r\n", styles: [".semi-bold,.text-s-semi-bold,.text-m-semi-bold,.text-l-semi-bold,.text-xl-semi-bold,.text-2-xl,.text-3-xl,.text-4-xl{font-weight:600}@media (min-width: 600px){.text-4-xl{font-size:2.75rem;line-height:3.375rem}}@media (min-width: 0) and (max-width: 599.9px){.text-4-xl{font-size:2rem;line-height:2.625rem}}.text-3-xl{font-size:2rem;line-height:2.625rem}.text-2-xl{font-size:1.5rem;line-height:2.125rem}.text-xl,.text-xl-semi-bold{font-size:1.25rem;line-height:2rem}.text-l,.cancel-button,.text-l-semi-bold{font-size:1rem;line-height:1.625rem}.text-m,.text-m-semi-bold{font-size:.875rem;line-height:1.4375rem}.text-s,.text-s-semi-bold{font-size:.75rem;line-height:1.25rem}.tld-translate-file-container{padding:3em;width:100%}.tld-translate-file-container .file-row{min-height:4rem;width:100%;padding:.5em 0;border-bottom:1px solid var(--base-70)}.tld-translate-file-container .file-row .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tld-translate-file-container .file-row lib-inline-message{margin-top:.5rem}.tld-translate-file-container .file-row .file-actions{margin-left:.5rem}.tld-append-files{font-size:1em;margin-top:1rem}:host ::ng-deep .tld-append-files .upload-button{justify-content:center!important;min-height:3.5rem!important}.conversion-disclaimer.conversion-info-margins-gt-sm{margin:.5em 20%}.conversion-disclaimer:not(.conversion-info-margins-gt-sm){text-align:center}tld-translate-button{margin:1em}.tld-multiple-mobile{padding:1rem}.tld-multiple-mobile tld-translate-button{margin:1rem 0 0;width:100%}.tld-multiple-mobile .file-row,.tld-multiple-mobile .multiple-files-body,.tld-multiple-mobile .cancel-button,.tld-multiple-mobile .button-container{width:100%}.multiple-files-body ::ng-deep tld-file-upload .file-upload .upload-button{text-align:center}.download-file{cursor:pointer}.material-icons{vertical-align:middle;color:var(--base-40)}.conversion-message-action{background:transparent;color:var(--accent);border:none;cursor:pointer}.extra-width{min-width:30rem}.progress-message{color:var(--base-40)}mat-progress-bar{margin:.375rem 0}.cancel-button{padding:.375rem 1.5rem}vendor-disclaimer{margin-bottom:1rem}\n"] }]
121
+ args: [{ selector: 'tld-translate-file-multiple', template: "<div class=\"tld-translate-file-container\" [ngClass.xs]=\"'tld-multiple-mobile'\" fxLayout=\"column\" fxFlex\r\n fxLayoutAlign=\"start center\">\r\n <div class=\"cdk-visually-hidden\" aria-live=\"polite\">\r\n {{'MULTIPLE_FILES.SCREEN_READER_ANNOUNCEMENT' | translate: {translated:translatedFilesCount , total: fileCount} }}\r\n </div>\r\n <div fxLayout=\"column\" fxLayoutGap=\"0.5rem\" fxFlex class=\"multiple-files-body\">\r\n <div *ngFor=\"let file of translationFiles\" class=\"file-row\" [ngClass.gt-sm]=\"'extra-width'\" fxLayout=\"row\"\r\n fxLayoutAlign=\"center center\" fxLayoutAlign.xs=\"flex-start center\">\r\n <div fxLayout=\"column\" fxFlex>\r\n <div fxLayout=\"row\" fxLayoutAlign.xs=\"space-between center\" fxLayoutAlign=\"space-between center\">\r\n <div class=\"file-name\">\r\n {{file.originalFileName}}\r\n </div>\r\n <div fxLayout=\"row\" class=\"file-actions\">\r\n <tld-translate-file-download-button (tldClick)=\"download(file, $event)\" *ngIf=\"file.downloadAvailable\"\r\n [sourceDownload]=\"true\" [disabled]=\"file.isDownloading\" [file]=\"file\">\r\n </tld-translate-file-download-button>\r\n <tld-close-button [tooltip]=\"'FILE_UPLOAD.CLEAR'\" (tldClick)=\"remove(file)\"></tld-close-button>\r\n </div>\r\n </div>\r\n <mat-progress-bar *ngIf=\"file.translationStatuss===translatingStatuss\" color=\"accent\" mode=\"determinate\"\r\n [value]=\"file.progress\"></mat-progress-bar>\r\n <div class=\"progress-message text-s\"\r\n *ngIf=\"(file.translationStatuss !== errorTranslatingStatuss) && (file.translationStatuss !== completedTranslatingStatuss) && (file.translationStatuss !== uploadedTranslatingStatuss)\">\r\n {{'MULTIPLE_FILES.STATUSS_' + file.translationStatuss | translate: {percent: file.progress} }}\r\n </div>\r\n <ng-container *ngIf=\"file.messages.length>0\">\r\n <lib-inline-message *ngFor=\"let message of file.messages\" [message]=\"message\"></lib-inline-message>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <lib-file-upload *ngIf=\"!translationStarted\" fxFlex class=\"tld-append-files\" (fileChange)=\"fileChange($event)\"\r\n [accept]=\"allowedFileTypes\" [maxSize]=\"maxFileUploadSize\" [multiple]=\"multipleFiles\"\r\n [disabled]=\"disableAppendFiles\" (errorEvent)=\"fileUploadError($event)\" [extendedAcceptList]=\"extendedFileTypes\">\r\n {{'MULTIPLE_FILES.APPEND' | translate}} ({{fileCount}}/{{maxFileCount}})\r\n </lib-file-upload>\r\n </div>\r\n <ng-container *ngIf=\"sourceDownloadPDF\">\r\n <ng-container\r\n *ngTemplateOutlet=\"conversionMessage; context: { messageKey:'MULTIPLE_FILES.PDF_DISCLAIMER', dialogParams: pdfConversion, buttonText: 'MULTIPLE_FILES.PDF_DISCLAIMER_LINK'}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"sourceDownloadImage\">\r\n <ng-container\r\n *ngTemplateOutlet=\"conversionMessage; context: { messageKey:'MULTIPLE_FILES.IMAGE_DISCLAIMER', dialogParams: imageConversion, buttonText: 'MULTIPLE_FILES.IMAGE_DISCLAIMER_LINK'}\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showVendorNotification\">\r\n <vendor-disclaimer></vendor-disclaimer>\r\n </ng-container>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" fxLayout.xs=\"column\" fxLayuotGap.xs=\"1rem\" class=\"button-container\">\r\n <tld-translate-button [disabled]=\"disableTranslateButton\" (clicked)=\"translateButtonClick()\"\r\n *ngIf=\"!translationStarted\"></tld-translate-button>\r\n <button (click)=\"clearAll()\" mat-stroked-button color=\"accent\"\r\n class=\"cancel-button border-accent\">{{'MULTIPLE_FILES.CLEAR_ALL' | translate}}</button>\r\n </div>\r\n</div>\r\n\r\n<ng-template #conversionMessage let-messageKey=\"messageKey\" let-dialogParams=\"dialogParams\" let-buttonText=\"buttonText\">\r\n\r\n <p class=\"conversion-disclaimer text-m\" [ngClass.gt-sm]=\"'conversion-info-margins-gt-sm'\">\r\n <span class=\"material-icons\">\r\n info\r\n </span>\r\n <span>\r\n {{messageKey | translate }}\r\n </span>\r\n <button class=\"conversion-message-action text-m-semi-bold\" (click)=\"conversionDialog(dialogParams)\">{{buttonText |\r\n translate}}</button>\r\n</ng-template>\r\n", styles: [".semi-bold,.text-s-semi-bold,.text-m-semi-bold,.text-l-semi-bold,.text-xl-semi-bold,.text-2-xl,.text-3-xl,.text-4-xl{font-weight:600}@media (min-width: 600px){.text-4-xl{font-size:2.75rem;line-height:3.375rem}}@media (min-width: 0) and (max-width: 599.9px){.text-4-xl{font-size:2rem;line-height:2.625rem}}.text-3-xl{font-size:2rem;line-height:2.625rem}.text-2-xl{font-size:1.5rem;line-height:2.125rem}.text-xl,.text-xl-semi-bold{font-size:1.25rem;line-height:2rem}.text-l,.cancel-button,.text-l-semi-bold{font-size:1rem;line-height:1.625rem}.text-m,.text-m-semi-bold{font-size:.875rem;line-height:1.4375rem}.text-s,.text-s-semi-bold{font-size:.75rem;line-height:1.25rem}.tld-translate-file-container{padding:3em;width:100%}.tld-translate-file-container .file-row{min-height:4rem;width:100%;padding:.5em 0;border-bottom:1px solid var(--base-70)}.tld-translate-file-container .file-row .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tld-translate-file-container .file-row lib-inline-message{margin-top:.5rem}.tld-translate-file-container .file-row .file-actions{margin-left:.5rem}.tld-append-files{font-size:1em;margin-top:1rem}:host ::ng-deep .tld-append-files .upload-button{justify-content:center!important;min-height:3.5rem!important}.conversion-disclaimer.conversion-info-margins-gt-sm{margin:.5em 20%}.conversion-disclaimer:not(.conversion-info-margins-gt-sm){text-align:center}tld-translate-button{margin:1em}.tld-multiple-mobile{padding:1rem}.tld-multiple-mobile tld-translate-button{margin:1rem 0 0;width:100%}.tld-multiple-mobile .file-row,.tld-multiple-mobile .multiple-files-body,.tld-multiple-mobile .cancel-button,.tld-multiple-mobile .button-container{width:100%}.multiple-files-body ::ng-deep lib-file-upload .file-upload .upload-button{text-align:center}.download-file{cursor:pointer}.material-icons{vertical-align:middle;color:var(--base-40)}.conversion-message-action{background:transparent;color:var(--accent);border:none;cursor:pointer}.extra-width{min-width:30rem}.progress-message{color:var(--base-40)}mat-progress-bar{margin:.375rem 0}.cancel-button{padding:.375rem 1.5rem}vendor-disclaimer{margin-bottom:1rem}\n"] }]
122
122
  }], ctorParameters: () => [{ type: i1.TldTranslateFileService }, { type: i2.TldTranslateConfigService }, { type: i3.MatDialog }, { type: i4.TldTranslateButtonService }, { type: i2.TldTranslateSystemManagementService }, { type: i5.AlertService }], propDecorators: { translationFiles: [{
123
123
  type: Input
124
124
  }] } });
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS1maWxlLW11bHRpcGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RsZC10cmFuc2xhdGUvc3JjL2xpYi9tb2R1bGVzL3RsZC1kb2N1bWVudC90bGQtdHJhbnNsYXRlLWZpbGUtbXVsdGlwbGUvdGxkLXRyYW5zbGF0ZS1maWxlLW11bHRpcGxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RsZC10cmFuc2xhdGUvc3JjL2xpYi9tb2R1bGVzL3RsZC1kb2N1bWVudC90bGQtdHJhbnNsYXRlLWZpbGUtbXVsdGlwbGUvdGxkLXRyYW5zbGF0ZS1maWxlLW11bHRpcGxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBaUMsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNdEMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDeEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBTzFFLE1BQU0sT0FBTyxpQ0FBa0MsU0FBUSw2QkFBNkI7SUFHN0Q7SUFDQTtJQUNBO0lBQ0E7SUFDRjtJQUNBO0lBTm5CLFlBQ3FCLFdBQW9DLEVBQ3BDLE1BQWlDLEVBQ2pDLE1BQWlCLEVBQ2pCLHNCQUFpRCxFQUNuRCx1QkFBNEQsRUFDNUQsWUFBMEI7UUFFM0MsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFQaEIsZ0JBQVcs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SUFDN0QsQ0FBQztJQUVELDJIQUEySDtJQUMzSCxvQkFBb0I7UUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQztRQUN6RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsdUNBQXVDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hILENBQUM7dUdBOUdVLGlDQUFpQzsyRkFBakMsaUNBQWlDLDRJQ2xCOUMsbzBJQXlFQTs7MkZEdkRhLGlDQUFpQztrQkFMN0MsU0FBUzsrQkFDRSw2QkFBNkI7aVJBZ0I5QixnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBGaWxlVXBsb2FkRXJyb3IsIE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlQnV0dG9uU2VydmljZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vY29tcG9uZW50cy90cmFuc2xhdGUtYnV0dG9uL3RsZC10cmFuc2xhdGUtYnV0dG9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJRmlsZU1ldGEgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL21vZGVscyc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLCBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IElUcmFuc2xhdGlvbkZpbGUgfSBmcm9tICcuLi9tb2RlbHMvdHJhbnNsYXRlLWZpbGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVGaWxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RsZC10cmFuc2xhdGUtZmlsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGxkRmlsZVRyYW5zbGF0ZUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi90bGQtZmlsZS10cmFuc2xhdGUtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL21vZGVscy9hdXRvLWxhbmd1YWdlLWRldGVjdGlvbi1rZXkuY29uc3QnO1xyXG5pbXBvcnQgeyBGaWxlQ2F0ZWdvcnkgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcGkvbW9kZWxzL2ZpbGUtY2F0ZWdvcnkubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0bGQtdHJhbnNsYXRlLWZpbGUtbXVsdGlwbGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90bGQtdHJhbnNsYXRlLWZpbGUtbXVsdGlwbGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RsZC10cmFuc2xhdGUtZmlsZS1tdWx0aXBsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUbGRUcmFuc2xhdGVGaWxlTXVsdGlwbGVDb21wb25lbnQgZXh0ZW5kcyBUbGRGaWxlVHJhbnNsYXRlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbGVTZXJ2aWNlOiBUbGRUcmFuc2xhdGVGaWxlU2VydmljZSxcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBjb25maWc6IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNsYXRlQnV0dG9uU2VydmljZTogVGxkVHJhbnNsYXRlQnV0dG9uU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3lzdGVtTWFuYWdlbWVudFNlcnZpY2U6IFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoZGlhbG9nLCBjb25maWcsIGZpbGVTZXJ2aWNlKTtcclxuICB9XHJcbiAgQElucHV0KCkgdHJhbnNsYXRpb25GaWxlczogSVRyYW5zbGF0aW9uRmlsZVtdO1xyXG5cclxuICBhbGxvd2VkRmlsZVR5cGVzOiBzdHJpbmdbXTtcclxuICBhbGxvd2VkRmlsZVR5cGVzQXV0aFVzZXI6IHN0cmluZ1tdO1xyXG4gIG1heEZpbGVVcGxvYWRTaXplOiBudW1iZXI7XHJcbiAgbXVsdGlwbGVGaWxlczogYm9vbGVhbjtcclxuICBleHRlbmRlZEZpbGVUeXBlczogc3RyaW5nW107XHJcbiAgc2hvd1ZlbmRvck5vdGlmaWNhdGlvbjogYm9vbGVhbjtcclxuXHJcbiAgcHJpdmF0ZSBpc1NlbGVjdExhbmd1YWdlV2FybmluZ0FkZGVkID0gZmFsc2U7XHJcblxyXG4gIGdldCBpc0F1dG9Tb3VyY2VMYW5nRW5hYmxlZCgpIHtcclxuICAgIGNvbnN0IGlzU291cmNlTGFuZ0F1dG8gPSB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLmdldEFjdGl2ZVN5c3RlbU9iaigpLnNvdXJjZUxhbmd1YWdlID09PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVk7XHJcblxyXG4gICAgaWYgKGlzU291cmNlTGFuZ0F1dG8pIHtcclxuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RMYW5ndWFnZVdhcm5pbmdBZGRlZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmlzU2VsZWN0TGFuZ3VhZ2VXYXJuaW5nQWRkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuaW5nKCdGSUxFX1VQTE9BRC5TRUxFQ1RfTEFOR1VBR0VfV0FSTklORycsIG51bGwsIHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc1NlbGVjdExhbmd1YWdlV2FybmluZ0FkZGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRlbGV0ZU1lc3NhZ2UoTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuV0FSTklORywgJ0ZJTEVfVVBMT0FELlNFTEVDVF9MQU5HVUFHRV9XQVJOSU5HJywgbnVsbCwgdHJ1ZSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXNTb3VyY2VMYW5nQXV0bztcclxuICB9XHJcblxyXG4gIGdldCB0cmFuc2xhdGlvblN0YXJ0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZS50cmFuc2xhdGlvblN0YXJ0ZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzYWJsZUFwcGVuZEZpbGVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsZVNlcnZpY2U/LnRyYW5zbGF0aW9uU3RhcnRlZCB8fCB0aGlzLmZpbGVTZXJ2aWNlLnRyYW5zbGF0aW9uRmlsZXM/Lmxlbmd0aCA+PSB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLm51bWJlck9mRmlsZXNBbGxvd2VkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQXV0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uY29yZUNvbmZpZz8uaXNBdXRoO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYW5zbGF0ZWRGaWxlc0NvdW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsZVNlcnZpY2U/LnRyYW5zbGF0ZWRDb3VudCB8fCAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1heEZpbGVDb3VudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLm51bWJlck9mRmlsZXNBbGxvd2VkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbGVDb3VudCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uRmlsZXM/Lmxlbmd0aCB8fCAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRpc2FibGVUcmFuc2xhdGVCdXR0b24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZS5kaXNhYmxlVHJhbnNsYXRlQnV0dG9uIHx8IHRoaXMuaXNBdXRvU291cmNlTGFuZ0VuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYWxsb3dlZEZpbGVUeXBlcyA9IHRoaXMuY29uZmlnLmZpbGVDb25maWcuYWxsb3dlZEZpbGVUeXBlcztcclxuICAgIHRoaXMuZXh0ZW5kZWRGaWxlVHlwZXMgPSB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLmV4dGVuZGVkRmlsZVR5cGVzO1xyXG4gICAgdGhpcy5tYXhGaWxlVXBsb2FkU2l6ZSA9IHRoaXMuY29uZmlnLmZpbGVDb25maWcubWF4U2l6ZTtcclxuICAgIHRoaXMubXVsdGlwbGVGaWxlcyA9IHRoaXMuY29uZmlnLmZpbGVDb25maWcubnVtYmVyT2ZGaWxlc0FsbG93ZWQgPiAxO1xyXG5cclxuICAgIHRoaXMuZmlsZVNlcnZpY2Uub25GaWxlc1VwbG9hZGVkKCkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4geyB0aGlzLnRyYW5zbGF0ZUJ1dHRvblNlcnZpY2UucHVsc2VCdXR0b24oKTsgfSlcclxuXHJcbiAgfVxyXG5cclxuICBkb3dubG9hZChmaWxlOiBJVHJhbnNsYXRpb25GaWxlLCBmaWxlTWV0YT86IElGaWxlTWV0YSkge1xyXG4gICAgaWYgKCFmaWxlTWV0YSkge1xyXG4gICAgICBmaWxlTWV0YSA9IGZpbGUuYXZhaWxhYmxlRXh0ZW5zaW9ucz8uZmluZCgoZmlsZSkgPT4gZmlsZS5jYXRlZ29yeSA9PT0gRmlsZUNhdGVnb3J5LlRSQU5TTEFURUQpID8/IGZpbGUuYXZhaWxhYmxlRXh0ZW5zaW9ucz8uWzBdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5maWxlU2VydmljZS5kb3dubG9hZChmaWxlLCBmaWxlTWV0YSk7XHJcbiAgfVxyXG5cclxuICBmaWxlQ2hhbmdlKGZpbGVzOiBGaWxlW10pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5maWxlU2VydmljZS5sb2FkRmlsZVByZXZpZXcoZmlsZXNbaV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHJlbW92ZShmaWxlOiBJVHJhbnNsYXRpb25GaWxlKSB7XHJcbiAgICBpZiAodGhpcy50cmFuc2xhdGlvbkZpbGVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICB0aGlzLmNsZWFyQWxsKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5maWxlU2VydmljZS5yZW1vdmUoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaWxlVXBsb2FkRXJyb3IoZXJyb3I6IGFueSkge1xyXG4gICAgdGhpcy5maWxlU2VydmljZS5maWxlVXBsb2FkRXJyb3IoZXJyb3IgYXMgRmlsZVVwbG9hZEVycm9yKTtcclxuICB9XHJcblxyXG4gIC8vIG5vIG5lZWQgdG8gaGFuZGxlIHRyYW5zbGF0aW9uLCBzaW5jZSBpdCBpcyBoYXBwZW5pbmcgaW4gdHJhbnNsYXRlIGJ1dHRvbiBjb21wb25lbnQsIGJ1dCB0aGlzIG1ldGhvZCBpcyBmb3IgY3VzdG9tIGFjdGlvblxyXG4gIHRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCkge1xyXG4gICAgY29uc3QgdmVuZG9yID0gdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5hY3RpdmVWZW5kb3I7XHJcbiAgICB0aGlzLnNob3dWZW5kb3JOb3RpZmljYXRpb24gPSB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLnByb2dyZXNzSW5kaWNhdG9yVGl0bGVWaXNpYmxlRm9yVmVuZG9ycy5pbmNsdWRlcyh2ZW5kb3IpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidGxkLXRyYW5zbGF0ZS1maWxlLWNvbnRhaW5lclwiIFtuZ0NsYXNzLnhzXT1cIid0bGQtbXVsdGlwbGUtbW9iaWxlJ1wiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGbGV4XHJcbiAgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XHJcbiAgICB7eydNVUxUSVBMRV9GSUxFUy5TQ1JFRU5fUkVBREVSX0FOTk9VTkNFTUVOVCcgfCB0cmFuc2xhdGU6IHt0cmFuc2xhdGVkOnRyYW5zbGF0ZWRGaWxlc0NvdW50ICwgdG90YWw6IGZpbGVDb3VudH0gfX1cclxuICA8L2Rpdj5cclxuICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRHYXA9XCIwLjVyZW1cIiBmeEZsZXggY2xhc3M9XCJtdWx0aXBsZS1maWxlcy1ib2R5XCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIHRyYW5zbGF0aW9uRmlsZXNcIiBjbGFzcz1cImZpbGUtcm93XCIgW25nQ2xhc3MuZ3Qtc21dPVwiJ2V4dHJhLXdpZHRoJ1wiIGZ4TGF5b3V0PVwicm93XCJcclxuICAgICAgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBmeExheW91dEFsaWduLnhzPVwiZmxleC1zdGFydCBjZW50ZXJcIj5cclxuICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4RmxleD5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbi54cz1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1uYW1lXCI+XHJcbiAgICAgICAgICAgIHt7ZmlsZS5vcmlnaW5hbEZpbGVOYW1lfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGNsYXNzPVwiZmlsZS1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgIDx0bGQtdHJhbnNsYXRlLWZpbGUtZG93bmxvYWQtYnV0dG9uICh0bGRDbGljayk9XCJkb3dubG9hZChmaWxlLCAkZXZlbnQpXCIgKm5nSWY9XCJmaWxlLmRvd25sb2FkQXZhaWxhYmxlXCJcclxuICAgICAgICAgICAgICBbc291cmNlRG93bmxvYWRdPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJmaWxlLmlzRG93bmxvYWRpbmdcIiBbZmlsZV09XCJmaWxlXCI+XHJcbiAgICAgICAgICAgIDwvdGxkLXRyYW5zbGF0ZS1maWxlLWRvd25sb2FkLWJ1dHRvbj5cclxuICAgICAgICAgICAgPHRsZC1jbG9zZS1idXR0b24gW3Rvb2x0aXBdPVwiJ0ZJTEVfVVBMT0FELkNMRUFSJ1wiICh0bGRDbGljayk9XCJyZW1vdmUoZmlsZSlcIj48L3RsZC1jbG9zZS1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LXByb2dyZXNzLWJhciAqbmdJZj1cImZpbGUudHJhbnNsYXRpb25TdGF0dXNzPT09dHJhbnNsYXRpbmdTdGF0dXNzXCIgY29sb3I9XCJhY2NlbnRcIiBtb2RlPVwiZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cImZpbGUucHJvZ3Jlc3NcIj48L21hdC1wcm9ncmVzcy1iYXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLW1lc3NhZ2UgdGV4dC1zXCJcclxuICAgICAgICAgICpuZ0lmPVwiKGZpbGUudHJhbnNsYXRpb25TdGF0dXNzICE9PSBlcnJvclRyYW5zbGF0aW5nU3RhdHVzcykgJiYgKGZpbGUudHJhbnNsYXRpb25TdGF0dXNzICE9PSBjb21wbGV0ZWRUcmFuc2xhdGluZ1N0YXR1c3MpICYmIChmaWxlLnRyYW5zbGF0aW9uU3RhdHVzcyAhPT0gdXBsb2FkZWRUcmFuc2xhdGluZ1N0YXR1c3MpXCI+XHJcbiAgICAgICAgICB7eydNVUxUSVBMRV9GSUxFUy5TVEFUVVNTXycgKyBmaWxlLnRyYW5zbGF0aW9uU3RhdHVzcyB8IHRyYW5zbGF0ZToge3BlcmNlbnQ6IGZpbGUucHJvZ3Jlc3N9IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbGUubWVzc2FnZXMubGVuZ3RoPjBcIj5cclxuICAgICAgICAgIDxsaWItaW5saW5lLW1lc3NhZ2UgKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2YgZmlsZS5tZXNzYWdlc1wiIFttZXNzYWdlXT1cIm1lc3NhZ2VcIj48L2xpYi1pbmxpbmUtbWVzc2FnZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8dGxkLWZpbGUtdXBsb2FkICpuZ0lmPVwiIXRyYW5zbGF0aW9uU3RhcnRlZFwiIGZ4RmxleCBjbGFzcz1cInRsZC1hcHBlbmQtZmlsZXNcIiAoZmlsZUNoYW5nZSk9XCJmaWxlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICBbYWNjZXB0XT1cImFsbG93ZWRGaWxlVHlwZXNcIiBbbWF4U2l6ZV09XCJtYXhGaWxlVXBsb2FkU2l6ZVwiIFttdWx0aXBsZV09XCJtdWx0aXBsZUZpbGVzXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVBcHBlbmRGaWxlc1wiIChlcnJvckV2ZW50KT1cImZpbGVVcGxvYWRFcnJvcigkZXZlbnQpXCIgW2V4dGVuZGVkQWNjZXB0TGlzdF09XCJleHRlbmRlZEZpbGVUeXBlc1wiPlxyXG4gICAgICB7eydNVUxUSVBMRV9GSUxFUy5BUFBFTkQnIHwgdHJhbnNsYXRlfX0gKHt7ZmlsZUNvdW50fX0ve3ttYXhGaWxlQ291bnR9fSlcclxuICAgIDwvdGxkLWZpbGUtdXBsb2FkPlxyXG4gIDwvZGl2PlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzb3VyY2VEb3dubG9hZFBERlwiPlxyXG4gICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnZlcnNpb25NZXNzYWdlOyBjb250ZXh0OiB7IG1lc3NhZ2VLZXk6J01VTFRJUExFX0ZJTEVTLlBERl9ESVNDTEFJTUVSJywgZGlhbG9nUGFyYW1zOiBwZGZDb252ZXJzaW9uLCBidXR0b25UZXh0OiAnTVVMVElQTEVfRklMRVMuUERGX0RJU0NMQUlNRVJfTElOSyd9XCI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNvdXJjZURvd25sb2FkSW1hZ2VcIj5cclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb252ZXJzaW9uTWVzc2FnZTsgY29udGV4dDogeyBtZXNzYWdlS2V5OidNVUxUSVBMRV9GSUxFUy5JTUFHRV9ESVNDTEFJTUVSJywgZGlhbG9nUGFyYW1zOiBpbWFnZUNvbnZlcnNpb24sIGJ1dHRvblRleHQ6ICdNVUxUSVBMRV9GSUxFUy5JTUFHRV9ESVNDTEFJTUVSX0xJTksnfVwiPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VmVuZG9yTm90aWZpY2F0aW9uXCI+XHJcbiAgICA8dmVuZG9yLWRpc2NsYWltZXI+PC92ZW5kb3ItZGlzY2xhaW1lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBmeExheW91dC54cz1cImNvbHVtblwiIGZ4TGF5dW90R2FwLnhzPVwiMXJlbVwiIGNsYXNzPVwiYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gICAgPHRsZC10cmFuc2xhdGUtYnV0dG9uIFtkaXNhYmxlZF09XCJkaXNhYmxlVHJhbnNsYXRlQnV0dG9uXCIgKGNsaWNrZWQpPVwidHJhbnNsYXRlQnV0dG9uQ2xpY2soKVwiXHJcbiAgICAgICpuZ0lmPVwiIXRyYW5zbGF0aW9uU3RhcnRlZFwiPjwvdGxkLXRyYW5zbGF0ZS1idXR0b24+XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJjbGVhckFsbCgpXCIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCJcclxuICAgICAgY2xhc3M9XCJjYW5jZWwtYnV0dG9uIGJvcmRlci1hY2NlbnRcIj57eydNVUxUSVBMRV9GSUxFUy5DTEVBUl9BTEwnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbnZlcnNpb25NZXNzYWdlIGxldC1tZXNzYWdlS2V5PVwibWVzc2FnZUtleVwiIGxldC1kaWFsb2dQYXJhbXM9XCJkaWFsb2dQYXJhbXNcIiBsZXQtYnV0dG9uVGV4dD1cImJ1dHRvblRleHRcIj5cclxuXHJcbiAgPHAgY2xhc3M9XCJjb252ZXJzaW9uLWRpc2NsYWltZXIgdGV4dC1tXCIgW25nQ2xhc3MuZ3Qtc21dPVwiJ2NvbnZlcnNpb24taW5mby1tYXJnaW5zLWd0LXNtJ1wiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPlxyXG4gICAgICBpbmZvXHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3Bhbj5cclxuICAgICAge3ttZXNzYWdlS2V5IHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiY29udmVyc2lvbi1tZXNzYWdlLWFjdGlvbiB0ZXh0LW0tc2VtaS1ib2xkXCIgKGNsaWNrKT1cImNvbnZlcnNpb25EaWFsb2coZGlhbG9nUGFyYW1zKVwiPnt7YnV0dG9uVGV4dCB8XHJcbiAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS1maWxlLW11bHRpcGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RsZC10cmFuc2xhdGUvc3JjL2xpYi9tb2R1bGVzL3RsZC1kb2N1bWVudC90bGQtdHJhbnNsYXRlLWZpbGUtbXVsdGlwbGUvdGxkLXRyYW5zbGF0ZS1maWxlLW11bHRpcGxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RsZC10cmFuc2xhdGUvc3JjL2xpYi9tb2R1bGVzL3RsZC1kb2N1bWVudC90bGQtdHJhbnNsYXRlLWZpbGUtbXVsdGlwbGUvdGxkLXRyYW5zbGF0ZS1maWxlLW11bHRpcGxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBaUMsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNdEMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDeEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBTzFFLE1BQU0sT0FBTyxpQ0FBa0MsU0FBUSw2QkFBNkI7SUFHN0Q7SUFDQTtJQUNBO0lBQ0E7SUFDRjtJQUNBO0lBTm5CLFlBQ3FCLFdBQW9DLEVBQ3BDLE1BQWlDLEVBQ2pDLE1BQWlCLEVBQ2pCLHNCQUFpRCxFQUNuRCx1QkFBNEQsRUFDNUQsWUFBMEI7UUFFM0MsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFQaEIsZ0JBQVcs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SUFDN0QsQ0FBQztJQUVELDJIQUEySDtJQUMzSCxvQkFBb0I7UUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQztRQUN6RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsdUNBQXVDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hILENBQUM7dUdBOUdVLGlDQUFpQzsyRkFBakMsaUNBQWlDLDRJQ2xCOUMsbzBJQXlFQTs7MkZEdkRhLGlDQUFpQztrQkFMN0MsU0FBUzsrQkFDRSw2QkFBNkI7aVJBZ0I5QixnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBGaWxlVXBsb2FkRXJyb3IsIE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlQnV0dG9uU2VydmljZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vY29tcG9uZW50cy90cmFuc2xhdGUtYnV0dG9uL3RsZC10cmFuc2xhdGUtYnV0dG9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJRmlsZU1ldGEgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL21vZGVscyc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLCBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IElUcmFuc2xhdGlvbkZpbGUgfSBmcm9tICcuLi9tb2RlbHMvdHJhbnNsYXRlLWZpbGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVGaWxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RsZC10cmFuc2xhdGUtZmlsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGxkRmlsZVRyYW5zbGF0ZUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi90bGQtZmlsZS10cmFuc2xhdGUtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL21vZGVscy9hdXRvLWxhbmd1YWdlLWRldGVjdGlvbi1rZXkuY29uc3QnO1xyXG5pbXBvcnQgeyBGaWxlQ2F0ZWdvcnkgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcGkvbW9kZWxzL2ZpbGUtY2F0ZWdvcnkubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0bGQtdHJhbnNsYXRlLWZpbGUtbXVsdGlwbGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90bGQtdHJhbnNsYXRlLWZpbGUtbXVsdGlwbGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RsZC10cmFuc2xhdGUtZmlsZS1tdWx0aXBsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUbGRUcmFuc2xhdGVGaWxlTXVsdGlwbGVDb21wb25lbnQgZXh0ZW5kcyBUbGRGaWxlVHJhbnNsYXRlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbGVTZXJ2aWNlOiBUbGRUcmFuc2xhdGVGaWxlU2VydmljZSxcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBjb25maWc6IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNsYXRlQnV0dG9uU2VydmljZTogVGxkVHJhbnNsYXRlQnV0dG9uU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3lzdGVtTWFuYWdlbWVudFNlcnZpY2U6IFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoZGlhbG9nLCBjb25maWcsIGZpbGVTZXJ2aWNlKTtcclxuICB9XHJcbiAgQElucHV0KCkgdHJhbnNsYXRpb25GaWxlczogSVRyYW5zbGF0aW9uRmlsZVtdO1xyXG5cclxuICBhbGxvd2VkRmlsZVR5cGVzOiBzdHJpbmdbXTtcclxuICBhbGxvd2VkRmlsZVR5cGVzQXV0aFVzZXI6IHN0cmluZ1tdO1xyXG4gIG1heEZpbGVVcGxvYWRTaXplOiBudW1iZXI7XHJcbiAgbXVsdGlwbGVGaWxlczogYm9vbGVhbjtcclxuICBleHRlbmRlZEZpbGVUeXBlczogc3RyaW5nW107XHJcbiAgc2hvd1ZlbmRvck5vdGlmaWNhdGlvbjogYm9vbGVhbjtcclxuXHJcbiAgcHJpdmF0ZSBpc1NlbGVjdExhbmd1YWdlV2FybmluZ0FkZGVkID0gZmFsc2U7XHJcblxyXG4gIGdldCBpc0F1dG9Tb3VyY2VMYW5nRW5hYmxlZCgpIHtcclxuICAgIGNvbnN0IGlzU291cmNlTGFuZ0F1dG8gPSB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLmdldEFjdGl2ZVN5c3RlbU9iaigpLnNvdXJjZUxhbmd1YWdlID09PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVk7XHJcblxyXG4gICAgaWYgKGlzU291cmNlTGFuZ0F1dG8pIHtcclxuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RMYW5ndWFnZVdhcm5pbmdBZGRlZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmlzU2VsZWN0TGFuZ3VhZ2VXYXJuaW5nQWRkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuaW5nKCdGSUxFX1VQTE9BRC5TRUxFQ1RfTEFOR1VBR0VfV0FSTklORycsIG51bGwsIHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc1NlbGVjdExhbmd1YWdlV2FybmluZ0FkZGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRlbGV0ZU1lc3NhZ2UoTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuV0FSTklORywgJ0ZJTEVfVVBMT0FELlNFTEVDVF9MQU5HVUFHRV9XQVJOSU5HJywgbnVsbCwgdHJ1ZSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXNTb3VyY2VMYW5nQXV0bztcclxuICB9XHJcblxyXG4gIGdldCB0cmFuc2xhdGlvblN0YXJ0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZS50cmFuc2xhdGlvblN0YXJ0ZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzYWJsZUFwcGVuZEZpbGVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsZVNlcnZpY2U/LnRyYW5zbGF0aW9uU3RhcnRlZCB8fCB0aGlzLmZpbGVTZXJ2aWNlLnRyYW5zbGF0aW9uRmlsZXM/Lmxlbmd0aCA+PSB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLm51bWJlck9mRmlsZXNBbGxvd2VkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQXV0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uY29yZUNvbmZpZz8uaXNBdXRoO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYW5zbGF0ZWRGaWxlc0NvdW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsZVNlcnZpY2U/LnRyYW5zbGF0ZWRDb3VudCB8fCAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1heEZpbGVDb3VudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLm51bWJlck9mRmlsZXNBbGxvd2VkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbGVDb3VudCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uRmlsZXM/Lmxlbmd0aCB8fCAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRpc2FibGVUcmFuc2xhdGVCdXR0b24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWxlU2VydmljZS5kaXNhYmxlVHJhbnNsYXRlQnV0dG9uIHx8IHRoaXMuaXNBdXRvU291cmNlTGFuZ0VuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYWxsb3dlZEZpbGVUeXBlcyA9IHRoaXMuY29uZmlnLmZpbGVDb25maWcuYWxsb3dlZEZpbGVUeXBlcztcclxuICAgIHRoaXMuZXh0ZW5kZWRGaWxlVHlwZXMgPSB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLmV4dGVuZGVkRmlsZVR5cGVzO1xyXG4gICAgdGhpcy5tYXhGaWxlVXBsb2FkU2l6ZSA9IHRoaXMuY29uZmlnLmZpbGVDb25maWcubWF4U2l6ZTtcclxuICAgIHRoaXMubXVsdGlwbGVGaWxlcyA9IHRoaXMuY29uZmlnLmZpbGVDb25maWcubnVtYmVyT2ZGaWxlc0FsbG93ZWQgPiAxO1xyXG5cclxuICAgIHRoaXMuZmlsZVNlcnZpY2Uub25GaWxlc1VwbG9hZGVkKCkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4geyB0aGlzLnRyYW5zbGF0ZUJ1dHRvblNlcnZpY2UucHVsc2VCdXR0b24oKTsgfSlcclxuXHJcbiAgfVxyXG5cclxuICBkb3dubG9hZChmaWxlOiBJVHJhbnNsYXRpb25GaWxlLCBmaWxlTWV0YT86IElGaWxlTWV0YSkge1xyXG4gICAgaWYgKCFmaWxlTWV0YSkge1xyXG4gICAgICBmaWxlTWV0YSA9IGZpbGUuYXZhaWxhYmxlRXh0ZW5zaW9ucz8uZmluZCgoZmlsZSkgPT4gZmlsZS5jYXRlZ29yeSA9PT0gRmlsZUNhdGVnb3J5LlRSQU5TTEFURUQpID8/IGZpbGUuYXZhaWxhYmxlRXh0ZW5zaW9ucz8uWzBdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5maWxlU2VydmljZS5kb3dubG9hZChmaWxlLCBmaWxlTWV0YSk7XHJcbiAgfVxyXG5cclxuICBmaWxlQ2hhbmdlKGZpbGVzOiBGaWxlW10pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5maWxlU2VydmljZS5sb2FkRmlsZVByZXZpZXcoZmlsZXNbaV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHJlbW92ZShmaWxlOiBJVHJhbnNsYXRpb25GaWxlKSB7XHJcbiAgICBpZiAodGhpcy50cmFuc2xhdGlvbkZpbGVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICB0aGlzLmNsZWFyQWxsKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5maWxlU2VydmljZS5yZW1vdmUoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaWxlVXBsb2FkRXJyb3IoZXJyb3I6IGFueSkge1xyXG4gICAgdGhpcy5maWxlU2VydmljZS5maWxlVXBsb2FkRXJyb3IoZXJyb3IgYXMgRmlsZVVwbG9hZEVycm9yKTtcclxuICB9XHJcblxyXG4gIC8vIG5vIG5lZWQgdG8gaGFuZGxlIHRyYW5zbGF0aW9uLCBzaW5jZSBpdCBpcyBoYXBwZW5pbmcgaW4gdHJhbnNsYXRlIGJ1dHRvbiBjb21wb25lbnQsIGJ1dCB0aGlzIG1ldGhvZCBpcyBmb3IgY3VzdG9tIGFjdGlvblxyXG4gIHRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCkge1xyXG4gICAgY29uc3QgdmVuZG9yID0gdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5hY3RpdmVWZW5kb3I7XHJcbiAgICB0aGlzLnNob3dWZW5kb3JOb3RpZmljYXRpb24gPSB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLnByb2dyZXNzSW5kaWNhdG9yVGl0bGVWaXNpYmxlRm9yVmVuZG9ycy5pbmNsdWRlcyh2ZW5kb3IpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidGxkLXRyYW5zbGF0ZS1maWxlLWNvbnRhaW5lclwiIFtuZ0NsYXNzLnhzXT1cIid0bGQtbXVsdGlwbGUtbW9iaWxlJ1wiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGbGV4XHJcbiAgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjZGstdmlzdWFsbHktaGlkZGVuXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XHJcbiAgICB7eydNVUxUSVBMRV9GSUxFUy5TQ1JFRU5fUkVBREVSX0FOTk9VTkNFTUVOVCcgfCB0cmFuc2xhdGU6IHt0cmFuc2xhdGVkOnRyYW5zbGF0ZWRGaWxlc0NvdW50ICwgdG90YWw6IGZpbGVDb3VudH0gfX1cclxuICA8L2Rpdj5cclxuICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRHYXA9XCIwLjVyZW1cIiBmeEZsZXggY2xhc3M9XCJtdWx0aXBsZS1maWxlcy1ib2R5XCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIHRyYW5zbGF0aW9uRmlsZXNcIiBjbGFzcz1cImZpbGUtcm93XCIgW25nQ2xhc3MuZ3Qtc21dPVwiJ2V4dHJhLXdpZHRoJ1wiIGZ4TGF5b3V0PVwicm93XCJcclxuICAgICAgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBmeExheW91dEFsaWduLnhzPVwiZmxleC1zdGFydCBjZW50ZXJcIj5cclxuICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4RmxleD5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbi54cz1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1uYW1lXCI+XHJcbiAgICAgICAgICAgIHt7ZmlsZS5vcmlnaW5hbEZpbGVOYW1lfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGNsYXNzPVwiZmlsZS1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgIDx0bGQtdHJhbnNsYXRlLWZpbGUtZG93bmxvYWQtYnV0dG9uICh0bGRDbGljayk9XCJkb3dubG9hZChmaWxlLCAkZXZlbnQpXCIgKm5nSWY9XCJmaWxlLmRvd25sb2FkQXZhaWxhYmxlXCJcclxuICAgICAgICAgICAgICBbc291cmNlRG93bmxvYWRdPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJmaWxlLmlzRG93bmxvYWRpbmdcIiBbZmlsZV09XCJmaWxlXCI+XHJcbiAgICAgICAgICAgIDwvdGxkLXRyYW5zbGF0ZS1maWxlLWRvd25sb2FkLWJ1dHRvbj5cclxuICAgICAgICAgICAgPHRsZC1jbG9zZS1idXR0b24gW3Rvb2x0aXBdPVwiJ0ZJTEVfVVBMT0FELkNMRUFSJ1wiICh0bGRDbGljayk9XCJyZW1vdmUoZmlsZSlcIj48L3RsZC1jbG9zZS1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bWF0LXByb2dyZXNzLWJhciAqbmdJZj1cImZpbGUudHJhbnNsYXRpb25TdGF0dXNzPT09dHJhbnNsYXRpbmdTdGF0dXNzXCIgY29sb3I9XCJhY2NlbnRcIiBtb2RlPVwiZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cImZpbGUucHJvZ3Jlc3NcIj48L21hdC1wcm9ncmVzcy1iYXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLW1lc3NhZ2UgdGV4dC1zXCJcclxuICAgICAgICAgICpuZ0lmPVwiKGZpbGUudHJhbnNsYXRpb25TdGF0dXNzICE9PSBlcnJvclRyYW5zbGF0aW5nU3RhdHVzcykgJiYgKGZpbGUudHJhbnNsYXRpb25TdGF0dXNzICE9PSBjb21wbGV0ZWRUcmFuc2xhdGluZ1N0YXR1c3MpICYmIChmaWxlLnRyYW5zbGF0aW9uU3RhdHVzcyAhPT0gdXBsb2FkZWRUcmFuc2xhdGluZ1N0YXR1c3MpXCI+XHJcbiAgICAgICAgICB7eydNVUxUSVBMRV9GSUxFUy5TVEFUVVNTXycgKyBmaWxlLnRyYW5zbGF0aW9uU3RhdHVzcyB8IHRyYW5zbGF0ZToge3BlcmNlbnQ6IGZpbGUucHJvZ3Jlc3N9IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbGUubWVzc2FnZXMubGVuZ3RoPjBcIj5cclxuICAgICAgICAgIDxsaWItaW5saW5lLW1lc3NhZ2UgKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2YgZmlsZS5tZXNzYWdlc1wiIFttZXNzYWdlXT1cIm1lc3NhZ2VcIj48L2xpYi1pbmxpbmUtbWVzc2FnZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bGliLWZpbGUtdXBsb2FkICpuZ0lmPVwiIXRyYW5zbGF0aW9uU3RhcnRlZFwiIGZ4RmxleCBjbGFzcz1cInRsZC1hcHBlbmQtZmlsZXNcIiAoZmlsZUNoYW5nZSk9XCJmaWxlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICBbYWNjZXB0XT1cImFsbG93ZWRGaWxlVHlwZXNcIiBbbWF4U2l6ZV09XCJtYXhGaWxlVXBsb2FkU2l6ZVwiIFttdWx0aXBsZV09XCJtdWx0aXBsZUZpbGVzXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVBcHBlbmRGaWxlc1wiIChlcnJvckV2ZW50KT1cImZpbGVVcGxvYWRFcnJvcigkZXZlbnQpXCIgW2V4dGVuZGVkQWNjZXB0TGlzdF09XCJleHRlbmRlZEZpbGVUeXBlc1wiPlxyXG4gICAgICB7eydNVUxUSVBMRV9GSUxFUy5BUFBFTkQnIHwgdHJhbnNsYXRlfX0gKHt7ZmlsZUNvdW50fX0ve3ttYXhGaWxlQ291bnR9fSlcclxuICAgIDwvbGliLWZpbGUtdXBsb2FkPlxyXG4gIDwvZGl2PlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzb3VyY2VEb3dubG9hZFBERlwiPlxyXG4gICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnZlcnNpb25NZXNzYWdlOyBjb250ZXh0OiB7IG1lc3NhZ2VLZXk6J01VTFRJUExFX0ZJTEVTLlBERl9ESVNDTEFJTUVSJywgZGlhbG9nUGFyYW1zOiBwZGZDb252ZXJzaW9uLCBidXR0b25UZXh0OiAnTVVMVElQTEVfRklMRVMuUERGX0RJU0NMQUlNRVJfTElOSyd9XCI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNvdXJjZURvd25sb2FkSW1hZ2VcIj5cclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb252ZXJzaW9uTWVzc2FnZTsgY29udGV4dDogeyBtZXNzYWdlS2V5OidNVUxUSVBMRV9GSUxFUy5JTUFHRV9ESVNDTEFJTUVSJywgZGlhbG9nUGFyYW1zOiBpbWFnZUNvbnZlcnNpb24sIGJ1dHRvblRleHQ6ICdNVUxUSVBMRV9GSUxFUy5JTUFHRV9ESVNDTEFJTUVSX0xJTksnfVwiPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VmVuZG9yTm90aWZpY2F0aW9uXCI+XHJcbiAgICA8dmVuZG9yLWRpc2NsYWltZXI+PC92ZW5kb3ItZGlzY2xhaW1lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBmeExheW91dC54cz1cImNvbHVtblwiIGZ4TGF5dW90R2FwLnhzPVwiMXJlbVwiIGNsYXNzPVwiYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gICAgPHRsZC10cmFuc2xhdGUtYnV0dG9uIFtkaXNhYmxlZF09XCJkaXNhYmxlVHJhbnNsYXRlQnV0dG9uXCIgKGNsaWNrZWQpPVwidHJhbnNsYXRlQnV0dG9uQ2xpY2soKVwiXHJcbiAgICAgICpuZ0lmPVwiIXRyYW5zbGF0aW9uU3RhcnRlZFwiPjwvdGxkLXRyYW5zbGF0ZS1idXR0b24+XHJcbiAgICA8YnV0dG9uIChjbGljayk9XCJjbGVhckFsbCgpXCIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCJcclxuICAgICAgY2xhc3M9XCJjYW5jZWwtYnV0dG9uIGJvcmRlci1hY2NlbnRcIj57eydNVUxUSVBMRV9GSUxFUy5DTEVBUl9BTEwnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbnZlcnNpb25NZXNzYWdlIGxldC1tZXNzYWdlS2V5PVwibWVzc2FnZUtleVwiIGxldC1kaWFsb2dQYXJhbXM9XCJkaWFsb2dQYXJhbXNcIiBsZXQtYnV0dG9uVGV4dD1cImJ1dHRvblRleHRcIj5cclxuXHJcbiAgPHAgY2xhc3M9XCJjb252ZXJzaW9uLWRpc2NsYWltZXIgdGV4dC1tXCIgW25nQ2xhc3MuZ3Qtc21dPVwiJ2NvbnZlcnNpb24taW5mby1tYXJnaW5zLWd0LXNtJ1wiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPlxyXG4gICAgICBpbmZvXHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3Bhbj5cclxuICAgICAge3ttZXNzYWdlS2V5IHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiY29udmVyc2lvbi1tZXNzYWdlLWFjdGlvbiB0ZXh0LW0tc2VtaS1ib2xkXCIgKGNsaWNrKT1cImNvbnZlcnNpb25EaWFsb2coZGlhbG9nUGFyYW1zKVwiPnt7YnV0dG9uVGV4dCB8XHJcbiAgICAgIHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -277,11 +277,11 @@ export class TldTranslateTextComponent {
277
277
  });
278
278
  }
279
279
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: TldTranslateTextComponent, deps: [{ token: i1.TldTranslateTextService }, { token: i2.Clipboard }, { token: i3.AlertService }, { token: i4.TldTranslateConfigService }, { token: i5.TldScrollService }, { token: i4.TldTranslateSystemManagementService }, { token: i6.AudioRecordService }, { token: i6.TldVoiceInputService }, { token: i7.TldTranslateFileService }, { token: i8.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
280
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.4", type: TldTranslateTextComponent, selector: "tld-translate-text", inputs: { filePreviewProgress: "filePreviewProgress" }, outputs: { onFileChange: "onFileChange" }, viewQueries: [{ propertyName: "sourceComponent", first: true, predicate: ["sourceComponent"], descendants: true }, { propertyName: "dictateComponent", first: true, predicate: ["dictate"], descendants: true }], ngImport: i0, template: "<!-- NOTE. tld-source-and-target-wrapper uses multiple content projections, so might seem confusing first, but elements are displayed at their places based on tld-source-and-target-wrapper component\r\nhttps://angular.io/guide/content-projection#multi-slot-content-projection\r\n-->\r\n<tld-source-and-target-wrapper [textToSpeechSourceSettings]=\"textToSpeechSourceSettings\"\r\n [clearSourceVisible]=\"source?.length>0\" (onSourceClear)=\"clearSource()\"\r\n [clearDisabled]=\"textareaDisabled\" [clearSourceTooltip]=\"'TLD_TRANSLATE.CLEAR_SOURCE_TOOLTIP'\"\r\n [ngClass]=\"{'highlight-active': highlight, 'gramcheck-active': gramCheck, 'empty-target': isEmptyTarget}\">\r\n <div sourceMain class=\"source-main\" fxLayout=\"column\">\r\n <tld-translate-source [textareaDisabled]=\"textareaDisabled\" #sourceComponent fxFlex\r\n [sourceParagraphs]=\"sourceParagraphs\"></tld-translate-source>\r\n </div>\r\n <ng-container sourceActions *ngIf=\"!hideSourceActions\">\r\n <div fxLayoutAlign=\"start center\" class=\"basic-padding\" fxLayoutGap=\"1em\">\r\n <ng-container *ngIf=\"audioInputVisible\">\r\n <tld-dictate #dictate [configuration]=\"dictateConfig\" [ngClass]=\"{'full-width' : !fileUpload}\"\r\n (isDictating)=\"dictateStartStop($event)\" (result)=\"dictateResult($event)\"\r\n (partialResult)=\"dictatePartialResult($event)\" (onError)=\"dictateError($event)\" [language]=\"sourceLanguage\">\r\n </tld-dictate>\r\n </ng-container>\r\n <div *ngIf=\"fileUpload\" class=\"file-upload-wrapper\">\r\n <tld-file-upload (fileChange)=\"fileChange($event)\" [accept]=\"allowedFileTypes\" [maxSize]=\"maxFileUploadSize\" [uploadIconName]=\"uploadIconName\"\r\n [extendedAcceptList]=\"extendedFileTypes\" [multiple]=\"multipleFiles\" (errorEvent)=\"fileUploadError($event)\"\r\n [filePreviewProgress]=\"filePreviewProgress\" [disabled]=\"fileUploadDisabled\">\r\n <span class=\"upload-file-text\">\r\n <div fxLayout=\"row\">\r\n <span class=\"info text-l-semi-bold\">\r\n <span [innerHTML]=\"'FILE_UPLOAD.UPLOAD' | translate\" class=\"accent-color\"></span>\r\n <span>&nbsp;</span>\r\n <span [innerHTML]=\"'FILE_UPLOAD.DRAG_AND_DROP' | translate\" fxHide.lt-sm></span>\r\n <span [innerHTML]=\"'FILE_UPLOAD.'+ (multipleFiles? 'FILES' : 'FILE') | translate\"\r\n [ngClass.lt-sm]=\"'accent-color'\"></span>\r\n </span>\r\n </div>\r\n <div fxLayout=\"row\">\r\n <span class=\"file-upload-extensions text-m\">\r\n (\r\n <span>{{visibleExtensions}}. </span>\r\n <span *ngIf=\"maxSizeMB\" [innerHTML]=\"'FILE_UPLOAD.LIMITS_MB' | translate: {maxSizeMB: maxSizeMB}\"></span>\r\n )\r\n </span>\r\n </div>\r\n </span>\r\n </tld-file-upload>\r\n <lib-open-extension-dialog *ngIf=\"showExtensionPopup\" [extensions]=\"allowedTypesWithoutDots\">\r\n </lib-open-extension-dialog>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div targetMain class=\"target-main\">\r\n <ng-container *ngIf=\"isEmptyTarget; else translatedTextBlock\">\r\n <p *ngIf=\"showTargetPlaceholder\" class=\"description-text target-empty\"\r\n [innerHtml]=\"'TLD_TRANSLATE.TARGET_DESCRIPTION' | translate\">\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container targetActions>\r\n <div class=\"tld-translate-target-footer basic-padding\" *ngIf=\"showSuggestions || showProgressIndicator\">\r\n <tld-translate-suggest *ngIf=\"showSuggestions\" [systemId]=\"systemId\" [target]=\"targetParagraphs\"\r\n [source]=\"sourceParagraphs\">\r\n </tld-translate-suggest>\r\n <progress-indicator (onClose)=\"closeProgressIndicator()\" *ngIf=\"showProgressIndicator\"></progress-indicator>\r\n </div>\r\n </ng-container>\r\n</tld-source-and-target-wrapper>\r\n\r\n\r\n<!-- templates used for else blocks in target container -->\r\n<ng-template #translatedTextBlock>\r\n <div [class.translated-source-overflow]=\"targetWrapperOverflow\" class=\"translated-source\" [class.selectable-sentence]=\"showSuggestions\">\r\n <ng-container *ngIf=\"!urlToTranslate\">\r\n <div class=\"target-wrapper-action-buttons\">\r\n <button *ngIf=\"firstParagraphTranslated\" mat-icon-button class=\"tld-copy-translation\" (click)=\"copy()\"\r\n matTooltip=\"{{'TOOLTIPS.COPY' | translate}}\" [attr.aria-describedby]=\"copyMessageId\"\r\n (keydown.Tab)=\"switchFocusFromCopy($event)\" [attr.Id]=\"copyButtonId\">\r\n <span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.COPY' | translate\">\r\n content_copy\r\n </span>\r\n </button>\r\n <button *ngIf=\"firstParagraphTranslated || translationError\" mat-icon-button class=\"tld-refresh-translation\" (click)=\"refresh()\"\r\n matTooltip=\"{{'TOOLTIPS.REFRESH' | translate}}\"\r\n >\r\n <span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.REFRESH' | translate\">\r\n refresh\r\n </span>\r\n </button>\r\n <tld-text-to-speech *ngIf=\"textToSpeechTargetSettings && firstParagraphTranslated\" [settings]=\"textToSpeechTargetSettings\">\r\n </tld-text-to-speech>\r\n </div>\r\n <div *ngFor=\"let paragraph of targetParagraphs\">\r\n <tld-highlight-tree [highlight]=\"highlight\" [tree]=\"paragraph\" [selectSentence]=\"showSuggestions\">\r\n </tld-highlight-tree>\r\n </div>\r\n\r\n <div *ngIf=\"firstParagraphTranslated\" class=\"dictionary-wrapper\">\r\n <tld-dictionary [dictionary]=\"dictionaryEntry\"></tld-dictionary>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"urlToTranslate\" class=\"target-url-container\">\r\n <a [attr.href]=\"translateUrlRedirect\" target=\"_blank\" fxLayoutAlign=\"start center\" class=\"go-to-webtranslate\">\r\n {{urlToTranslate}}\r\n <span class=\"material-icons\" color=\"accent\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.OPEN_IN_NEW'\">\r\n open_in_new\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".go-to-webtranslate{word-break:break-all;display:inline}.basic-padding,.target-empty,.target-translated-text{padding:1em}.source-container{border-right:1px solid #cbd2d9;padding:0;overflow:auto}.target-description{margin-top:0}.target-container{position:relative}.translated-source{overflow-y:auto;overflow-x:hidden;flex:1 1 0!important;padding:1em 3.5em 1em 2em!important}.translated-source.selectable-sentence{cursor:pointer}::ng-deep .target-highlight .tld-highlight-container{padding:1em}.target-wrapper-action-buttons{position:absolute;top:.2em;right:.2em}.target-wrapper-action-buttons .tld-copy-translation,.target-wrapper-action-buttons .tld-refresh-translation,.target-wrapper-action-buttons tld-text-to-speech{display:block}.target-empty,.target-translated-text{margin:0}tld-dictionary{overflow-y:auto;flex:1 1 0!important}.source-main,.target-main{height:100%}.upload-file-text{display:inline-block;text-align:left}.file-upload-wrapper{width:100%}.file-upload-wrapper .file-upload-extensions{font-weight:400}.dictionary-wrapper{margin-top:2rem}@media (max-width: 768px){.translated-source{padding:1em 3em 1em 1em!important}}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.SourceAndTargetWrapperComponent, selector: "tld-source-and-target-wrapper", inputs: ["clearSourceVisible", "clearSourceTooltip", "clearDisabled", "textToSpeechSourceSettings"], outputs: ["onSourceClear"] }, { kind: "component", type: i11.TldDictateComponent, selector: "tld-dictate", inputs: ["configuration", "language"], outputs: ["result", "partialResult", "isDictating", "onError"] }, { kind: "component", type: i3.OpenExtensionDialogComponent, selector: "lib-open-extension-dialog", inputs: ["extensions"] }, { kind: "component", type: i12.TextToSpeechComponent, selector: "tld-text-to-speech", inputs: ["settings"] }, { kind: "component", type: i3.FileUploadComponent, selector: "tld-file-upload", inputs: ["accept", "maxSize", "multiple", "filePreviewProgress", "allowEmpty", "disabled", "uploadIconName", "extendedAcceptList"], outputs: ["fileChange", "errorEvent"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i14.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i14.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i14.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i14.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i15.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i15.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i16.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i17.TldTranslateSourceComponent, selector: "tld-translate-source", inputs: ["textareaDisabled", "sourceParagraphs"] }, { kind: "component", type: i18.TldTranslateSuggestComponent, selector: "tld-translate-suggest", inputs: ["target", "source", "dictionary", "systemId", "options", "selectedSentence"] }, { kind: "component", type: i19.TldDictionaryComponent, selector: "tld-dictionary", inputs: ["dictionary"] }, { kind: "component", type: i20.HighlightTreeComponent, selector: "tld-highlight-tree", inputs: ["tree", "isSource", "correctionsEnabled", "highlight", "gramCheck", "selectSentence"], outputs: ["onReplace"] }, { kind: "component", type: i21.ProgressIndicatorComponent, selector: "progress-indicator", outputs: ["onClose"] }, { kind: "pipe", type: i22.TranslatePipe, name: "translate" }] });
280
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.4", type: TldTranslateTextComponent, selector: "tld-translate-text", inputs: { filePreviewProgress: "filePreviewProgress" }, outputs: { onFileChange: "onFileChange" }, viewQueries: [{ propertyName: "sourceComponent", first: true, predicate: ["sourceComponent"], descendants: true }, { propertyName: "dictateComponent", first: true, predicate: ["dictate"], descendants: true }], ngImport: i0, template: "<!-- NOTE. tld-source-and-target-wrapper uses multiple content projections, so might seem confusing first, but elements are displayed at their places based on tld-source-and-target-wrapper component\r\nhttps://angular.io/guide/content-projection#multi-slot-content-projection\r\n-->\r\n<tld-source-and-target-wrapper [textToSpeechSourceSettings]=\"textToSpeechSourceSettings\"\r\n [clearSourceVisible]=\"source?.length>0\" (onSourceClear)=\"clearSource()\"\r\n [clearDisabled]=\"textareaDisabled\" [clearSourceTooltip]=\"'TLD_TRANSLATE.CLEAR_SOURCE_TOOLTIP'\"\r\n [ngClass]=\"{'highlight-active': highlight, 'gramcheck-active': gramCheck, 'empty-target': isEmptyTarget}\">\r\n <div sourceMain class=\"source-main\" fxLayout=\"column\">\r\n <tld-translate-source [textareaDisabled]=\"textareaDisabled\" #sourceComponent fxFlex\r\n [sourceParagraphs]=\"sourceParagraphs\"></tld-translate-source>\r\n </div>\r\n <ng-container sourceActions *ngIf=\"!hideSourceActions\">\r\n <div fxLayoutAlign=\"start center\" class=\"basic-padding\" fxLayoutGap=\"1em\">\r\n <ng-container *ngIf=\"audioInputVisible\">\r\n <tld-dictate #dictate [configuration]=\"dictateConfig\" [ngClass]=\"{'full-width' : !fileUpload}\"\r\n (isDictating)=\"dictateStartStop($event)\" (result)=\"dictateResult($event)\"\r\n (partialResult)=\"dictatePartialResult($event)\" (onError)=\"dictateError($event)\" [language]=\"sourceLanguage\">\r\n </tld-dictate>\r\n </ng-container>\r\n <div *ngIf=\"fileUpload\" class=\"file-upload-wrapper\">\r\n <lib-file-upload (fileChange)=\"fileChange($event)\" [accept]=\"allowedFileTypes\" [maxSize]=\"maxFileUploadSize\" [uploadIconName]=\"uploadIconName\"\r\n [extendedAcceptList]=\"extendedFileTypes\" [multiple]=\"multipleFiles\" (errorEvent)=\"fileUploadError($event)\"\r\n [filePreviewProgress]=\"filePreviewProgress\" [disabled]=\"fileUploadDisabled\">\r\n <span class=\"upload-file-text\">\r\n <div fxLayout=\"row\">\r\n <span class=\"info text-l-semi-bold\">\r\n <span [innerHTML]=\"'FILE_UPLOAD.UPLOAD' | translate\" class=\"accent-color\"></span>\r\n <span>&nbsp;</span>\r\n <span [innerHTML]=\"'FILE_UPLOAD.DRAG_AND_DROP' | translate\" fxHide.lt-sm></span>\r\n <span [innerHTML]=\"'FILE_UPLOAD.'+ (multipleFiles? 'FILES' : 'FILE') | translate\"\r\n [ngClass.lt-sm]=\"'accent-color'\"></span>\r\n </span>\r\n </div>\r\n <div fxLayout=\"row\">\r\n <span class=\"file-upload-extensions text-m\">\r\n (\r\n <span>{{visibleExtensions}}. </span>\r\n <span *ngIf=\"maxSizeMB\" [innerHTML]=\"'FILE_UPLOAD.LIMITS_MB' | translate: {maxSizeMB: maxSizeMB}\"></span>\r\n )\r\n </span>\r\n </div>\r\n </span>\r\n </lib-file-upload>\r\n <lib-open-extension-dialog *ngIf=\"showExtensionPopup\" [extensions]=\"allowedTypesWithoutDots\">\r\n </lib-open-extension-dialog>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div targetMain class=\"target-main\">\r\n <ng-container *ngIf=\"isEmptyTarget; else translatedTextBlock\">\r\n <p *ngIf=\"showTargetPlaceholder\" class=\"description-text target-empty\"\r\n [innerHtml]=\"'TLD_TRANSLATE.TARGET_DESCRIPTION' | translate\">\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container targetActions>\r\n <div class=\"tld-translate-target-footer basic-padding\" *ngIf=\"showSuggestions || showProgressIndicator\">\r\n <tld-translate-suggest *ngIf=\"showSuggestions\" [systemId]=\"systemId\" [target]=\"targetParagraphs\"\r\n [source]=\"sourceParagraphs\">\r\n </tld-translate-suggest>\r\n <progress-indicator (onClose)=\"closeProgressIndicator()\" *ngIf=\"showProgressIndicator\"></progress-indicator>\r\n </div>\r\n </ng-container>\r\n</tld-source-and-target-wrapper>\r\n\r\n\r\n<!-- templates used for else blocks in target container -->\r\n<ng-template #translatedTextBlock>\r\n <div [class.translated-source-overflow]=\"targetWrapperOverflow\" class=\"translated-source\" [class.selectable-sentence]=\"showSuggestions\">\r\n <ng-container *ngIf=\"!urlToTranslate\">\r\n <div class=\"target-wrapper-action-buttons\">\r\n <button *ngIf=\"firstParagraphTranslated\" mat-icon-button class=\"tld-copy-translation\" (click)=\"copy()\"\r\n matTooltip=\"{{'TOOLTIPS.COPY' | translate}}\" [attr.aria-describedby]=\"copyMessageId\"\r\n (keydown.Tab)=\"switchFocusFromCopy($event)\" [attr.Id]=\"copyButtonId\">\r\n <span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.COPY' | translate\">\r\n content_copy\r\n </span>\r\n </button>\r\n <button *ngIf=\"firstParagraphTranslated || translationError\" mat-icon-button class=\"tld-refresh-translation\" (click)=\"refresh()\"\r\n matTooltip=\"{{'TOOLTIPS.REFRESH' | translate}}\"\r\n >\r\n <span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.REFRESH' | translate\">\r\n refresh\r\n </span>\r\n </button>\r\n <tld-text-to-speech *ngIf=\"textToSpeechTargetSettings && firstParagraphTranslated\" [settings]=\"textToSpeechTargetSettings\">\r\n </tld-text-to-speech>\r\n </div>\r\n <div *ngFor=\"let paragraph of targetParagraphs\">\r\n <tld-highlight-tree [highlight]=\"highlight\" [tree]=\"paragraph\" [selectSentence]=\"showSuggestions\">\r\n </tld-highlight-tree>\r\n </div>\r\n\r\n <div *ngIf=\"firstParagraphTranslated\" class=\"dictionary-wrapper\">\r\n <tld-dictionary [dictionary]=\"dictionaryEntry\"></tld-dictionary>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"urlToTranslate\" class=\"target-url-container\">\r\n <a [attr.href]=\"translateUrlRedirect\" target=\"_blank\" fxLayoutAlign=\"start center\" class=\"go-to-webtranslate\">\r\n {{urlToTranslate}}\r\n <span class=\"material-icons\" color=\"accent\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.OPEN_IN_NEW'\">\r\n open_in_new\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".go-to-webtranslate{word-break:break-all;display:inline}.basic-padding,.target-empty,.target-translated-text{padding:1em}.source-container{border-right:1px solid #cbd2d9;padding:0;overflow:auto}.target-description{margin-top:0}.target-container{position:relative}.translated-source{overflow-y:auto;overflow-x:hidden;flex:1 1 0!important;padding:1em 3.5em 1em 2em!important}.translated-source.selectable-sentence{cursor:pointer}::ng-deep .target-highlight .tld-highlight-container{padding:1em}.target-wrapper-action-buttons{position:absolute;top:.2em;right:.2em}.target-wrapper-action-buttons .tld-copy-translation,.target-wrapper-action-buttons .tld-refresh-translation,.target-wrapper-action-buttons tld-text-to-speech{display:block}.target-empty,.target-translated-text{margin:0}tld-dictionary{overflow-y:auto;flex:1 1 0!important}.source-main,.target-main{height:100%}.upload-file-text{display:inline-block;text-align:left}.file-upload-wrapper{width:100%}.file-upload-wrapper .file-upload-extensions{font-weight:400}.dictionary-wrapper{margin-top:2rem}@media (max-width: 768px){.translated-source{padding:1em 3em 1em 1em!important}}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.SourceAndTargetWrapperComponent, selector: "tld-source-and-target-wrapper", inputs: ["clearSourceVisible", "clearSourceTooltip", "clearDisabled", "textToSpeechSourceSettings"], outputs: ["onSourceClear"] }, { kind: "component", type: i11.TldDictateComponent, selector: "tld-dictate", inputs: ["configuration", "language"], outputs: ["result", "partialResult", "isDictating", "onError"] }, { kind: "component", type: i3.OpenExtensionDialogComponent, selector: "lib-open-extension-dialog", inputs: ["extensions"] }, { kind: "component", type: i12.TextToSpeechComponent, selector: "tld-text-to-speech", inputs: ["settings"] }, { kind: "component", type: i3.FileUploadComponent, selector: "lib-file-upload", inputs: ["accept", "useCompactUpload", "maxSize", "multiple", "filePreviewProgress", "allowEmpty", "disabled", "dragZoneLabel", "uploadIconName", "uploadButtonLabel", "openExtensionPopupLabel", "extendedAcceptList"], outputs: ["fileChange", "errorEvent"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i14.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i14.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i14.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i14.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i15.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i15.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i16.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i17.TldTranslateSourceComponent, selector: "tld-translate-source", inputs: ["textareaDisabled", "sourceParagraphs"] }, { kind: "component", type: i18.TldTranslateSuggestComponent, selector: "tld-translate-suggest", inputs: ["target", "source", "dictionary", "systemId", "options", "selectedSentence"] }, { kind: "component", type: i19.TldDictionaryComponent, selector: "tld-dictionary", inputs: ["dictionary"] }, { kind: "component", type: i20.HighlightTreeComponent, selector: "tld-highlight-tree", inputs: ["tree", "isSource", "correctionsEnabled", "highlight", "gramCheck", "selectSentence"], outputs: ["onReplace"] }, { kind: "component", type: i21.ProgressIndicatorComponent, selector: "progress-indicator", outputs: ["onClose"] }, { kind: "pipe", type: i22.TranslatePipe, name: "translate" }] });
281
281
  }
282
282
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: TldTranslateTextComponent, decorators: [{
283
283
  type: Component,
284
- args: [{ selector: 'tld-translate-text', template: "<!-- NOTE. tld-source-and-target-wrapper uses multiple content projections, so might seem confusing first, but elements are displayed at their places based on tld-source-and-target-wrapper component\r\nhttps://angular.io/guide/content-projection#multi-slot-content-projection\r\n-->\r\n<tld-source-and-target-wrapper [textToSpeechSourceSettings]=\"textToSpeechSourceSettings\"\r\n [clearSourceVisible]=\"source?.length>0\" (onSourceClear)=\"clearSource()\"\r\n [clearDisabled]=\"textareaDisabled\" [clearSourceTooltip]=\"'TLD_TRANSLATE.CLEAR_SOURCE_TOOLTIP'\"\r\n [ngClass]=\"{'highlight-active': highlight, 'gramcheck-active': gramCheck, 'empty-target': isEmptyTarget}\">\r\n <div sourceMain class=\"source-main\" fxLayout=\"column\">\r\n <tld-translate-source [textareaDisabled]=\"textareaDisabled\" #sourceComponent fxFlex\r\n [sourceParagraphs]=\"sourceParagraphs\"></tld-translate-source>\r\n </div>\r\n <ng-container sourceActions *ngIf=\"!hideSourceActions\">\r\n <div fxLayoutAlign=\"start center\" class=\"basic-padding\" fxLayoutGap=\"1em\">\r\n <ng-container *ngIf=\"audioInputVisible\">\r\n <tld-dictate #dictate [configuration]=\"dictateConfig\" [ngClass]=\"{'full-width' : !fileUpload}\"\r\n (isDictating)=\"dictateStartStop($event)\" (result)=\"dictateResult($event)\"\r\n (partialResult)=\"dictatePartialResult($event)\" (onError)=\"dictateError($event)\" [language]=\"sourceLanguage\">\r\n </tld-dictate>\r\n </ng-container>\r\n <div *ngIf=\"fileUpload\" class=\"file-upload-wrapper\">\r\n <tld-file-upload (fileChange)=\"fileChange($event)\" [accept]=\"allowedFileTypes\" [maxSize]=\"maxFileUploadSize\" [uploadIconName]=\"uploadIconName\"\r\n [extendedAcceptList]=\"extendedFileTypes\" [multiple]=\"multipleFiles\" (errorEvent)=\"fileUploadError($event)\"\r\n [filePreviewProgress]=\"filePreviewProgress\" [disabled]=\"fileUploadDisabled\">\r\n <span class=\"upload-file-text\">\r\n <div fxLayout=\"row\">\r\n <span class=\"info text-l-semi-bold\">\r\n <span [innerHTML]=\"'FILE_UPLOAD.UPLOAD' | translate\" class=\"accent-color\"></span>\r\n <span>&nbsp;</span>\r\n <span [innerHTML]=\"'FILE_UPLOAD.DRAG_AND_DROP' | translate\" fxHide.lt-sm></span>\r\n <span [innerHTML]=\"'FILE_UPLOAD.'+ (multipleFiles? 'FILES' : 'FILE') | translate\"\r\n [ngClass.lt-sm]=\"'accent-color'\"></span>\r\n </span>\r\n </div>\r\n <div fxLayout=\"row\">\r\n <span class=\"file-upload-extensions text-m\">\r\n (\r\n <span>{{visibleExtensions}}. </span>\r\n <span *ngIf=\"maxSizeMB\" [innerHTML]=\"'FILE_UPLOAD.LIMITS_MB' | translate: {maxSizeMB: maxSizeMB}\"></span>\r\n )\r\n </span>\r\n </div>\r\n </span>\r\n </tld-file-upload>\r\n <lib-open-extension-dialog *ngIf=\"showExtensionPopup\" [extensions]=\"allowedTypesWithoutDots\">\r\n </lib-open-extension-dialog>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div targetMain class=\"target-main\">\r\n <ng-container *ngIf=\"isEmptyTarget; else translatedTextBlock\">\r\n <p *ngIf=\"showTargetPlaceholder\" class=\"description-text target-empty\"\r\n [innerHtml]=\"'TLD_TRANSLATE.TARGET_DESCRIPTION' | translate\">\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container targetActions>\r\n <div class=\"tld-translate-target-footer basic-padding\" *ngIf=\"showSuggestions || showProgressIndicator\">\r\n <tld-translate-suggest *ngIf=\"showSuggestions\" [systemId]=\"systemId\" [target]=\"targetParagraphs\"\r\n [source]=\"sourceParagraphs\">\r\n </tld-translate-suggest>\r\n <progress-indicator (onClose)=\"closeProgressIndicator()\" *ngIf=\"showProgressIndicator\"></progress-indicator>\r\n </div>\r\n </ng-container>\r\n</tld-source-and-target-wrapper>\r\n\r\n\r\n<!-- templates used for else blocks in target container -->\r\n<ng-template #translatedTextBlock>\r\n <div [class.translated-source-overflow]=\"targetWrapperOverflow\" class=\"translated-source\" [class.selectable-sentence]=\"showSuggestions\">\r\n <ng-container *ngIf=\"!urlToTranslate\">\r\n <div class=\"target-wrapper-action-buttons\">\r\n <button *ngIf=\"firstParagraphTranslated\" mat-icon-button class=\"tld-copy-translation\" (click)=\"copy()\"\r\n matTooltip=\"{{'TOOLTIPS.COPY' | translate}}\" [attr.aria-describedby]=\"copyMessageId\"\r\n (keydown.Tab)=\"switchFocusFromCopy($event)\" [attr.Id]=\"copyButtonId\">\r\n <span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.COPY' | translate\">\r\n content_copy\r\n </span>\r\n </button>\r\n <button *ngIf=\"firstParagraphTranslated || translationError\" mat-icon-button class=\"tld-refresh-translation\" (click)=\"refresh()\"\r\n matTooltip=\"{{'TOOLTIPS.REFRESH' | translate}}\"\r\n >\r\n <span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.REFRESH' | translate\">\r\n refresh\r\n </span>\r\n </button>\r\n <tld-text-to-speech *ngIf=\"textToSpeechTargetSettings && firstParagraphTranslated\" [settings]=\"textToSpeechTargetSettings\">\r\n </tld-text-to-speech>\r\n </div>\r\n <div *ngFor=\"let paragraph of targetParagraphs\">\r\n <tld-highlight-tree [highlight]=\"highlight\" [tree]=\"paragraph\" [selectSentence]=\"showSuggestions\">\r\n </tld-highlight-tree>\r\n </div>\r\n\r\n <div *ngIf=\"firstParagraphTranslated\" class=\"dictionary-wrapper\">\r\n <tld-dictionary [dictionary]=\"dictionaryEntry\"></tld-dictionary>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"urlToTranslate\" class=\"target-url-container\">\r\n <a [attr.href]=\"translateUrlRedirect\" target=\"_blank\" fxLayoutAlign=\"start center\" class=\"go-to-webtranslate\">\r\n {{urlToTranslate}}\r\n <span class=\"material-icons\" color=\"accent\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.OPEN_IN_NEW'\">\r\n open_in_new\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".go-to-webtranslate{word-break:break-all;display:inline}.basic-padding,.target-empty,.target-translated-text{padding:1em}.source-container{border-right:1px solid #cbd2d9;padding:0;overflow:auto}.target-description{margin-top:0}.target-container{position:relative}.translated-source{overflow-y:auto;overflow-x:hidden;flex:1 1 0!important;padding:1em 3.5em 1em 2em!important}.translated-source.selectable-sentence{cursor:pointer}::ng-deep .target-highlight .tld-highlight-container{padding:1em}.target-wrapper-action-buttons{position:absolute;top:.2em;right:.2em}.target-wrapper-action-buttons .tld-copy-translation,.target-wrapper-action-buttons .tld-refresh-translation,.target-wrapper-action-buttons tld-text-to-speech{display:block}.target-empty,.target-translated-text{margin:0}tld-dictionary{overflow-y:auto;flex:1 1 0!important}.source-main,.target-main{height:100%}.upload-file-text{display:inline-block;text-align:left}.file-upload-wrapper{width:100%}.file-upload-wrapper .file-upload-extensions{font-weight:400}.dictionary-wrapper{margin-top:2rem}@media (max-width: 768px){.translated-source{padding:1em 3em 1em 1em!important}}\n"] }]
284
+ args: [{ selector: 'tld-translate-text', template: "<!-- NOTE. tld-source-and-target-wrapper uses multiple content projections, so might seem confusing first, but elements are displayed at their places based on tld-source-and-target-wrapper component\r\nhttps://angular.io/guide/content-projection#multi-slot-content-projection\r\n-->\r\n<tld-source-and-target-wrapper [textToSpeechSourceSettings]=\"textToSpeechSourceSettings\"\r\n [clearSourceVisible]=\"source?.length>0\" (onSourceClear)=\"clearSource()\"\r\n [clearDisabled]=\"textareaDisabled\" [clearSourceTooltip]=\"'TLD_TRANSLATE.CLEAR_SOURCE_TOOLTIP'\"\r\n [ngClass]=\"{'highlight-active': highlight, 'gramcheck-active': gramCheck, 'empty-target': isEmptyTarget}\">\r\n <div sourceMain class=\"source-main\" fxLayout=\"column\">\r\n <tld-translate-source [textareaDisabled]=\"textareaDisabled\" #sourceComponent fxFlex\r\n [sourceParagraphs]=\"sourceParagraphs\"></tld-translate-source>\r\n </div>\r\n <ng-container sourceActions *ngIf=\"!hideSourceActions\">\r\n <div fxLayoutAlign=\"start center\" class=\"basic-padding\" fxLayoutGap=\"1em\">\r\n <ng-container *ngIf=\"audioInputVisible\">\r\n <tld-dictate #dictate [configuration]=\"dictateConfig\" [ngClass]=\"{'full-width' : !fileUpload}\"\r\n (isDictating)=\"dictateStartStop($event)\" (result)=\"dictateResult($event)\"\r\n (partialResult)=\"dictatePartialResult($event)\" (onError)=\"dictateError($event)\" [language]=\"sourceLanguage\">\r\n </tld-dictate>\r\n </ng-container>\r\n <div *ngIf=\"fileUpload\" class=\"file-upload-wrapper\">\r\n <lib-file-upload (fileChange)=\"fileChange($event)\" [accept]=\"allowedFileTypes\" [maxSize]=\"maxFileUploadSize\" [uploadIconName]=\"uploadIconName\"\r\n [extendedAcceptList]=\"extendedFileTypes\" [multiple]=\"multipleFiles\" (errorEvent)=\"fileUploadError($event)\"\r\n [filePreviewProgress]=\"filePreviewProgress\" [disabled]=\"fileUploadDisabled\">\r\n <span class=\"upload-file-text\">\r\n <div fxLayout=\"row\">\r\n <span class=\"info text-l-semi-bold\">\r\n <span [innerHTML]=\"'FILE_UPLOAD.UPLOAD' | translate\" class=\"accent-color\"></span>\r\n <span>&nbsp;</span>\r\n <span [innerHTML]=\"'FILE_UPLOAD.DRAG_AND_DROP' | translate\" fxHide.lt-sm></span>\r\n <span [innerHTML]=\"'FILE_UPLOAD.'+ (multipleFiles? 'FILES' : 'FILE') | translate\"\r\n [ngClass.lt-sm]=\"'accent-color'\"></span>\r\n </span>\r\n </div>\r\n <div fxLayout=\"row\">\r\n <span class=\"file-upload-extensions text-m\">\r\n (\r\n <span>{{visibleExtensions}}. </span>\r\n <span *ngIf=\"maxSizeMB\" [innerHTML]=\"'FILE_UPLOAD.LIMITS_MB' | translate: {maxSizeMB: maxSizeMB}\"></span>\r\n )\r\n </span>\r\n </div>\r\n </span>\r\n </lib-file-upload>\r\n <lib-open-extension-dialog *ngIf=\"showExtensionPopup\" [extensions]=\"allowedTypesWithoutDots\">\r\n </lib-open-extension-dialog>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div targetMain class=\"target-main\">\r\n <ng-container *ngIf=\"isEmptyTarget; else translatedTextBlock\">\r\n <p *ngIf=\"showTargetPlaceholder\" class=\"description-text target-empty\"\r\n [innerHtml]=\"'TLD_TRANSLATE.TARGET_DESCRIPTION' | translate\">\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container targetActions>\r\n <div class=\"tld-translate-target-footer basic-padding\" *ngIf=\"showSuggestions || showProgressIndicator\">\r\n <tld-translate-suggest *ngIf=\"showSuggestions\" [systemId]=\"systemId\" [target]=\"targetParagraphs\"\r\n [source]=\"sourceParagraphs\">\r\n </tld-translate-suggest>\r\n <progress-indicator (onClose)=\"closeProgressIndicator()\" *ngIf=\"showProgressIndicator\"></progress-indicator>\r\n </div>\r\n </ng-container>\r\n</tld-source-and-target-wrapper>\r\n\r\n\r\n<!-- templates used for else blocks in target container -->\r\n<ng-template #translatedTextBlock>\r\n <div [class.translated-source-overflow]=\"targetWrapperOverflow\" class=\"translated-source\" [class.selectable-sentence]=\"showSuggestions\">\r\n <ng-container *ngIf=\"!urlToTranslate\">\r\n <div class=\"target-wrapper-action-buttons\">\r\n <button *ngIf=\"firstParagraphTranslated\" mat-icon-button class=\"tld-copy-translation\" (click)=\"copy()\"\r\n matTooltip=\"{{'TOOLTIPS.COPY' | translate}}\" [attr.aria-describedby]=\"copyMessageId\"\r\n (keydown.Tab)=\"switchFocusFromCopy($event)\" [attr.Id]=\"copyButtonId\">\r\n <span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.COPY' | translate\">\r\n content_copy\r\n </span>\r\n </button>\r\n <button *ngIf=\"firstParagraphTranslated || translationError\" mat-icon-button class=\"tld-refresh-translation\" (click)=\"refresh()\"\r\n matTooltip=\"{{'TOOLTIPS.REFRESH' | translate}}\"\r\n >\r\n <span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.REFRESH' | translate\">\r\n refresh\r\n </span>\r\n </button>\r\n <tld-text-to-speech *ngIf=\"textToSpeechTargetSettings && firstParagraphTranslated\" [settings]=\"textToSpeechTargetSettings\">\r\n </tld-text-to-speech>\r\n </div>\r\n <div *ngFor=\"let paragraph of targetParagraphs\">\r\n <tld-highlight-tree [highlight]=\"highlight\" [tree]=\"paragraph\" [selectSentence]=\"showSuggestions\">\r\n </tld-highlight-tree>\r\n </div>\r\n\r\n <div *ngIf=\"firstParagraphTranslated\" class=\"dictionary-wrapper\">\r\n <tld-dictionary [dictionary]=\"dictionaryEntry\"></tld-dictionary>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"urlToTranslate\" class=\"target-url-container\">\r\n <a [attr.href]=\"translateUrlRedirect\" target=\"_blank\" fxLayoutAlign=\"start center\" class=\"go-to-webtranslate\">\r\n {{urlToTranslate}}\r\n <span class=\"material-icons\" color=\"accent\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.OPEN_IN_NEW'\">\r\n open_in_new\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".go-to-webtranslate{word-break:break-all;display:inline}.basic-padding,.target-empty,.target-translated-text{padding:1em}.source-container{border-right:1px solid #cbd2d9;padding:0;overflow:auto}.target-description{margin-top:0}.target-container{position:relative}.translated-source{overflow-y:auto;overflow-x:hidden;flex:1 1 0!important;padding:1em 3.5em 1em 2em!important}.translated-source.selectable-sentence{cursor:pointer}::ng-deep .target-highlight .tld-highlight-container{padding:1em}.target-wrapper-action-buttons{position:absolute;top:.2em;right:.2em}.target-wrapper-action-buttons .tld-copy-translation,.target-wrapper-action-buttons .tld-refresh-translation,.target-wrapper-action-buttons tld-text-to-speech{display:block}.target-empty,.target-translated-text{margin:0}tld-dictionary{overflow-y:auto;flex:1 1 0!important}.source-main,.target-main{height:100%}.upload-file-text{display:inline-block;text-align:left}.file-upload-wrapper{width:100%}.file-upload-wrapper .file-upload-extensions{font-weight:400}.dictionary-wrapper{margin-top:2rem}@media (max-width: 768px){.translated-source{padding:1em 3em 1em 1em!important}}\n"] }]
285
285
  }], ctorParameters: () => [{ type: i1.TldTranslateTextService }, { type: i2.Clipboard }, { type: i3.AlertService }, { type: i4.TldTranslateConfigService }, { type: i5.TldScrollService }, { type: i4.TldTranslateSystemManagementService }, { type: i6.AudioRecordService }, { type: i6.TldVoiceInputService }, { type: i7.TldTranslateFileService }, { type: i8.BreakpointObserver }], propDecorators: { sourceComponent: [{
286
286
  type: ViewChild,
287
287
  args: ["sourceComponent"]
@@ -293,4 +293,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
293
293
  }], onFileChange: [{
294
294
  type: Output
295
295
  }] } });
296
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RsZC10cmFuc2xhdGUvc3JjL2xpYi9tb2R1bGVzL3RsZC10ZXh0L2NvbXBvbmVudHMvdGxkLXRyYW5zbGF0ZS10ZXh0L3RsZC10cmFuc2xhdGUtdGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9jb21wb25lbnRzL3RsZC10cmFuc2xhdGUtdGV4dC90bGQtdHJhbnNsYXRlLXRleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFzQixXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBNkIsTUFBTSwyQkFBMkIsQ0FBQztBQVF0RixPQUFPLEVBQTRCLGdCQUFnQixFQUFtQixNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTcEcsTUFBTSxPQUFPLHlCQUF5QjtJQXlGakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFqR1csZUFBZSxDQUE4QjtJQUNyRCxnQkFBZ0IsQ0FBc0I7SUFFbkQsbUJBQW1CLENBQVM7SUFDM0IsWUFBWSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO0lBRTFFLFVBQVUsQ0FBYTtJQUN2QixJQUFJLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDckQsNkJBQTZCO0lBQzdCLElBQUksZ0JBQWdCLEtBQWUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQ3JGLElBQUksaUJBQWlCLEtBQWUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQ3ZGLElBQUksS0FBSyxLQUFhLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDN0QsSUFBSSxTQUFTLEtBQWMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUN0RSxJQUFJLFNBQVMsS0FBYyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDL0UsSUFBSSxVQUFVLEtBQWMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDeEssSUFBSSxNQUFNLEtBQUssT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUN2RCxJQUFJLGlCQUFpQixLQUFhLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDM0UsSUFBSSxhQUFhLEtBQWMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUN6RixJQUFJLG9CQUFvQixLQUFhLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUMzRixJQUFJLHVCQUF1QixLQUFjLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUNsRyxJQUFJLDBCQUEwQixLQUFjLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUN4RyxJQUFJLDBCQUEwQixLQUFhLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUN2RyxJQUFJLDBCQUEwQixLQUFhLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUN2RyxJQUFJLGVBQWUsS0FBYyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFBLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDekksSUFBSSxnQkFBZ0IsS0FBYyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQSxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQ3JLLElBQUksa0JBQWtCLEtBQWMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQSxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQzNFLElBQUksV0FBVyxLQUFLLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQ3BFLElBQUksZ0JBQWdCLEtBQUssT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFDNUUsSUFBSSxjQUFjLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLElBQUksdUJBQXVCLEtBQUssT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFDMUUsSUFBSSxhQUFhLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFBLENBQUMsQ0FBQztJQUMzRyxJQUFJLHFCQUFxQixLQUFLLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUEsQ0FBQyxDQUFDO0lBQ25GLElBQUksa0JBQWtCLEtBQUssT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUM7SUFDMUksSUFBSSxxQkFBcUIsS0FBSyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFBLENBQUMsQ0FBQztJQUFBLENBQUM7SUFDcEYsSUFBSSwwQkFBMEIsS0FBSyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQSxDQUFDLENBQUM7SUFBQSxDQUFDO0lBQ2pHLElBQUksMEJBQTBCLEtBQUssT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsMEJBQTBCLENBQUEsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUNqRyxJQUFJLGNBQWMsS0FBSyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQSxDQUFDLENBQUM7SUFBQSxDQUFDO0lBRXRFLGlCQUFpQixDQUFVO0lBQzNCLG9CQUFvQixHQUFZLElBQUksQ0FBQztJQUNyQyxJQUFJLGNBQWMsS0FBSyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUUxRSx1QkFBdUIsR0FBYSxFQUFFLENBQUM7SUFFOUIsYUFBYSxHQUFHLGtCQUFrQixDQUFDO0lBQ25DLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO0lBQ3BELFlBQVksR0FBRyx1QkFBdUIsQ0FBQztJQUVoRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJLHdCQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQztJQUNqRSxDQUFDO0lBRUQsSUFBSSxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUN2RSxJQUFJLGVBQWUsS0FBSyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQzNFLElBQUksTUFBTSxLQUFLLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDN0QsSUFBSSxvQkFBb0IsS0FBSyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDckYsSUFBSSxxQkFBcUIsS0FBSyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7SUFDN0YsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGtDQUFrQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDO0lBQzFJLENBQUM7SUFDRCxJQUFJLFVBQVUsS0FBSyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQUNsRSxJQUFJLGdCQUFnQixLQUFLLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUM3RSxJQUFJLGdCQUFnQixLQUFLLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUU3RSxJQUFJLHFCQUFxQjtRQUN2QixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdELE1BQU0scUJBQXFCLEdBQUcsYUFBYSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBQ3RGLE9BQU8scUJBQXFCLENBQUM7SUFDL0IsQ0FBQztJQUVELGFBQWEsQ0FBd0I7SUFDckMsaUJBQWlCLENBQVM7SUFDMUIsU0FBUyxDQUFTO0lBRVYsUUFBUSxDQUFVO0lBRVQsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDekIsaUJBQWlCLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFMUQsWUFDbUIsb0JBQTZDLEVBQzdDLFNBQW9CLEVBQ3BCLE1BQW9CLEVBQ3BCLE1BQWlDLEVBQ2pDLGdCQUFrQyxFQUNsQyxTQUE4QyxFQUM5QyxZQUFnQyxFQUNoQyxpQkFBdUMsRUFDdkMsV0FBb0MsRUFDcEMsa0JBQXNDO1FBVHRDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFDN0MsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQTJCO1FBQ2pDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsY0FBUyxHQUFULFNBQVMsQ0FBcUM7UUFDOUMsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQ2hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFDdkMsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBQ3BDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7SUFDekQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSztZQUNwQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUztZQUM1QyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsaUJBQWlCO1lBQ3BELE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhO1NBQzlDLENBQUE7UUFFRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTlGLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTVFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNwRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ1YsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkosSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDakUsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBR0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFMUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQzVFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsQ0FBQTtZQUVGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDN0UsU0FBUyxDQUFDLENBQUMsS0FBZ0MsRUFBRSxFQUFFO2dCQUM5QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSwyQkFBMkIsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUNsSSxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUMxRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsY0FBYyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQTtnQkFDMUUsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQztRQUVELElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDMUosQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsb0JBQW9CLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBSztRQUN2QixNQUFNLHNCQUFzQixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsb0JBQW9CLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ILElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsc0JBQXNCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYTtRQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsS0FBd0IsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCx1QkFBdUI7UUFDckIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGdCQUFnQixDQUFDLFdBQW9CO1FBQ25DLE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3hLLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ3BELHlCQUF5QjtRQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsSUFBSSxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUNwQztnQkFDRSxNQUFNO2dCQUNOLDJCQUEyQixFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsMkJBQTJCO2FBQ3JHLENBQUMsQ0FBQztZQUNMLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO2FBQ0ksQ0FBQztZQUNKLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFjO1FBQzFCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSwyQkFBMkIsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQTtJQUMzRyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsYUFBcUI7UUFDeEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBcUI7UUFDaEMsSUFBSSxLQUFLLEtBQUssY0FBYyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDL0MsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUV6RixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0MsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hCLFVBQVUsSUFBSSxHQUFHLE9BQU8sVUFBVSxDQUFDO1lBQ3JDLENBQUM7WUFFRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0MsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hCLFVBQVUsSUFBSSxHQUFHLE9BQU8sVUFBVSxDQUFBO1lBQ3BDLENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7YUFDSSxJQUFJLEtBQUssS0FBSyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDL0MsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELGdHQUFnRztJQUN4Riw2QkFBNkI7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7YUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQzt1R0E5UFUseUJBQXlCOzJGQUF6Qix5QkFBeUIsK1dDdEJ0Qyxrdk1BNkdBOzsyRkR2RmEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLG9CQUFvQjttWkFLQSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDTixnQkFBZ0I7c0JBQXJDLFNBQVM7dUJBQUMsU0FBUztnQkFFWCxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQXVkaW9FcnJvckNhc2UsIElUcmFuc2NyaXB0aW9uVXBkYXRlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi90bGQtYXVkaW8vbW9kZWxzJztcclxuaW1wb3J0IHsgSURpY3RhdGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vdGxkLWF1ZGlvL21vZGVscy9kaWN0YXRlLWNvbmZpZ3VyYXRpb25pLm1vZGVsJztcclxuaW1wb3J0IHsgQXVkaW9SZWNvcmRTZXJ2aWNlLCBUbGRWb2ljZUlucHV0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RsZC1hdWRpby9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLCBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdGxkLWNvbW1vbi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRsZFNjcm9sbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzL3Njcm9sbC90bGQtc2Nyb2xsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVGaWxlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RsZC1kb2N1bWVudC9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGxkLXRyYW5zbGF0ZS10ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVTb3VyY2VDb21wb25lbnQgfSBmcm9tICcuLi90bGQtdHJhbnNsYXRlLXNvdXJjZS90bGQtdHJhbnNsYXRlLXNvdXJjZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3RpdmVEYXRhLCBBbGVydFNlcnZpY2UsIENvbnZlcnNpb25IZWxwZXIsIEZpbGVVcGxvYWRFcnJvciB9IGZyb20gJ0B0aWxkZS1ubHAvbmd4LWNvbW1vbic7XHJcbmltcG9ydCB7IFRsZERpY3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90bGQtYXVkaW8nO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGxkLXRyYW5zbGF0ZS10ZXh0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGxkLXRyYW5zbGF0ZS10ZXh0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90bGQtdHJhbnNsYXRlLXRleHQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGxkVHJhbnNsYXRlVGV4dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKFwic291cmNlQ29tcG9uZW50XCIpIHNvdXJjZUNvbXBvbmVudDogVGxkVHJhbnNsYXRlU291cmNlQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWN0YXRlXCIpIGRpY3RhdGVDb21wb25lbnQ6IFRsZERpY3RhdGVDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIGZpbGVQcmV2aWV3UHJvZ3Jlc3M6IG51bWJlcjtcclxuICBAT3V0cHV0KCkgb25GaWxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsZVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZVtdPigpO1xyXG5cclxuICBhY3RpdmVEYXRhOiBBY3RpdmVEYXRhO1xyXG4gIGdldCBzeXN0ZW1JZCgpIHsgcmV0dXJuIHRoaXMuYWN0aXZlRGF0YT8uc3lzdGVtSWQ7IH07XHJcbiAgLy9wYXJhbXMgZnJvbSBjb25maWcgc2VydmljZS5cclxuICBnZXQgYWxsb3dlZEZpbGVUeXBlcygpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLmFsbG93ZWRGaWxlVHlwZXM7IH07XHJcbiAgZ2V0IGV4dGVuZGVkRmlsZVR5cGVzKCk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMuY29uZmlnLmZpbGVDb25maWcuZXh0ZW5kZWRGaWxlVHlwZXM7IH07XHJcbiAgZ2V0IGFwcElkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZy5jb3JlQ29uZmlnLmFwcElkOyB9O1xyXG4gIGdldCBoaWdobGlnaHQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLmhpZ2hsaWdodDsgfTtcclxuICBnZXQgZ3JhbUNoZWNrKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy5jaGVja1NvdXJjZUdyYW1tYXI7IH07XHJcbiAgZ2V0IGZpbGVVcGxvYWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLmZpbGVVcGxvYWQgJiYgISh0aGlzLmlzRGljdGF0aW5nIHx8IHRoaXMuYXVkaW9TZXJ2aWNlPy5pc1JlY29yZGluZyB8fCB0aGlzLnZvaWNlSW5wdXRTZXJ2aWNlLmlzUHJvY2Vzc2luZyk7IH07XHJcbiAgZ2V0IGlzQXV0aCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmNvcmVDb25maWcuaXNBdXRoOyB9O1xyXG4gIGdldCBtYXhGaWxlVXBsb2FkU2l6ZSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb25maWcuZmlsZUNvbmZpZy5tYXhTaXplOyB9O1xyXG4gIGdldCBtdWx0aXBsZUZpbGVzKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWcuZmlsZUNvbmZpZy5udW1iZXJPZkZpbGVzQWxsb3dlZCA+IDE7IH07XHJcbiAgZ2V0IHVwZGF0ZVRyYW5zbGF0aW9uVXJsKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLnVwZGF0ZVRyYW5zbGF0aW9uVXJsOyB9O1xyXG4gIGdldCBhbGxvd1dlYnNpdGVUcmFuc2xhdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcuYWxsb3dXZWJzaXRlVHJhbnNsYXRpb247IH07XHJcbiAgZ2V0IGF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy5hdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZTsgfTtcclxuICBnZXQgd2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXg7IH07XHJcbiAgZ2V0IHdlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLndlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4OyB9O1xyXG4gIGdldCBzaG93U3VnZ2VzdGlvbnMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmhhc1RyYW5zbGF0ZWRQYXJhZ3JhcGhzICYmIHRoaXMuY29uZmlnLnRleHRDb25maWcuc2hvd1N1Z2dlc3Rpb25zICYmICF0aGlzLnVybFRvVHJhbnNsYXRlIH07XHJcbiAgZ2V0IHRleHRhcmVhRGlzYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmF1ZGlvU2VydmljZS5pc1JlY29yZGluZyB8fCB0aGlzLnZvaWNlSW5wdXRTZXJ2aWNlLmlzUHJvY2Vzc2luZyB8fCB0aGlzLmlzRGljdGF0aW5nIHx8IHRoaXMudGxkU3lzdGVtLm5vU3lzdGVtc0Vycm9yIH07XHJcbiAgZ2V0IGZpbGVVcGxvYWREaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGxkU3lzdGVtLm5vU3lzdGVtc0Vycm9yIH07XHJcbiAgZ2V0IGlzRGljdGF0aW5nKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5pc0RpY3RhdGluZzsgfTtcclxuICBnZXQgbWF4RGljdGF0ZUxlbmd0aCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLm1heGltdW1SZWNvcmRUaW1lOyB9XHJcbiAgZ2V0IHNvdXJjZUxhbmd1YWdlKCkgeyByZXR1cm4gdGhpcy5hY3RpdmVEYXRhPy5zb3VyY2VMYW5nLmxhbmc7IH1cclxuICBnZXQgaGFzVHJhbnNsYXRlZFBhcmFncmFwaHMoKSB7IHJldHVybiB0aGlzLnRhcmdldFBhcmFncmFwaHM/Lmxlbmd0aCA+IDAgfVxyXG4gIGdldCBpc0VtcHR5VGFyZ2V0KCkgeyByZXR1cm4gIXRoaXMuaGFzVHJhbnNsYXRlZFBhcmFncmFwaHMgJiYgIXRoaXMudXJsVG9UcmFuc2xhdGUgJiYgIXRoaXMuaGFzRGljdGlvbmFyeSB9XHJcbiAgZ2V0IHNob3dUYXJnZXRQbGFjZWhvbGRlcigpIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcuc2hvd1RhcmdldFBsYWNlaG9sZGVyIH1cclxuICBnZXQgc2hvd0V4dGVuc2lvblBvcHVwKCkgeyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy5zaG93RXh0ZW5zaW9uUG9wdXAgJiYgdGhpcy52aXNpYmxlRXh0ZW5zaW9uQ291bnQgPCB0aGlzLmFsbG93ZWRGaWxlVHlwZXMubGVuZ3RoIH1cclxuICBnZXQgdmlzaWJsZUV4dGVuc2lvbkNvdW50KCkgeyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy52aXNpYmxlRXh0ZW5zaW9uQ291bnQgfTtcclxuICBnZXQgdGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3MoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzIH07XHJcbiAgZ2V0IHRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5ncyB9O1xyXG4gIGdldCB1cGxvYWRJY29uTmFtZSgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmNvcmVDb25maWcudXBsb2FkSWNvbk5hbWUgfTtcclxuXHJcbiAgYXVkaW9JbnB1dFZpc2libGU6IGJvb2xlYW47XHJcbiAgdGFyZ2V0U2VudGVuY2VTZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGdldCB1cmxUb1RyYW5zbGF0ZSgpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UudXJsVG9UcmFuc2xhdGU7IH07XHJcblxyXG4gIGFsbG93ZWRUeXBlc1dpdGhvdXREb3RzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICByZWFkb25seSBjb3B5TWVzc2FnZUlkID0gXCJ0bGQtY29weS1zdWNjZXNzXCI7XHJcbiAgcmVhZG9ubHkgY29weU1lc3NhZ2VDbG9zZUJ1dHRvbklkID0gXCJ0bGQtY29weS1zdWNjZXNzLWNsb3NlXCI7XHJcbiAgcmVhZG9ubHkgY29weUJ1dHRvbklkID0gXCJ0bGQtY29weS10by1jbGlwYm9hcmRcIjtcclxuXHJcbiAgZ2V0IHRyYW5zbGF0ZWRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50cmFuc2xhdGVkVGV4dDtcclxuICB9XHJcblxyXG4gIGdldCBmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhbnNsYXRpb25FcnJvcigpIHtcclxuICAgIHJldHVybiB0aGlzLnNvdXJjZSAmJiAhdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5pc1RyYW5zbGF0aW5nO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0RpY3Rpb25hcnkoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmhhc0RpY3Rpb25hcnk7IH1cclxuICBnZXQgZGljdGlvbmFyeUVudHJ5KCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5kaWN0aW9uYXJ5RW50cnk7IH1cclxuICBnZXQgc291cmNlKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5zb3VyY2VUZXh0OyB9XHJcbiAgZ2V0IHRyYW5zbGF0ZVVybFJlZGlyZWN0KCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50cmFuc2xhdGVVcmxSZWRpcmVjdDsgfVxyXG4gIGdldCBzaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNob3VsZFNob3dQcm9ncmVzc0luZGljYXRvcjsgfVxyXG4gIGdldCBoaWRlU291cmNlQWN0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLnNvdXJjZSAmJiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLmhpZGVTb3VyY2VBY3Rpb25zV2hlbkhhc1RleHRNb2JpbGUgJiYgdGhpcy5pc01vYmlsZSAmJiAhdGhpcy5kaWN0YXRlQ29tcG9uZW50Py5pc1JlY29yZGluZztcclxuICB9XHJcbiAgZ2V0IHBhcmFncmFwaHMoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnBhcmFncmFwaHM7IH07XHJcbiAgZ2V0IHNvdXJjZVBhcmFncmFwaHMoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZVBhcmFncmFwaHM7IH1cclxuICBnZXQgdGFyZ2V0UGFyYWdyYXBocygpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UudGFyZ2V0UGFyYWdyYXBoczsgfVxyXG5cclxuICBnZXQgdGFyZ2V0V3JhcHBlck92ZXJmbG93KCkge1xyXG4gICAgY29uc3QgdGFyZ2V0V3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YXJnZXQtbWFpbicpO1xyXG4gICAgY29uc3QgdGFyZ2V0V3JhcHBlck92ZXJmbG93ID0gdGFyZ2V0V3JhcHBlci5zY3JvbGxIZWlnaHQgPiB0YXJnZXRXcmFwcGVyLmNsaWVudEhlaWdodDsgXHJcbiAgICByZXR1cm4gdGFyZ2V0V3JhcHBlck92ZXJmbG93O1xyXG4gIH1cclxuXHJcbiAgZGljdGF0ZUNvbmZpZzogSURpY3RhdGVDb25maWd1cmF0aW9uO1xyXG4gIHZpc2libGVFeHRlbnNpb25zOiBzdHJpbmc7XHJcbiAgbWF4U2l6ZU1COiBudW1iZXI7XHJcblxyXG4gIHByaXZhdGUgaXNNb2JpbGU6IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbW9iaWxlQnJlYWtwb2ludHMgPSBbQnJlYWtwb2ludHMuWFNtYWxsXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVRleHRTZXJ2aWNlOiBUbGRUcmFuc2xhdGVUZXh0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2xpcGJvYXJkOiBDbGlwYm9hcmQsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0czogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRsZFNjcm9sbFNlcnZpY2U6IFRsZFNjcm9sbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRsZFN5c3RlbTogVGxkVHJhbnNsYXRlU3lzdGVtTWFuYWdlbWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1ZGlvU2VydmljZTogQXVkaW9SZWNvcmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB2b2ljZUlucHV0U2VydmljZTogVGxkVm9pY2VJbnB1dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVTZXJ2aWNlOiBUbGRUcmFuc2xhdGVGaWxlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5saXN0ZW5PbkNoYW5nZXMoKTtcclxuICAgIHRoaXMuZGljdGF0ZUNvbmZpZyA9IHtcclxuICAgICAgYXBwSWQ6IHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLmFwcElkLFxyXG4gICAgICBhcHBTZWNyZXQ6IHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLmFwcFNlY3JldCxcclxuICAgICAgbWF4TGVuZ3RoOiB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5tYXhpbXVtUmVjb3JkVGltZSxcclxuICAgICAgYXBpVXJsOiB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5kaWN0YXRlQXBpVXJsXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aXNpYmxlRXh0ZW5zaW9ucyA9IHRoaXMuYWxsb3dlZEZpbGVUeXBlcy5zbGljZSgwLCB0aGlzLnZpc2libGVFeHRlbnNpb25Db3VudCkuam9pbihcIiwgXCIpO1xyXG4gICAgdGhpcy5hbGxvd2VkRmlsZVR5cGVzLmZvckVhY2goKGVsKSA9PiB0aGlzLmFsbG93ZWRUeXBlc1dpdGhvdXREb3RzLnB1c2goZWwucmVwbGFjZSgnLicsICcnKSkpO1xyXG5cclxuICAgIHRoaXMubWF4U2l6ZU1CID0gQ29udmVyc2lvbkhlbHBlci5ieXRlc1RvTWIodGhpcy5jb25maWcuZmlsZUNvbmZpZy5tYXhTaXplKTtcclxuXHJcbiAgICB0aGlzLnRsZFN5c3RlbS5nZXRBY3RpdmVEYXRhKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgoeCwgeSkgPT4geCAmJiB5ICYmIHguc3lzdGVtSWQgPT0geS5zeXN0ZW1JZCkpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoc3lzdCkgPT4ge1xyXG4gICAgICAgIGlmICghc3lzdCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFjdGl2ZURhdGEgPSBzeXN0O1xyXG4gICAgICAgIHRoaXMuYXVkaW9JbnB1dFZpc2libGUgPSB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5hdWRpb1RleHRJbnB1dCAmJiB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5zb3VyY2VMYW5ndWFnZXM/LmluY2x1ZGVzKHRoaXMuYWN0aXZlRGF0YT8uc291cmNlTGFuZy5sYW5nKTtcclxuICAgICAgICBpZiAodGhpcy5hY3RpdmVEYXRhLnJldHJhbnNsYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnJldHJhbnNsYXRlKHsgc3lzdGVtQ2hhbmdlZDogdHJ1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICB0aGlzLnRsZFNjcm9sbFNlcnZpY2Uuc3Vic2NyaWJlVG9TY3JvbGwoKTtcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcuYXVkaW9Db25maWcuYXVkaW9UZXh0SW5wdXQpIHtcclxuICAgICAgdGhpcy5hdWRpb1NlcnZpY2Uub25SZWNvcmRTdGFydC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNoYW5nZVNvdXJjZSh7IHBocmFzZTogXCJcIiB9KTtcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMudm9pY2VJbnB1dFNlcnZpY2Uub25UcmFuc2NyaWJ0aW9uVGV4dFVwZGF0ZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IElUcmFuc2NyaXB0aW9uVXBkYXRlTW9kZWwpID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2hhbmdlU291cmNlKHsgcGhyYXNlOiBldmVudC50ZXh0LCBzd2FwU3lzdGVtczogZmFsc2UsIGRpc2FibGVBdXRvbWF0aWNUcmFuc2xhdGlvbjogIWV2ZW50LmNvbXBsZXRlZCB9KTtcclxuICAgICAgICAgIGlmIChldmVudC5jb21wbGV0ZWQgJiYgKCFldmVudC50ZXh0IHx8IGV2ZW50LnRleHQgPT09IFwiXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRzLndhcm5pbmcoYEVSUk9SUy5BVURJTy4ke0F1ZGlvRXJyb3JDYXNlLk5PX1RFWFRfUkVDT0dOSVpFRH1gKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0JyZWFrcG9pbnRPYnNlcnZlcigpO1xyXG4gIH1cclxuXHJcbiAgY29weSgpIHtcclxuICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkodGhpcy50cmFuc2xhdGVkVGV4dCk7XHJcbiAgICB0aGlzLmFsZXJ0cy5zdWNjZXNzKFwiVExEX1RSQU5TTEFURS5URVhUX0NPUElFRFwiLCB7IGlkOiB0aGlzLmNvcHlNZXNzYWdlSWQsIGNsb3NlQnV0dG9uSWQ6IHRoaXMuY29weU1lc3NhZ2VDbG9zZUJ1dHRvbklkLCBwYXJlbnRJZDogdGhpcy5jb3B5QnV0dG9uSWQgfSk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5vblRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hGb2N1c0Zyb21Db3B5KGV2ZW50KSB7XHJcbiAgICBjb25zdCBjb3B5TWVzc2FnZUNsb3NlQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5jb3B5TWVzc2FnZUNsb3NlQnV0dG9uSWQpPy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJ1dHRvblwiKT8uaXRlbSgwKTtcclxuICAgIGlmIChjb3B5TWVzc2FnZUNsb3NlQnV0dG9uKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGNvcHlNZXNzYWdlQ2xvc2VCdXR0b24uZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbGVDaGFuZ2UoZmlsZXM6IEZpbGVbXSkge1xyXG4gICAgdGhpcy5vbkZpbGVDaGFuZ2UuZW1pdChmaWxlcyk7XHJcbiAgfVxyXG5cclxuICBmaWxlVXBsb2FkRXJyb3IoZXJyb3I6IGFueSkge1xyXG4gICAgdGhpcy5maWxlU2VydmljZS5maWxlVXBsb2FkRXJyb3IoZXJyb3IgYXMgRmlsZVVwbG9hZEVycm9yKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9UcmFuc2xhdGVkVXJsKCkge1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodGhpcy50cmFuc2xhdGVVcmxSZWRpcmVjdCk7XHJcbiAgfVxyXG5cclxuICBkaWN0YXRlU3RhcnRTdG9wKGlzRGljdGF0aW5nOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBwaHJhc2UgPSBgJHt0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZVRleHR9JHt0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZVRleHQ/Lmxlbmd0aCA+IDAgPyBcIiBcIiA6IFwiXCJ9JHt0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZVRleHRIeXBvdGhlc2lzfWA7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmlzRGljdGF0aW5nID0gaXNEaWN0YXRpbmc7XHJcbiAgICAvLyBUcmFuc2xhdGlvbiBoYXMgZW5kZWQuXHJcbiAgICBpZiAoIWlzRGljdGF0aW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5wdW5jdHVhdGlvbk1lc3NhZ2UgJiYgcGhyYXNlPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydHMud2FybmluZyhcIkFVRElPLlBVTkNUVUFUSU9OX01FU1NBR0VcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2hhbmdlU291cmNlKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHBocmFzZSxcclxuICAgICAgICAgIGRpc2FibGVBdXRvbWF0aWNUcmFuc2xhdGlvbjogdGhpcy5pc0RpY3RhdGluZyB8fCB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5kaXNhYmxlQXV0b21hdGljVHJhbnNsYXRpb25cclxuICAgICAgICB9KTtcclxuICAgICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jaGFuZ2VTb3VyY2VIeXBvdGhlc2lzKFwiXCIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2xlYXJTb3VyY2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpY3RhdGVSZXN1bHQocmVzdWx0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2hhbmdlU291cmNlSHlwb3RoZXNpcyhcIlwiKTtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2hhbmdlU291cmNlKHsgcGhyYXNlOiByZXN1bHQsIGRpc2FibGVBdXRvbWF0aWNUcmFuc2xhdGlvbjogdGhpcy5pc0RpY3RhdGluZyB9KVxyXG4gIH1cclxuXHJcbiAgZGljdGF0ZVBhcnRpYWxSZXN1bHQocGFydGlhbFJlc3VsdDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNoYW5nZVNvdXJjZUh5cG90aGVzaXMocGFydGlhbFJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICBkaWN0YXRlRXJyb3IoZXJyb3I6IEF1ZGlvRXJyb3JDYXNlKSB7XHJcbiAgICBpZiAoZXJyb3IgPT09IEF1ZGlvRXJyb3JDYXNlLk1BWF9USU1FX0VYQ0VFREVEKSB7XHJcbiAgICAgIGxldCB0aW1lU3RyaW5nID0gXCJcIjtcclxuICAgICAgY29uc3QgbWF4TGVuZ3RoVGltZSA9IG5ldyBEYXRlKDAsIDAsIDAsIDAsIDAsIHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLm1heGltdW1SZWNvcmRUaW1lKTtcclxuXHJcbiAgICAgIGNvbnN0IG1pbnV0ZXMgPSBtYXhMZW5ndGhUaW1lLmdldE1pbnV0ZXMoKTtcclxuICAgICAgaWYgKG1pbnV0ZXMgPiAwKSB7XHJcbiAgICAgICAgdGltZVN0cmluZyArPSBgJHttaW51dGVzfSBtaW51dGVzYDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc2Vjb25kcyA9IG1heExlbmd0aFRpbWUuZ2V0U2Vjb25kcygpO1xyXG4gICAgICBpZiAoc2Vjb25kcyA+IDApIHtcclxuICAgICAgICB0aW1lU3RyaW5nICs9IGAke3NlY29uZHN9IHNlY29uZHNgXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hbGVydHMud2FybmluZyhgRVJST1JTLkFVRElPLiR7ZXJyb3J9YCwgeyB0aW1lU3RyaW5nIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXJyb3IgPT09IEF1ZGlvRXJyb3JDYXNlLk5PX1NQRUVDSCkge1xyXG4gICAgICB0aGlzLmFsZXJ0cy53YXJuaW5nKGBFUlJPUlMuQVVESU8uJHtlcnJvcn1gKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmFsZXJ0cy51bmhhbmRlbGVkRXJyb3IoeyBFcnJvckNvZGU6IGVycm9yIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJTb3VyY2UoKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNsZWFyU291cmNlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uuc3RvcExpc3RlbmluZ1RvQ2hhbmdlcygpO1xyXG4gICAgdGhpcy50bGRTY3JvbGxTZXJ2aWNlLnVuc3Vic2NyaWJlVG9TY3JvbGwoKTtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dChudWxsKVxyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VQcm9ncmVzc0luZGljYXRvcigpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuaGlkZVByb2dyZXNzSW5kaWNhdG9yKCk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnN0b3BUcmFuc2xhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gbmVlZCB0byBzdWJzY3JpYmUgdG8gZ2V0IGlmIGlzIG1vYmlsZSB2aWV3IHNvIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGhpZGUgc291cmNlIGFjdGlvbiByb3cuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0JyZWFrcG9pbnRPYnNlcnZlcigpIHtcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUodGhpcy5tb2JpbGVCcmVha3BvaW50cylcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNNb2JpbGUgPSBzdGF0ZS5tYXRjaGVzO1xyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPCEtLSBOT1RFLiB0bGQtc291cmNlLWFuZC10YXJnZXQtd3JhcHBlciB1c2VzIG11bHRpcGxlIGNvbnRlbnQgcHJvamVjdGlvbnMsIHNvIG1pZ2h0IHNlZW0gY29uZnVzaW5nIGZpcnN0LCBidXQgZWxlbWVudHMgYXJlIGRpc3BsYXllZCBhdCB0aGVpciBwbGFjZXMgYmFzZWQgb24gdGxkLXNvdXJjZS1hbmQtdGFyZ2V0LXdyYXBwZXIgY29tcG9uZW50XHJcbmh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9jb250ZW50LXByb2plY3Rpb24jbXVsdGktc2xvdC1jb250ZW50LXByb2plY3Rpb25cclxuLS0+XHJcbjx0bGQtc291cmNlLWFuZC10YXJnZXQtd3JhcHBlciBbdGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3NdPVwidGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3NcIlxyXG4gIFtjbGVhclNvdXJjZVZpc2libGVdPVwic291cmNlPy5sZW5ndGg+MFwiIChvblNvdXJjZUNsZWFyKT1cImNsZWFyU291cmNlKClcIlxyXG4gIFtjbGVhckRpc2FibGVkXT1cInRleHRhcmVhRGlzYWJsZWRcIiBbY2xlYXJTb3VyY2VUb29sdGlwXT1cIidUTERfVFJBTlNMQVRFLkNMRUFSX1NPVVJDRV9UT09MVElQJ1wiXHJcbiAgW25nQ2xhc3NdPVwieydoaWdobGlnaHQtYWN0aXZlJzogaGlnaGxpZ2h0LCAnZ3JhbWNoZWNrLWFjdGl2ZSc6IGdyYW1DaGVjaywgJ2VtcHR5LXRhcmdldCc6IGlzRW1wdHlUYXJnZXR9XCI+XHJcbiAgPGRpdiBzb3VyY2VNYWluIGNsYXNzPVwic291cmNlLW1haW5cIiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgPHRsZC10cmFuc2xhdGUtc291cmNlIFt0ZXh0YXJlYURpc2FibGVkXT1cInRleHRhcmVhRGlzYWJsZWRcIiAjc291cmNlQ29tcG9uZW50IGZ4RmxleFxyXG4gICAgICBbc291cmNlUGFyYWdyYXBoc109XCJzb3VyY2VQYXJhZ3JhcGhzXCI+PC90bGQtdHJhbnNsYXRlLXNvdXJjZT5cclxuICA8L2Rpdj5cclxuICA8bmctY29udGFpbmVyIHNvdXJjZUFjdGlvbnMgKm5nSWY9XCIhaGlkZVNvdXJjZUFjdGlvbnNcIj5cclxuICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGNsYXNzPVwiYmFzaWMtcGFkZGluZ1wiIGZ4TGF5b3V0R2FwPVwiMWVtXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdWRpb0lucHV0VmlzaWJsZVwiPlxyXG4gICAgICAgIDx0bGQtZGljdGF0ZSAjZGljdGF0ZSBbY29uZmlndXJhdGlvbl09XCJkaWN0YXRlQ29uZmlnXCIgW25nQ2xhc3NdPVwieydmdWxsLXdpZHRoJyA6ICFmaWxlVXBsb2FkfVwiXHJcbiAgICAgICAgICAoaXNEaWN0YXRpbmcpPVwiZGljdGF0ZVN0YXJ0U3RvcCgkZXZlbnQpXCIgKHJlc3VsdCk9XCJkaWN0YXRlUmVzdWx0KCRldmVudClcIlxyXG4gICAgICAgICAgKHBhcnRpYWxSZXN1bHQpPVwiZGljdGF0ZVBhcnRpYWxSZXN1bHQoJGV2ZW50KVwiIChvbkVycm9yKT1cImRpY3RhdGVFcnJvcigkZXZlbnQpXCIgW2xhbmd1YWdlXT1cInNvdXJjZUxhbmd1YWdlXCI+XHJcbiAgICAgICAgPC90bGQtZGljdGF0ZT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmaWxlVXBsb2FkXCIgY2xhc3M9XCJmaWxlLXVwbG9hZC13cmFwcGVyXCI+XHJcbiAgICAgICAgPHRsZC1maWxlLXVwbG9hZCAoZmlsZUNoYW5nZSk9XCJmaWxlQ2hhbmdlKCRldmVudClcIiBbYWNjZXB0XT1cImFsbG93ZWRGaWxlVHlwZXNcIiBbbWF4U2l6ZV09XCJtYXhGaWxlVXBsb2FkU2l6ZVwiIFt1cGxvYWRJY29uTmFtZV09XCJ1cGxvYWRJY29uTmFtZVwiXHJcbiAgICAgICAgICBbZXh0ZW5kZWRBY2NlcHRMaXN0XT1cImV4dGVuZGVkRmlsZVR5cGVzXCIgW211bHRpcGxlXT1cIm11bHRpcGxlRmlsZXNcIiAoZXJyb3JFdmVudCk9XCJmaWxlVXBsb2FkRXJyb3IoJGV2ZW50KVwiXHJcbiAgICAgICAgICBbZmlsZVByZXZpZXdQcm9ncmVzc109XCJmaWxlUHJldmlld1Byb2dyZXNzXCIgW2Rpc2FibGVkXT1cImZpbGVVcGxvYWREaXNhYmxlZFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWQtZmlsZS10ZXh0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8gdGV4dC1sLXNlbWktYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCInRklMRV9VUExPQUQuVVBMT0FEJyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwiYWNjZW50LWNvbG9yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCInRklMRV9VUExPQUQuRFJBR19BTkRfRFJPUCcgfCB0cmFuc2xhdGVcIiBmeEhpZGUubHQtc20+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCInRklMRV9VUExPQUQuJysgKG11bHRpcGxlRmlsZXM/ICdGSUxFUycgOiAnRklMRScpIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3MubHQtc21dPVwiJ2FjY2VudC1jb2xvcidcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS11cGxvYWQtZXh0ZW5zaW9ucyB0ZXh0LW1cIj5cclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7dmlzaWJsZUV4dGVuc2lvbnN9fS4gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtYXhTaXplTUJcIiBbaW5uZXJIVE1MXT1cIidGSUxFX1VQTE9BRC5MSU1JVFNfTUInIHwgdHJhbnNsYXRlOiB7bWF4U2l6ZU1COiBtYXhTaXplTUJ9XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC90bGQtZmlsZS11cGxvYWQ+XHJcbiAgICAgICAgPGxpYi1vcGVuLWV4dGVuc2lvbi1kaWFsb2cgKm5nSWY9XCJzaG93RXh0ZW5zaW9uUG9wdXBcIiBbZXh0ZW5zaW9uc109XCJhbGxvd2VkVHlwZXNXaXRob3V0RG90c1wiPlxyXG4gICAgICAgIDwvbGliLW9wZW4tZXh0ZW5zaW9uLWRpYWxvZz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPGRpdiB0YXJnZXRNYWluIGNsYXNzPVwidGFyZ2V0LW1haW5cIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0VtcHR5VGFyZ2V0OyBlbHNlIHRyYW5zbGF0ZWRUZXh0QmxvY2tcIj5cclxuICAgICAgPHAgKm5nSWY9XCJzaG93VGFyZ2V0UGxhY2Vob2xkZXJcIiBjbGFzcz1cImRlc2NyaXB0aW9uLXRleHQgdGFyZ2V0LWVtcHR5XCJcclxuICAgICAgICBbaW5uZXJIdG1sXT1cIidUTERfVFJBTlNMQVRFLlRBUkdFVF9ERVNDUklQVElPTicgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgPC9wPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZy1jb250YWluZXIgdGFyZ2V0QWN0aW9ucz5cclxuICAgIDxkaXYgY2xhc3M9XCJ0bGQtdHJhbnNsYXRlLXRhcmdldC1mb290ZXIgYmFzaWMtcGFkZGluZ1wiICpuZ0lmPVwic2hvd1N1Z2dlc3Rpb25zIHx8IHNob3dQcm9ncmVzc0luZGljYXRvclwiPlxyXG4gICAgICA8dGxkLXRyYW5zbGF0ZS1zdWdnZXN0ICpuZ0lmPVwic2hvd1N1Z2dlc3Rpb25zXCIgW3N5c3RlbUlkXT1cInN5c3RlbUlkXCIgW3RhcmdldF09XCJ0YXJnZXRQYXJhZ3JhcGhzXCJcclxuICAgICAgICBbc291cmNlXT1cInNvdXJjZVBhcmFncmFwaHNcIj5cclxuICAgICAgPC90bGQtdHJhbnNsYXRlLXN1Z2dlc3Q+XHJcbiAgICAgIDxwcm9ncmVzcy1pbmRpY2F0b3IgKG9uQ2xvc2UpPVwiY2xvc2VQcm9ncmVzc0luZGljYXRvcigpXCIgKm5nSWY9XCJzaG93UHJvZ3Jlc3NJbmRpY2F0b3JcIj48L3Byb2dyZXNzLWluZGljYXRvcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L3RsZC1zb3VyY2UtYW5kLXRhcmdldC13cmFwcGVyPlxyXG5cclxuXHJcbjwhLS0gdGVtcGxhdGVzIHVzZWQgZm9yIGVsc2UgYmxvY2tzIGluIHRhcmdldCBjb250YWluZXIgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjdHJhbnNsYXRlZFRleHRCbG9jaz5cclxuICA8ZGl2IFtjbGFzcy50cmFuc2xhdGVkLXNvdXJjZS1vdmVyZmxvd109XCJ0YXJnZXRXcmFwcGVyT3ZlcmZsb3dcIiBjbGFzcz1cInRyYW5zbGF0ZWQtc291cmNlXCIgW2NsYXNzLnNlbGVjdGFibGUtc2VudGVuY2VdPVwic2hvd1N1Z2dlc3Rpb25zXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXVybFRvVHJhbnNsYXRlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YXJnZXQtd3JhcHBlci1hY3Rpb24tYnV0dG9uc1wiPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWRcIiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJ0bGQtY29weS10cmFuc2xhdGlvblwiIChjbGljayk9XCJjb3B5KClcIlxyXG4gICAgICAgICAgbWF0VG9vbHRpcD1cInt7J1RPT0xUSVBTLkNPUFknIHwgdHJhbnNsYXRlfX1cIiBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNvcHlNZXNzYWdlSWRcIlxyXG4gICAgICAgICAgKGtleWRvd24uVGFiKT1cInN3aXRjaEZvY3VzRnJvbUNvcHkoJGV2ZW50KVwiIFthdHRyLklkXT1cImNvcHlCdXR0b25JZFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidBUklBX0xBQkVMUy5DT1BZJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICBjb250ZW50X2NvcHlcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkIHx8IHRyYW5zbGF0aW9uRXJyb3JcIiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJ0bGQtcmVmcmVzaC10cmFuc2xhdGlvblwiIChjbGljayk9XCJyZWZyZXNoKClcIlxyXG4gICAgICAgICAgbWF0VG9vbHRpcD1cInt7J1RPT0xUSVBTLlJFRlJFU0gnIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuUkVGUkVTSCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgcmVmcmVzaFxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDx0bGQtdGV4dC10by1zcGVlY2ggKm5nSWY9XCJ0ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5ncyAmJiBmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWRcIiBbc2V0dGluZ3NdPVwidGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3NcIj5cclxuICAgICAgICA8L3RsZC10ZXh0LXRvLXNwZWVjaD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHBhcmFncmFwaCBvZiB0YXJnZXRQYXJhZ3JhcGhzXCI+XHJcbiAgICAgICAgPHRsZC1oaWdobGlnaHQtdHJlZSBbaGlnaGxpZ2h0XT1cImhpZ2hsaWdodFwiIFt0cmVlXT1cInBhcmFncmFwaFwiIFtzZWxlY3RTZW50ZW5jZV09XCJzaG93U3VnZ2VzdGlvbnNcIj5cclxuICAgICAgICA8L3RsZC1oaWdobGlnaHQtdHJlZT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkXCIgY2xhc3M9XCJkaWN0aW9uYXJ5LXdyYXBwZXJcIj5cclxuICAgICAgICA8dGxkLWRpY3Rpb25hcnkgW2RpY3Rpb25hcnldPVwiZGljdGlvbmFyeUVudHJ5XCI+PC90bGQtZGljdGlvbmFyeT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgKm5nSWY9XCJ1cmxUb1RyYW5zbGF0ZVwiIGNsYXNzPVwidGFyZ2V0LXVybC1jb250YWluZXJcIj5cclxuICAgICAgPGEgW2F0dHIuaHJlZl09XCJ0cmFuc2xhdGVVcmxSZWRpcmVjdFwiIHRhcmdldD1cIl9ibGFua1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBjbGFzcz1cImdvLXRvLXdlYnRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIHt7dXJsVG9UcmFuc2xhdGV9fVxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBjb2xvcj1cImFjY2VudFwiIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidBUklBX0xBQkVMUy5PUEVOX0lOX05FVydcIj5cclxuICAgICAgICAgIG9wZW5faW5fbmV3XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2E+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RsZC10cmFuc2xhdGUvc3JjL2xpYi9tb2R1bGVzL3RsZC10ZXh0L2NvbXBvbmVudHMvdGxkLXRyYW5zbGF0ZS10ZXh0L3RsZC10cmFuc2xhdGUtdGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9jb21wb25lbnRzL3RsZC10cmFuc2xhdGUtdGV4dC90bGQtdHJhbnNsYXRlLXRleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFzQixXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBNkIsTUFBTSwyQkFBMkIsQ0FBQztBQVF0RixPQUFPLEVBQTRCLGdCQUFnQixFQUFtQixNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTcEcsTUFBTSxPQUFPLHlCQUF5QjtJQXlGakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFqR1csZUFBZSxDQUE4QjtJQUNyRCxnQkFBZ0IsQ0FBc0I7SUFFbkQsbUJBQW1CLENBQVM7SUFDM0IsWUFBWSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO0lBRTFFLFVBQVUsQ0FBYTtJQUN2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NkI7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7YUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQzt1R0E5UFUseUJBQXlCOzJGQUF6Qix5QkFBeUIsK1dDdEJ0Qyxrdk1BNkdBOzsyRkR2RmEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLG9CQUFvQjttWkFLQSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDTixnQkFBZ0I7c0JBQXJDLFNBQVM7dUJBQUMsU0FBUztnQkFFWCxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQXVkaW9FcnJvckNhc2UsIElUcmFuc2NyaXB0aW9uVXBkYXRlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi90bGQtYXVkaW8vbW9kZWxzJztcclxuaW1wb3J0IHsgSURpY3RhdGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vdGxkLWF1ZGlvL21vZGVscy9kaWN0YXRlLWNvbmZpZ3VyYXRpb25pLm1vZGVsJztcclxuaW1wb3J0IHsgQXVkaW9SZWNvcmRTZXJ2aWNlLCBUbGRWb2ljZUlucHV0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RsZC1hdWRpby9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLCBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdGxkLWNvbW1vbi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRsZFNjcm9sbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzL3Njcm9sbC90bGQtc2Nyb2xsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVGaWxlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RsZC1kb2N1bWVudC9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGxkLXRyYW5zbGF0ZS10ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVTb3VyY2VDb21wb25lbnQgfSBmcm9tICcuLi90bGQtdHJhbnNsYXRlLXNvdXJjZS90bGQtdHJhbnNsYXRlLXNvdXJjZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3RpdmVEYXRhLCBBbGVydFNlcnZpY2UsIENvbnZlcnNpb25IZWxwZXIsIEZpbGVVcGxvYWRFcnJvciB9IGZyb20gJ0B0aWxkZS1ubHAvbmd4LWNvbW1vbic7XHJcbmltcG9ydCB7IFRsZERpY3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90bGQtYXVkaW8nO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGxkLXRyYW5zbGF0ZS10ZXh0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGxkLXRyYW5zbGF0ZS10ZXh0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90bGQtdHJhbnNsYXRlLXRleHQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGxkVHJhbnNsYXRlVGV4dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKFwic291cmNlQ29tcG9uZW50XCIpIHNvdXJjZUNvbXBvbmVudDogVGxkVHJhbnNsYXRlU291cmNlQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWN0YXRlXCIpIGRpY3RhdGVDb21wb25lbnQ6IFRsZERpY3RhdGVDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIGZpbGVQcmV2aWV3UHJvZ3Jlc3M6IG51bWJlcjtcclxuICBAT3V0cHV0KCkgb25GaWxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsZVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZVtdPigpO1xyXG5cclxuICBhY3RpdmVEYXRhOiBBY3RpdmVEYXRhO1xyXG4gIGdldCBzeXN0ZW1JZCgpIHsgcmV0dXJuIHRoaXMuYWN0aXZlRGF0YT8uc3lzdGVtSWQ7IH07XHJcbiAgLy9wYXJhbXMgZnJvbSBjb25maWcgc2VydmljZS5cclxuICBnZXQgYWxsb3dlZEZpbGVUeXBlcygpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLmFsbG93ZWRGaWxlVHlwZXM7IH07XHJcbiAgZ2V0IGV4dGVuZGVkRmlsZVR5cGVzKCk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMuY29uZmlnLmZpbGVDb25maWcuZXh0ZW5kZWRGaWxlVHlwZXM7IH07XHJcbiAgZ2V0IGFwcElkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZy5jb3JlQ29uZmlnLmFwcElkOyB9O1xyXG4gIGdldCBoaWdobGlnaHQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLmhpZ2hsaWdodDsgfTtcclxuICBnZXQgZ3JhbUNoZWNrKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy5jaGVja1NvdXJjZUdyYW1tYXI7IH07XHJcbiAgZ2V0IGZpbGVVcGxvYWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLmZpbGVVcGxvYWQgJiYgISh0aGlzLmlzRGljdGF0aW5nIHx8IHRoaXMuYXVkaW9TZXJ2aWNlPy5pc1JlY29yZGluZyB8fCB0aGlzLnZvaWNlSW5wdXRTZXJ2aWNlLmlzUHJvY2Vzc2luZyk7IH07XHJcbiAgZ2V0IGlzQXV0aCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmNvcmVDb25maWcuaXNBdXRoOyB9O1xyXG4gIGdldCBtYXhGaWxlVXBsb2FkU2l6ZSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb25maWcuZmlsZUNvbmZpZy5tYXhTaXplOyB9O1xyXG4gIGdldCBtdWx0aXBsZUZpbGVzKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWcuZmlsZUNvbmZpZy5udW1iZXJPZkZpbGVzQWxsb3dlZCA+IDE7IH07XHJcbiAgZ2V0IHVwZGF0ZVRyYW5zbGF0aW9uVXJsKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLnVwZGF0ZVRyYW5zbGF0aW9uVXJsOyB9O1xyXG4gIGdldCBhbGxvd1dlYnNpdGVUcmFuc2xhdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcuYWxsb3dXZWJzaXRlVHJhbnNsYXRpb247IH07XHJcbiAgZ2V0IGF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy5hdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZTsgfTtcclxuICBnZXQgd2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXg7IH07XHJcbiAgZ2V0IHdlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLndlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4OyB9O1xyXG4gIGdldCBzaG93U3VnZ2VzdGlvbnMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmhhc1RyYW5zbGF0ZWRQYXJhZ3JhcGhzICYmIHRoaXMuY29uZmlnLnRleHRDb25maWcuc2hvd1N1Z2dlc3Rpb25zICYmICF0aGlzLnVybFRvVHJhbnNsYXRlIH07XHJcbiAgZ2V0IHRleHRhcmVhRGlzYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmF1ZGlvU2VydmljZS5pc1JlY29yZGluZyB8fCB0aGlzLnZvaWNlSW5wdXRTZXJ2aWNlLmlzUHJvY2Vzc2luZyB8fCB0aGlzLmlzRGljdGF0aW5nIHx8IHRoaXMudGxkU3lzdGVtLm5vU3lzdGVtc0Vycm9yIH07XHJcbiAgZ2V0IGZpbGVVcGxvYWREaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGxkU3lzdGVtLm5vU3lzdGVtc0Vycm9yIH07XHJcbiAgZ2V0IGlzRGljdGF0aW5nKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5pc0RpY3RhdGluZzsgfTtcclxuICBnZXQgbWF4RGljdGF0ZUxlbmd0aCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLm1heGltdW1SZWNvcmRUaW1lOyB9XHJcbiAgZ2V0IHNvdXJjZUxhbmd1YWdlKCkgeyByZXR1cm4gdGhpcy5hY3RpdmVEYXRhPy5zb3VyY2VMYW5nLmxhbmc7IH1cclxuICBnZXQgaGFzVHJhbnNsYXRlZFBhcmFncmFwaHMoKSB7IHJldHVybiB0aGlzLnRhcmdldFBhcmFncmFwaHM/Lmxlbmd0aCA+IDAgfVxyXG4gIGdldCBpc0VtcHR5VGFyZ2V0KCkgeyByZXR1cm4gIXRoaXMuaGFzVHJhbnNsYXRlZFBhcmFncmFwaHMgJiYgIXRoaXMudXJsVG9UcmFuc2xhdGUgJiYgIXRoaXMuaGFzRGljdGlvbmFyeSB9XHJcbiAgZ2V0IHNob3dUYXJnZXRQbGFjZWhvbGRlcigpIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcuc2hvd1RhcmdldFBsYWNlaG9sZGVyIH1cclxuICBnZXQgc2hvd0V4dGVuc2lvblBvcHVwKCkgeyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy5zaG93RXh0ZW5zaW9uUG9wdXAgJiYgdGhpcy52aXNpYmxlRXh0ZW5zaW9uQ291bnQgPCB0aGlzLmFsbG93ZWRGaWxlVHlwZXMubGVuZ3RoIH1cclxuICBnZXQgdmlzaWJsZUV4dGVuc2lvbkNvdW50KCkgeyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy52aXNpYmxlRXh0ZW5zaW9uQ291bnQgfTtcclxuICBnZXQgdGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3MoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzIH07XHJcbiAgZ2V0IHRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5ncyB9O1xyXG4gIGdldCB1cGxvYWRJY29uTmFtZSgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmNvcmVDb25maWcudXBsb2FkSWNvbk5hbWUgfTtcclxuXHJcbiAgYXVkaW9JbnB1dFZpc2libGU6IGJvb2xlYW47XHJcbiAgdGFyZ2V0U2VudGVuY2VTZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGdldCB1cmxUb1RyYW5zbGF0ZSgpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UudXJsVG9UcmFuc2xhdGU7IH07XHJcblxyXG4gIGFsbG93ZWRUeXBlc1dpdGhvdXREb3RzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICByZWFkb25seSBjb3B5TWVzc2FnZUlkID0gXCJ0bGQtY29weS1zdWNjZXNzXCI7XHJcbiAgcmVhZG9ubHkgY29weU1lc3NhZ2VDbG9zZUJ1dHRvbklkID0gXCJ0bGQtY29weS1zdWNjZXNzLWNsb3NlXCI7XHJcbiAgcmVhZG9ubHkgY29weUJ1dHRvbklkID0gXCJ0bGQtY29weS10by1jbGlwYm9hcmRcIjtcclxuXHJcbiAgZ2V0IHRyYW5zbGF0ZWRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50cmFuc2xhdGVkVGV4dDtcclxuICB9XHJcblxyXG4gIGdldCBmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhbnNsYXRpb25FcnJvcigpIHtcclxuICAgIHJldHVybiB0aGlzLnNvdXJjZSAmJiAhdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5pc1RyYW5zbGF0aW5nO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0RpY3Rpb25hcnkoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmhhc0RpY3Rpb25hcnk7IH1cclxuICBnZXQgZGljdGlvbmFyeUVudHJ5KCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5kaWN0aW9uYXJ5RW50cnk7IH1cclxuICBnZXQgc291cmNlKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5zb3VyY2VUZXh0OyB9XHJcbiAgZ2V0IHRyYW5zbGF0ZVVybFJlZGlyZWN0KCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50cmFuc2xhdGVVcmxSZWRpcmVjdDsgfVxyXG4gIGdldCBzaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNob3VsZFNob3dQcm9ncmVzc0luZGljYXRvcjsgfVxyXG4gIGdldCBoaWRlU291cmNlQWN0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLnNvdXJjZSAmJiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLmhpZGVTb3VyY2VBY3Rpb25zV2hlbkhhc1RleHRNb2JpbGUgJiYgdGhpcy5pc01vYmlsZSAmJiAhdGhpcy5kaWN0YXRlQ29tcG9uZW50Py5pc1JlY29yZGluZztcclxuICB9XHJcbiAgZ2V0IHBhcmFncmFwaHMoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnBhcmFncmFwaHM7IH07XHJcbiAgZ2V0IHNvdXJjZVBhcmFncmFwaHMoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZVBhcmFncmFwaHM7IH1cclxuICBnZXQgdGFyZ2V0UGFyYWdyYXBocygpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UudGFyZ2V0UGFyYWdyYXBoczsgfVxyXG5cclxuICBnZXQgdGFyZ2V0V3JhcHBlck92ZXJmbG93KCkge1xyXG4gICAgY29uc3QgdGFyZ2V0V3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YXJnZXQtbWFpbicpO1xyXG4gICAgY29uc3QgdGFyZ2V0V3JhcHBlck92ZXJmbG93ID0gdGFyZ2V0V3JhcHBlci5zY3JvbGxIZWlnaHQgPiB0YXJnZXRXcmFwcGVyLmNsaWVudEhlaWdodDsgXHJcbiAgICByZXR1cm4gdGFyZ2V0V3JhcHBlck92ZXJmbG93O1xyXG4gIH1cclxuXHJcbiAgZGljdGF0ZUNvbmZpZzogSURpY3RhdGVDb25maWd1cmF0aW9uO1xyXG4gIHZpc2libGVFeHRlbnNpb25zOiBzdHJpbmc7XHJcbiAgbWF4U2l6ZU1COiBudW1iZXI7XHJcblxyXG4gIHByaXZhdGUgaXNNb2JpbGU6IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbW9iaWxlQnJlYWtwb2ludHMgPSBbQnJlYWtwb2ludHMuWFNtYWxsXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVRleHRTZXJ2aWNlOiBUbGRUcmFuc2xhdGVUZXh0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2xpcGJvYXJkOiBDbGlwYm9hcmQsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0czogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRsZFNjcm9sbFNlcnZpY2U6IFRsZFNjcm9sbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRsZFN5c3RlbTogVGxkVHJhbnNsYXRlU3lzdGVtTWFuYWdlbWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1ZGlvU2VydmljZTogQXVkaW9SZWNvcmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB2b2ljZUlucHV0U2VydmljZTogVGxkVm9pY2VJbnB1dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVTZXJ2aWNlOiBUbGRUcmFuc2xhdGVGaWxlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5saXN0ZW5PbkNoYW5nZXMoKTtcclxuICAgIHRoaXMuZGljdGF0ZUNvbmZpZyA9IHtcclxuICAgICAgYXBwSWQ6IHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLmFwcElkLFxyXG4gICAgICBhcHBTZWNyZXQ6IHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLmFwcFNlY3JldCxcclxuICAgICAgbWF4TGVuZ3RoOiB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5tYXhpbXVtUmVjb3JkVGltZSxcclxuICAgICAgYXBpVXJsOiB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5kaWN0YXRlQXBpVXJsXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aXNpYmxlRXh0ZW5zaW9ucyA9IHRoaXMuYWxsb3dlZEZpbGVUeXBlcy5zbGljZSgwLCB0aGlzLnZpc2libGVFeHRlbnNpb25Db3VudCkuam9pbihcIiwgXCIpO1xyXG4gICAgdGhpcy5hbGxvd2VkRmlsZVR5cGVzLmZvckVhY2goKGVsKSA9PiB0aGlzLmFsbG93ZWRUeXBlc1dpdGhvdXREb3RzLnB1c2goZWwucmVwbGFjZSgnLicsICcnKSkpO1xyXG5cclxuICAgIHRoaXMubWF4U2l6ZU1CID0gQ29udmVyc2lvbkhlbHBlci5ieXRlc1RvTWIodGhpcy5jb25maWcuZmlsZUNvbmZpZy5tYXhTaXplKTtcclxuXHJcbiAgICB0aGlzLnRsZFN5c3RlbS5nZXRBY3RpdmVEYXRhKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgoeCwgeSkgPT4geCAmJiB5ICYmIHguc3lzdGVtSWQgPT0geS5zeXN0ZW1JZCkpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoc3lzdCkgPT4ge1xyXG4gICAgICAgIGlmICghc3lzdCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFjdGl2ZURhdGEgPSBzeXN0O1xyXG4gICAgICAgIHRoaXMuYXVkaW9JbnB1dFZpc2libGUgPSB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5hdWRpb1RleHRJbnB1dCAmJiB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5zb3VyY2VMYW5ndWFnZXM/LmluY2x1ZGVzKHRoaXMuYWN0aXZlRGF0YT8uc291cmNlTGFuZy5sYW5nKTtcclxuICAgICAgICBpZiAodGhpcy5hY3RpdmVEYXRhLnJldHJhbnNsYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnJldHJhbnNsYXRlKHsgc3lzdGVtQ2hhbmdlZDogdHJ1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICB0aGlzLnRsZFNjcm9sbFNlcnZpY2Uuc3Vic2NyaWJlVG9TY3JvbGwoKTtcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcuYXVkaW9Db25maWcuYXVkaW9UZXh0SW5wdXQpIHtcclxuICAgICAgdGhpcy5hdWRpb1NlcnZpY2Uub25SZWNvcmRTdGFydC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNoYW5nZVNvdXJjZSh7IHBocmFzZTogXCJcIiB9KTtcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMudm9pY2VJbnB1dFNlcnZpY2Uub25UcmFuc2NyaWJ0aW9uVGV4dFVwZGF0ZWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IElUcmFuc2NyaXB0aW9uVXBkYXRlTW9kZWwpID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2hhbmdlU291cmNlKHsgcGhyYXNlOiBldmVudC50ZXh0LCBzd2FwU3lzdGVtczogZmFsc2UsIGRpc2FibGVBdXRvbWF0aWNUcmFuc2xhdGlvbjogIWV2ZW50LmNvbXBsZXRlZCB9KTtcclxuICAgICAgICAgIGlmIChldmVudC5jb21wbGV0ZWQgJiYgKCFldmVudC50ZXh0IHx8IGV2ZW50LnRleHQgPT09IFwiXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRzLndhcm5pbmcoYEVSUk9SUy5BVURJTy4ke0F1ZGlvRXJyb3JDYXNlLk5PX1RFWFRfUkVDT0dOSVpFRH1gKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0JyZWFrcG9pbnRPYnNlcnZlcigpO1xyXG4gIH1cclxuXHJcbiAgY29weSgpIHtcclxuICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkodGhpcy50cmFuc2xhdGVkVGV4dCk7XHJcbiAgICB0aGlzLmFsZXJ0cy5zdWNjZXNzKFwiVExEX1RSQU5TTEFURS5URVhUX0NPUElFRFwiLCB7IGlkOiB0aGlzLmNvcHlNZXNzYWdlSWQsIGNsb3NlQnV0dG9uSWQ6IHRoaXMuY29weU1lc3NhZ2VDbG9zZUJ1dHRvbklkLCBwYXJlbnRJZDogdGhpcy5jb3B5QnV0dG9uSWQgfSk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5vblRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hGb2N1c0Zyb21Db3B5KGV2ZW50KSB7XHJcbiAgICBjb25zdCBjb3B5TWVzc2FnZUNsb3NlQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5jb3B5TWVzc2FnZUNsb3NlQnV0dG9uSWQpPy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJ1dHRvblwiKT8uaXRlbSgwKTtcclxuICAgIGlmIChjb3B5TWVzc2FnZUNsb3NlQnV0dG9uKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGNvcHlNZXNzYWdlQ2xvc2VCdXR0b24uZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbGVDaGFuZ2UoZmlsZXM6IEZpbGVbXSkge1xyXG4gICAgdGhpcy5vbkZpbGVDaGFuZ2UuZW1pdChmaWxlcyk7XHJcbiAgfVxyXG5cclxuICBmaWxlVXBsb2FkRXJyb3IoZXJyb3I6IGFueSkge1xyXG4gICAgdGhpcy5maWxlU2VydmljZS5maWxlVXBsb2FkRXJyb3IoZXJyb3IgYXMgRmlsZVVwbG9hZEVycm9yKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9UcmFuc2xhdGVkVXJsKCkge1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodGhpcy50cmFuc2xhdGVVcmxSZWRpcmVjdCk7XHJcbiAgfVxyXG5cclxuICBkaWN0YXRlU3RhcnRTdG9wKGlzRGljdGF0aW5nOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBwaHJhc2UgPSBgJHt0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZVRleHR9JHt0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZVRleHQ/Lmxlbmd0aCA+IDAgPyBcIiBcIiA6IFwiXCJ9JHt0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZVRleHRIeXBvdGhlc2lzfWA7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmlzRGljdGF0aW5nID0gaXNEaWN0YXRpbmc7XHJcbiAgICAvLyBUcmFuc2xhdGlvbiBoYXMgZW5kZWQuXHJcbiAgICBpZiAoIWlzRGljdGF0aW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5wdW5jdHVhdGlvbk1lc3NhZ2UgJiYgcGhyYXNlPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydHMud2FybmluZyhcIkFVRElPLlBVTkNUVUFUSU9OX01FU1NBR0VcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2hhbmdlU291cmNlKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHBocmFzZSxcclxuICAgICAgICAgIGRpc2FibGVBdXRvbWF0aWNUcmFuc2xhdGlvbjogdGhpcy5pc0RpY3RhdGluZyB8fCB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5kaXNhYmxlQXV0b21hdGljVHJhbnNsYXRpb25cclxuICAgICAgICB9KTtcclxuICAgICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jaGFuZ2VTb3VyY2VIeXBvdGhlc2lzKFwiXCIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2xlYXJTb3VyY2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpY3RhdGVSZXN1bHQocmVzdWx0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2hhbmdlU291cmNlSHlwb3RoZXNpcyhcIlwiKTtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2hhbmdlU291cmNlKHsgcGhyYXNlOiByZXN1bHQsIGRpc2FibGVBdXRvbWF0aWNUcmFuc2xhdGlvbjogdGhpcy5pc0RpY3RhdGluZyB9KVxyXG4gIH1cclxuXHJcbiAgZGljdGF0ZVBhcnRpYWxSZXN1bHQocGFydGlhbFJlc3VsdDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNoYW5nZVNvdXJjZUh5cG90aGVzaXMocGFydGlhbFJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICBkaWN0YXRlRXJyb3IoZXJyb3I6IEF1ZGlvRXJyb3JDYXNlKSB7XHJcbiAgICBpZiAoZXJyb3IgPT09IEF1ZGlvRXJyb3JDYXNlLk1BWF9USU1FX0VYQ0VFREVEKSB7XHJcbiAgICAgIGxldCB0aW1lU3RyaW5nID0gXCJcIjtcclxuICAgICAgY29uc3QgbWF4TGVuZ3RoVGltZSA9IG5ldyBEYXRlKDAsIDAsIDAsIDAsIDAsIHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLm1heGltdW1SZWNvcmRUaW1lKTtcclxuXHJcbiAgICAgIGNvbnN0IG1pbnV0ZXMgPSBtYXhMZW5ndGhUaW1lLmdldE1pbnV0ZXMoKTtcclxuICAgICAgaWYgKG1pbnV0ZXMgPiAwKSB7XHJcbiAgICAgICAgdGltZVN0cmluZyArPSBgJHttaW51dGVzfSBtaW51dGVzYDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc2Vjb25kcyA9IG1heExlbmd0aFRpbWUuZ2V0U2Vjb25kcygpO1xyXG4gICAgICBpZiAoc2Vjb25kcyA+IDApIHtcclxuICAgICAgICB0aW1lU3RyaW5nICs9IGAke3NlY29uZHN9IHNlY29uZHNgXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hbGVydHMud2FybmluZyhgRVJST1JTLkFVRElPLiR7ZXJyb3J9YCwgeyB0aW1lU3RyaW5nIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXJyb3IgPT09IEF1ZGlvRXJyb3JDYXNlLk5PX1NQRUVDSCkge1xyXG4gICAgICB0aGlzLmFsZXJ0cy53YXJuaW5nKGBFUlJPUlMuQVVESU8uJHtlcnJvcn1gKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmFsZXJ0cy51bmhhbmRlbGVkRXJyb3IoeyBFcnJvckNvZGU6IGVycm9yIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJTb3VyY2UoKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNsZWFyU291cmNlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uuc3RvcExpc3RlbmluZ1RvQ2hhbmdlcygpO1xyXG4gICAgdGhpcy50bGRTY3JvbGxTZXJ2aWNlLnVuc3Vic2NyaWJlVG9TY3JvbGwoKTtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dChudWxsKVxyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VQcm9ncmVzc0luZGljYXRvcigpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuaGlkZVByb2dyZXNzSW5kaWNhdG9yKCk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnN0b3BUcmFuc2xhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gbmVlZCB0byBzdWJzY3JpYmUgdG8gZ2V0IGlmIGlzIG1vYmlsZSB2aWV3IHNvIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGhpZGUgc291cmNlIGFjdGlvbiByb3cuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0JyZWFrcG9pbnRPYnNlcnZlcigpIHtcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUodGhpcy5tb2JpbGVCcmVha3BvaW50cylcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNNb2JpbGUgPSBzdGF0ZS5tYXRjaGVzO1xyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPCEtLSBOT1RFLiB0bGQtc291cmNlLWFuZC10YXJnZXQtd3JhcHBlciB1c2VzIG11bHRpcGxlIGNvbnRlbnQgcHJvamVjdGlvbnMsIHNvIG1pZ2h0IHNlZW0gY29uZnVzaW5nIGZpcnN0LCBidXQgZWxlbWVudHMgYXJlIGRpc3BsYXllZCBhdCB0aGVpciBwbGFjZXMgYmFzZWQgb24gdGxkLXNvdXJjZS1hbmQtdGFyZ2V0LXdyYXBwZXIgY29tcG9uZW50XHJcbmh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9jb250ZW50LXByb2plY3Rpb24jbXVsdGktc2xvdC1jb250ZW50LXByb2plY3Rpb25cclxuLS0+XHJcbjx0bGQtc291cmNlLWFuZC10YXJnZXQtd3JhcHBlciBbdGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3NdPVwidGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3NcIlxyXG4gIFtjbGVhclNvdXJjZVZpc2libGVdPVwic291cmNlPy5sZW5ndGg+MFwiIChvblNvdXJjZUNsZWFyKT1cImNsZWFyU291cmNlKClcIlxyXG4gIFtjbGVhckRpc2FibGVkXT1cInRleHRhcmVhRGlzYWJsZWRcIiBbY2xlYXJTb3VyY2VUb29sdGlwXT1cIidUTERfVFJBTlNMQVRFLkNMRUFSX1NPVVJDRV9UT09MVElQJ1wiXHJcbiAgW25nQ2xhc3NdPVwieydoaWdobGlnaHQtYWN0aXZlJzogaGlnaGxpZ2h0LCAnZ3JhbWNoZWNrLWFjdGl2ZSc6IGdyYW1DaGVjaywgJ2VtcHR5LXRhcmdldCc6IGlzRW1wdHlUYXJnZXR9XCI+XHJcbiAgPGRpdiBzb3VyY2VNYWluIGNsYXNzPVwic291cmNlLW1haW5cIiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgPHRsZC10cmFuc2xhdGUtc291cmNlIFt0ZXh0YXJlYURpc2FibGVkXT1cInRleHRhcmVhRGlzYWJsZWRcIiAjc291cmNlQ29tcG9uZW50IGZ4RmxleFxyXG4gICAgICBbc291cmNlUGFyYWdyYXBoc109XCJzb3VyY2VQYXJhZ3JhcGhzXCI+PC90bGQtdHJhbnNsYXRlLXNvdXJjZT5cclxuICA8L2Rpdj5cclxuICA8bmctY29udGFpbmVyIHNvdXJjZUFjdGlvbnMgKm5nSWY9XCIhaGlkZVNvdXJjZUFjdGlvbnNcIj5cclxuICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGNsYXNzPVwiYmFzaWMtcGFkZGluZ1wiIGZ4TGF5b3V0R2FwPVwiMWVtXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdWRpb0lucHV0VmlzaWJsZVwiPlxyXG4gICAgICAgIDx0bGQtZGljdGF0ZSAjZGljdGF0ZSBbY29uZmlndXJhdGlvbl09XCJkaWN0YXRlQ29uZmlnXCIgW25nQ2xhc3NdPVwieydmdWxsLXdpZHRoJyA6ICFmaWxlVXBsb2FkfVwiXHJcbiAgICAgICAgICAoaXNEaWN0YXRpbmcpPVwiZGljdGF0ZVN0YXJ0U3RvcCgkZXZlbnQpXCIgKHJlc3VsdCk9XCJkaWN0YXRlUmVzdWx0KCRldmVudClcIlxyXG4gICAgICAgICAgKHBhcnRpYWxSZXN1bHQpPVwiZGljdGF0ZVBhcnRpYWxSZXN1bHQoJGV2ZW50KVwiIChvbkVycm9yKT1cImRpY3RhdGVFcnJvcigkZXZlbnQpXCIgW2xhbmd1YWdlXT1cInNvdXJjZUxhbmd1YWdlXCI+XHJcbiAgICAgICAgPC90bGQtZGljdGF0ZT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmaWxlVXBsb2FkXCIgY2xhc3M9XCJmaWxlLXVwbG9hZC13cmFwcGVyXCI+XHJcbiAgICAgICAgPGxpYi1maWxlLXVwbG9hZCAoZmlsZUNoYW5nZSk9XCJmaWxlQ2hhbmdlKCRldmVudClcIiBbYWNjZXB0XT1cImFsbG93ZWRGaWxlVHlwZXNcIiBbbWF4U2l6ZV09XCJtYXhGaWxlVXBsb2FkU2l6ZVwiIFt1cGxvYWRJY29uTmFtZV09XCJ1cGxvYWRJY29uTmFtZVwiXHJcbiAgICAgICAgICBbZXh0ZW5kZWRBY2NlcHRMaXN0XT1cImV4dGVuZGVkRmlsZVR5cGVzXCIgW211bHRpcGxlXT1cIm11bHRpcGxlRmlsZXNcIiAoZXJyb3JFdmVudCk9XCJmaWxlVXBsb2FkRXJyb3IoJGV2ZW50KVwiXHJcbiAgICAgICAgICBbZmlsZVByZXZpZXdQcm9ncmVzc109XCJmaWxlUHJldmlld1Byb2dyZXNzXCIgW2Rpc2FibGVkXT1cImZpbGVVcGxvYWREaXNhYmxlZFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWQtZmlsZS10ZXh0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8gdGV4dC1sLXNlbWktYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCInRklMRV9VUExPQUQuVVBMT0FEJyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwiYWNjZW50LWNvbG9yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCInRklMRV9VUExPQUQuRFJBR19BTkRfRFJPUCcgfCB0cmFuc2xhdGVcIiBmeEhpZGUubHQtc20+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCInRklMRV9VUExPQUQuJysgKG11bHRpcGxlRmlsZXM/ICdGSUxFUycgOiAnRklMRScpIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3MubHQtc21dPVwiJ2FjY2VudC1jb2xvcidcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS11cGxvYWQtZXh0ZW5zaW9ucyB0ZXh0LW1cIj5cclxuICAgICAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7dmlzaWJsZUV4dGVuc2lvbnN9fS4gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtYXhTaXplTUJcIiBbaW5uZXJIVE1MXT1cIidGSUxFX1VQTE9BRC5MSU1JVFNfTUInIHwgdHJhbnNsYXRlOiB7bWF4U2l6ZU1COiBtYXhTaXplTUJ9XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9saWItZmlsZS11cGxvYWQ+XHJcbiAgICAgICAgPGxpYi1vcGVuLWV4dGVuc2lvbi1kaWFsb2cgKm5nSWY9XCJzaG93RXh0ZW5zaW9uUG9wdXBcIiBbZXh0ZW5zaW9uc109XCJhbGxvd2VkVHlwZXNXaXRob3V0RG90c1wiPlxyXG4gICAgICAgIDwvbGliLW9wZW4tZXh0ZW5zaW9uLWRpYWxvZz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPGRpdiB0YXJnZXRNYWluIGNsYXNzPVwidGFyZ2V0LW1haW5cIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0VtcHR5VGFyZ2V0OyBlbHNlIHRyYW5zbGF0ZWRUZXh0QmxvY2tcIj5cclxuICAgICAgPHAgKm5nSWY9XCJzaG93VGFyZ2V0UGxhY2Vob2xkZXJcIiBjbGFzcz1cImRlc2NyaXB0aW9uLXRleHQgdGFyZ2V0LWVtcHR5XCJcclxuICAgICAgICBbaW5uZXJIdG1sXT1cIidUTERfVFJBTlNMQVRFLlRBUkdFVF9ERVNDUklQVElPTicgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgPC9wPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZy1jb250YWluZXIgdGFyZ2V0QWN0aW9ucz5cclxuICAgIDxkaXYgY2xhc3M9XCJ0bGQtdHJhbnNsYXRlLXRhcmdldC1mb290ZXIgYmFzaWMtcGFkZGluZ1wiICpuZ0lmPVwic2hvd1N1Z2dlc3Rpb25zIHx8IHNob3dQcm9ncmVzc0luZGljYXRvclwiPlxyXG4gICAgICA8dGxkLXRyYW5zbGF0ZS1zdWdnZXN0ICpuZ0lmPVwic2hvd1N1Z2dlc3Rpb25zXCIgW3N5c3RlbUlkXT1cInN5c3RlbUlkXCIgW3RhcmdldF09XCJ0YXJnZXRQYXJhZ3JhcGhzXCJcclxuICAgICAgICBbc291cmNlXT1cInNvdXJjZVBhcmFncmFwaHNcIj5cclxuICAgICAgPC90bGQtdHJhbnNsYXRlLXN1Z2dlc3Q+XHJcbiAgICAgIDxwcm9ncmVzcy1pbmRpY2F0b3IgKG9uQ2xvc2UpPVwiY2xvc2VQcm9ncmVzc0luZGljYXRvcigpXCIgKm5nSWY9XCJzaG93UHJvZ3Jlc3NJbmRpY2F0b3JcIj48L3Byb2dyZXNzLWluZGljYXRvcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L3RsZC1zb3VyY2UtYW5kLXRhcmdldC13cmFwcGVyPlxyXG5cclxuXHJcbjwhLS0gdGVtcGxhdGVzIHVzZWQgZm9yIGVsc2UgYmxvY2tzIGluIHRhcmdldCBjb250YWluZXIgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjdHJhbnNsYXRlZFRleHRCbG9jaz5cclxuICA8ZGl2IFtjbGFzcy50cmFuc2xhdGVkLXNvdXJjZS1vdmVyZmxvd109XCJ0YXJnZXRXcmFwcGVyT3ZlcmZsb3dcIiBjbGFzcz1cInRyYW5zbGF0ZWQtc291cmNlXCIgW2NsYXNzLnNlbGVjdGFibGUtc2VudGVuY2VdPVwic2hvd1N1Z2dlc3Rpb25zXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXVybFRvVHJhbnNsYXRlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YXJnZXQtd3JhcHBlci1hY3Rpb24tYnV0dG9uc1wiPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWRcIiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJ0bGQtY29weS10cmFuc2xhdGlvblwiIChjbGljayk9XCJjb3B5KClcIlxyXG4gICAgICAgICAgbWF0VG9vbHRpcD1cInt7J1RPT0xUSVBTLkNPUFknIHwgdHJhbnNsYXRlfX1cIiBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNvcHlNZXNzYWdlSWRcIlxyXG4gICAgICAgICAgKGtleWRvd24uVGFiKT1cInN3aXRjaEZvY3VzRnJvbUNvcHkoJGV2ZW50KVwiIFthdHRyLklkXT1cImNvcHlCdXR0b25JZFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidBUklBX0xBQkVMUy5DT1BZJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICBjb250ZW50X2NvcHlcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkIHx8IHRyYW5zbGF0aW9uRXJyb3JcIiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJ0bGQtcmVmcmVzaC10cmFuc2xhdGlvblwiIChjbGljayk9XCJyZWZyZXNoKClcIlxyXG4gICAgICAgICAgbWF0VG9vbHRpcD1cInt7J1RPT0xUSVBTLlJFRlJFU0gnIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuUkVGUkVTSCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgcmVmcmVzaFxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDx0bGQtdGV4dC10by1zcGVlY2ggKm5nSWY9XCJ0ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5ncyAmJiBmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWRcIiBbc2V0dGluZ3NdPVwidGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3NcIj5cclxuICAgICAgICA8L3RsZC10ZXh0LXRvLXNwZWVjaD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHBhcmFncmFwaCBvZiB0YXJnZXRQYXJhZ3JhcGhzXCI+XHJcbiAgICAgICAgPHRsZC1oaWdobGlnaHQtdHJlZSBbaGlnaGxpZ2h0XT1cImhpZ2hsaWdodFwiIFt0cmVlXT1cInBhcmFncmFwaFwiIFtzZWxlY3RTZW50ZW5jZV09XCJzaG93U3VnZ2VzdGlvbnNcIj5cclxuICAgICAgICA8L3RsZC1oaWdobGlnaHQtdHJlZT5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkXCIgY2xhc3M9XCJkaWN0aW9uYXJ5LXdyYXBwZXJcIj5cclxuICAgICAgICA8dGxkLWRpY3Rpb25hcnkgW2RpY3Rpb25hcnldPVwiZGljdGlvbmFyeUVudHJ5XCI+PC90bGQtZGljdGlvbmFyeT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgKm5nSWY9XCJ1cmxUb1RyYW5zbGF0ZVwiIGNsYXNzPVwidGFyZ2V0LXVybC1jb250YWluZXJcIj5cclxuICAgICAgPGEgW2F0dHIuaHJlZl09XCJ0cmFuc2xhdGVVcmxSZWRpcmVjdFwiIHRhcmdldD1cIl9ibGFua1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBjbGFzcz1cImdvLXRvLXdlYnRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIHt7dXJsVG9UcmFuc2xhdGV9fVxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBjb2xvcj1cImFjY2VudFwiIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidBUklBX0xBQkVMUy5PUEVOX0lOX05FVydcIj5cclxuICAgICAgICAgIG9wZW5faW5fbmV3XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2E+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19