@tsi-developpement/tsi-shared-ui 1.10.21 → 1.10.23

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.
@@ -37,11 +37,13 @@ export class TsiFileManagerComponent extends TsiInputBase {
37
37
  this.showFileUpload = true;
38
38
  this.showPreviewButton = true;
39
39
  this.contentHeight = '20rem';
40
+ this.showRemoveButton = false;
40
41
  this.onSelectFileManager = new EventEmitter();
41
42
  this.onClear = new EventEmitter();
42
43
  this.onRemove = new EventEmitter();
43
44
  this.inputFieldChange = new EventEmitter();
44
45
  this.fileNameChange = new EventEmitter();
46
+ this.onDeleteFile = new EventEmitter();
45
47
  this.imageUrl = null;
46
48
  this.fileSizeError = '';
47
49
  /** Set when the inline preview reports a media load error → fall back to the download card. */
@@ -136,6 +138,16 @@ export class TsiFileManagerComponent extends TsiInputBase {
136
138
  this.inputFieldChange.emit(this.inputField);
137
139
  this.fileNameChange.emit(this.fileName);
138
140
  }
141
+ removeFile() {
142
+ this.isDirty = true;
143
+ this.inputField = null;
144
+ this.fileName = '';
145
+ this.imageUrl = null;
146
+ this.resetPreview();
147
+ this.inputFieldChange.emit(this.inputField);
148
+ this.fileNameChange.emit(this.fileName);
149
+ this.onDeleteFile.emit();
150
+ }
139
151
  resetPreview() {
140
152
  this.mimeType = undefined;
141
153
  this.mediaLoadError = false;
@@ -188,11 +200,11 @@ export class TsiFileManagerComponent extends TsiInputBase {
188
200
  return this.mimeType || getMimeTypeFromExtension(getFileExtension(this.fileName));
189
201
  }
190
202
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiFileManagerComponent, deps: [{ token: i1.LocalizePipe }, { token: i2.TsiNotificationService }, { token: i0.ChangeDetectorRef }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Component }); }
191
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiFileManagerComponent, selector: "Tsi-File-Manager", inputs: { fileName: "fileName", name: "name", id: "id", accept: "accept", maxFileSize: "maxFileSize", multiple: "multiple", exploreOnDownload: "exploreOnDownload", showUploadButton: "showUploadButton", showCancelButton: "showCancelButton", showDownloadButton: "showDownloadButton", chooseIcon: "chooseIcon", chooseLabel: "chooseLabel", showSelectButton: "showSelectButton", showFileUpload: "showFileUpload", showPreviewButton: "showPreviewButton", contentHeight: "contentHeight" }, outputs: { onSelectFileManager: "onSelectFileManager", onClear: "onClear", onRemove: "onRemove", inputFieldChange: "inputFieldChange", fileNameChange: "fileNameChange" }, usesInheritance: true, ngImport: i0, template: "<!-- <p-fileUpload class=\"file-manager\" #fileUpload [name]=\"name\" [id]=\"id\" [accept]=\"accept\" [maxFileSize]=\"maxFileSize\"\r\n [multiple]=\"multiple\" [showUploadButton]=\"showUploadButton\" [showCancelButton]=\"showCancelButton\"\r\n chooseIcon=\"pi pi-upload\" chooseLabel=\" \" (onSelect)=\"onFileSelect($event)\" (onClear)=\"onFileClear()\"\r\n (onRemove)=\"onFileRemove($event)\" class=\"custom-file-upload\" icon=\"pi pi-upload\">\r\n</p-fileUpload>\r\n\r\n<BR>\r\n<div *ngIf=\"showDownloadButton\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\" (click)=\"downloadFile()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n</div> -->\r\n<div class=\"{{validationStatusCssClass}}\">\r\n\r\n <p-fileUpload class=\"file-manager custom-file-upload \" \r\n #fileUpload\r\n [name]=\"name\"\r\n [id]=\"id\" \r\n [accept]=\"accept\" \r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [showUploadButton]=\"showUploadButton\" \r\n [showCancelButton]=\"showCancelButton\"\r\n chooseIcon=\"pi pi-upload\"\r\n chooseLabel= \"Upload\" \r\n (onSelect)=\"onFileSelect($event)\"\r\n (onClear)=\"onFileClear()\"\r\n (onRemove)=\"onFileRemove($event)\"\r\n >\r\n \r\n \r\n \r\n <!-- <ng-template pTemplate=\"content\">\r\n <button type=\"button\" pButton icon=\"pi pi-upload\" class=\"ml-4 h-2rem w-full text-center\">\r\n </button>\r\n </ng-template> -->\r\n <ng-template pTemplate=\"content\" let-files>\r\n <div class=\"tsi-file-content\" [style.height]=\"contentHeight\">\r\n <div *ngIf=\"inputField\" class=\"tsi-file-preview\">\r\n <Tsi-File-Preview [content]=\"inputField\" [fileName]=\"fileName\" [mimeType]=\"mimeType\"\r\n mediaMaxWidth=\"15rem\" (previewError)=\"onPreviewError()\">\r\n </Tsi-File-Preview>\r\n </div>\r\n\r\n <div class=\"mt-2\" *ngIf=\"fileName != undefined && fileName != null\">\r\n <p>{{ 'tsi_file_manager_file_name' | localize }}: {{ fileName }}</p>\r\n <p>{{ 'tsi_file_manager_file_extension' | localize }}: {{ getFileExtension(fileName) }}</p>\r\n </div>\r\n\r\n <div class=\"pb-2 pt-2\" *ngIf=\"showPreviewButton && canPreview\">\r\n <button pButton type=\"button\" icon=\"pi pi-eye\"\r\n [label]=\"'tsi_file_manager_preview' | localize\"\r\n (click)=\"openPreview()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"inputField && (isUnsupported || mediaLoadError)\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\"\r\n [label]=\"'tsi_file_manager_download' | localize\"\r\n (click)=\"downloadFile()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"fileName != undefined && showDownloadButton && !isUnsupported && !mediaLoadError\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\" (click)=\"downloadFile()\" class=\" h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n </p-fileUpload>\r\n \r\n</div>", styles: [".ui-fileupload-choose{display:flex;align-items:center;justify-content:center;padding:.5rem;width:10rem;height:40px}.ui-fileupload-choose .ui-button-text{display:none}.ui-fileupload-choose .pi{font-size:2rem}.p-fileupload-choose input{display:none!important}:host ::ng-deep .p-fileupload-choose[disabled]{display:none!important}.tsi-file-content{display:flex;flex-direction:column;overflow:auto;box-sizing:border-box;width:100%}.tsi-file-preview{display:flex;justify-content:center;align-items:center;width:100%;flex:1 1 auto;min-height:0}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i7.TsiFilePreviewComponent, selector: "Tsi-File-Preview", inputs: ["content", "fileName", "mimeType", "mediaMaxWidth"], outputs: ["previewError"] }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }], encapsulation: i0.ViewEncapsulation.None }); }
203
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiFileManagerComponent, selector: "Tsi-File-Manager", inputs: { fileName: "fileName", name: "name", id: "id", accept: "accept", maxFileSize: "maxFileSize", multiple: "multiple", exploreOnDownload: "exploreOnDownload", showUploadButton: "showUploadButton", showCancelButton: "showCancelButton", showDownloadButton: "showDownloadButton", chooseIcon: "chooseIcon", chooseLabel: "chooseLabel", showSelectButton: "showSelectButton", showFileUpload: "showFileUpload", showPreviewButton: "showPreviewButton", contentHeight: "contentHeight", showRemoveButton: "showRemoveButton" }, outputs: { onSelectFileManager: "onSelectFileManager", onClear: "onClear", onRemove: "onRemove", inputFieldChange: "inputFieldChange", fileNameChange: "fileNameChange", onDeleteFile: "onDeleteFile" }, usesInheritance: true, ngImport: i0, template: "<div class=\"{{validationStatusCssClass}}\">\r\n\r\n <p-fileUpload class=\"file-manager custom-file-upload \" \r\n #fileUpload\r\n [name]=\"name\"\r\n [id]=\"id\" \r\n [accept]=\"accept\" \r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [showUploadButton]=\"showUploadButton\" \r\n [showCancelButton]=\"showCancelButton\"\r\n chooseIcon=\"pi pi-upload\"\r\n chooseLabel= \"Upload\" \r\n (onSelect)=\"onFileSelect($event)\"\r\n (onClear)=\"onFileClear()\"\r\n (onRemove)=\"onFileRemove($event)\"\r\n >\r\n \r\n \r\n \r\n <!-- <ng-template pTemplate=\"content\">\r\n <button type=\"button\" pButton icon=\"pi pi-upload\" class=\"ml-4 h-2rem w-full text-center\">\r\n </button>\r\n </ng-template> -->\r\n <ng-template pTemplate=\"content\" let-files>\r\n <div class=\"tsi-file-content\" [style.height]=\"contentHeight\">\r\n <div *ngIf=\"inputField\" class=\"tsi-file-preview\">\r\n <Tsi-File-Preview [content]=\"inputField\" [fileName]=\"fileName\" [mimeType]=\"mimeType\"\r\n mediaMaxWidth=\"15rem\" (previewError)=\"onPreviewError()\">\r\n </Tsi-File-Preview>\r\n </div>\r\n\r\n <div class=\"mt-2\" *ngIf=\"fileName != undefined && fileName != null\">\r\n <p>{{ 'tsi_file_manager_file_name' | localize }}: {{ fileName }}</p>\r\n <p>{{ 'tsi_file_manager_file_extension' | localize }}: {{ getFileExtension(fileName) }}</p>\r\n </div>\r\n\r\n <div class=\"pb-2 pt-2\" *ngIf=\"showPreviewButton && canPreview\">\r\n <button pButton type=\"button\" icon=\"pi pi-eye\"\r\n [label]=\"'tsi_file_manager_preview' | localize\"\r\n (click)=\"openPreview()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"inputField && (isUnsupported || mediaLoadError)\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\"\r\n [label]=\"'tsi_file_manager_download' | localize\"\r\n (click)=\"downloadFile()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"fileName != undefined && showDownloadButton && !isUnsupported && !mediaLoadError\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\" (click)=\"downloadFile()\" class=\" h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div class=\"pt-2\" *ngIf=\"showRemoveButton && inputField && !disabled\">\r\n <button pButton type=\"button\" icon=\"pi pi-trash\"\r\n [label]=\"'tsi_file_manager_remove_file' | localize\"\r\n (click)=\"removeFile()\" class=\"p-button-danger h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n </p-fileUpload>\r\n \r\n</div>", styles: [".ui-fileupload-choose{display:flex;align-items:center;justify-content:center;padding:.5rem;width:10rem;height:40px}.ui-fileupload-choose .ui-button-text{display:none}.ui-fileupload-choose .pi{font-size:2rem}.p-fileupload-choose input{display:none!important}:host ::ng-deep .p-fileupload-choose[disabled]{display:none!important}.tsi-file-content{display:flex;flex-direction:column;overflow:auto;box-sizing:border-box;width:100%}.tsi-file-preview{display:flex;justify-content:center;align-items:center;width:100%;flex:1 1 auto;min-height:0}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i7.TsiFilePreviewComponent, selector: "Tsi-File-Preview", inputs: ["content", "fileName", "mimeType", "mediaMaxWidth"], outputs: ["previewError"] }, { kind: "pipe", type: i1.LocalizePipe, name: "localize" }], encapsulation: i0.ViewEncapsulation.None }); }
192
204
  }
193
205
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiFileManagerComponent, decorators: [{
194
206
  type: Component,
195
- args: [{ selector: 'Tsi-File-Manager', encapsulation: ViewEncapsulation.None, template: "<!-- <p-fileUpload class=\"file-manager\" #fileUpload [name]=\"name\" [id]=\"id\" [accept]=\"accept\" [maxFileSize]=\"maxFileSize\"\r\n [multiple]=\"multiple\" [showUploadButton]=\"showUploadButton\" [showCancelButton]=\"showCancelButton\"\r\n chooseIcon=\"pi pi-upload\" chooseLabel=\" \" (onSelect)=\"onFileSelect($event)\" (onClear)=\"onFileClear()\"\r\n (onRemove)=\"onFileRemove($event)\" class=\"custom-file-upload\" icon=\"pi pi-upload\">\r\n</p-fileUpload>\r\n\r\n<BR>\r\n<div *ngIf=\"showDownloadButton\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\" (click)=\"downloadFile()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n</div> -->\r\n<div class=\"{{validationStatusCssClass}}\">\r\n\r\n <p-fileUpload class=\"file-manager custom-file-upload \" \r\n #fileUpload\r\n [name]=\"name\"\r\n [id]=\"id\" \r\n [accept]=\"accept\" \r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [showUploadButton]=\"showUploadButton\" \r\n [showCancelButton]=\"showCancelButton\"\r\n chooseIcon=\"pi pi-upload\"\r\n chooseLabel= \"Upload\" \r\n (onSelect)=\"onFileSelect($event)\"\r\n (onClear)=\"onFileClear()\"\r\n (onRemove)=\"onFileRemove($event)\"\r\n >\r\n \r\n \r\n \r\n <!-- <ng-template pTemplate=\"content\">\r\n <button type=\"button\" pButton icon=\"pi pi-upload\" class=\"ml-4 h-2rem w-full text-center\">\r\n </button>\r\n </ng-template> -->\r\n <ng-template pTemplate=\"content\" let-files>\r\n <div class=\"tsi-file-content\" [style.height]=\"contentHeight\">\r\n <div *ngIf=\"inputField\" class=\"tsi-file-preview\">\r\n <Tsi-File-Preview [content]=\"inputField\" [fileName]=\"fileName\" [mimeType]=\"mimeType\"\r\n mediaMaxWidth=\"15rem\" (previewError)=\"onPreviewError()\">\r\n </Tsi-File-Preview>\r\n </div>\r\n\r\n <div class=\"mt-2\" *ngIf=\"fileName != undefined && fileName != null\">\r\n <p>{{ 'tsi_file_manager_file_name' | localize }}: {{ fileName }}</p>\r\n <p>{{ 'tsi_file_manager_file_extension' | localize }}: {{ getFileExtension(fileName) }}</p>\r\n </div>\r\n\r\n <div class=\"pb-2 pt-2\" *ngIf=\"showPreviewButton && canPreview\">\r\n <button pButton type=\"button\" icon=\"pi pi-eye\"\r\n [label]=\"'tsi_file_manager_preview' | localize\"\r\n (click)=\"openPreview()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"inputField && (isUnsupported || mediaLoadError)\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\"\r\n [label]=\"'tsi_file_manager_download' | localize\"\r\n (click)=\"downloadFile()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"fileName != undefined && showDownloadButton && !isUnsupported && !mediaLoadError\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\" (click)=\"downloadFile()\" class=\" h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n </p-fileUpload>\r\n \r\n</div>", styles: [".ui-fileupload-choose{display:flex;align-items:center;justify-content:center;padding:.5rem;width:10rem;height:40px}.ui-fileupload-choose .ui-button-text{display:none}.ui-fileupload-choose .pi{font-size:2rem}.p-fileupload-choose input{display:none!important}:host ::ng-deep .p-fileupload-choose[disabled]{display:none!important}.tsi-file-content{display:flex;flex-direction:column;overflow:auto;box-sizing:border-box;width:100%}.tsi-file-preview{display:flex;justify-content:center;align-items:center;width:100%;flex:1 1 auto;min-height:0}\n"] }]
207
+ args: [{ selector: 'Tsi-File-Manager', encapsulation: ViewEncapsulation.None, template: "<div class=\"{{validationStatusCssClass}}\">\r\n\r\n <p-fileUpload class=\"file-manager custom-file-upload \" \r\n #fileUpload\r\n [name]=\"name\"\r\n [id]=\"id\" \r\n [accept]=\"accept\" \r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [showUploadButton]=\"showUploadButton\" \r\n [showCancelButton]=\"showCancelButton\"\r\n chooseIcon=\"pi pi-upload\"\r\n chooseLabel= \"Upload\" \r\n (onSelect)=\"onFileSelect($event)\"\r\n (onClear)=\"onFileClear()\"\r\n (onRemove)=\"onFileRemove($event)\"\r\n >\r\n \r\n \r\n \r\n <!-- <ng-template pTemplate=\"content\">\r\n <button type=\"button\" pButton icon=\"pi pi-upload\" class=\"ml-4 h-2rem w-full text-center\">\r\n </button>\r\n </ng-template> -->\r\n <ng-template pTemplate=\"content\" let-files>\r\n <div class=\"tsi-file-content\" [style.height]=\"contentHeight\">\r\n <div *ngIf=\"inputField\" class=\"tsi-file-preview\">\r\n <Tsi-File-Preview [content]=\"inputField\" [fileName]=\"fileName\" [mimeType]=\"mimeType\"\r\n mediaMaxWidth=\"15rem\" (previewError)=\"onPreviewError()\">\r\n </Tsi-File-Preview>\r\n </div>\r\n\r\n <div class=\"mt-2\" *ngIf=\"fileName != undefined && fileName != null\">\r\n <p>{{ 'tsi_file_manager_file_name' | localize }}: {{ fileName }}</p>\r\n <p>{{ 'tsi_file_manager_file_extension' | localize }}: {{ getFileExtension(fileName) }}</p>\r\n </div>\r\n\r\n <div class=\"pb-2 pt-2\" *ngIf=\"showPreviewButton && canPreview\">\r\n <button pButton type=\"button\" icon=\"pi pi-eye\"\r\n [label]=\"'tsi_file_manager_preview' | localize\"\r\n (click)=\"openPreview()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"inputField && (isUnsupported || mediaLoadError)\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\"\r\n [label]=\"'tsi_file_manager_download' | localize\"\r\n (click)=\"downloadFile()\" class=\"h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"fileName != undefined && showDownloadButton && !isUnsupported && !mediaLoadError\">\r\n <button pButton type=\"button\" icon=\"pi pi-download\" (click)=\"downloadFile()\" class=\" h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n\r\n <div class=\"pt-2\" *ngIf=\"showRemoveButton && inputField && !disabled\">\r\n <button pButton type=\"button\" icon=\"pi pi-trash\"\r\n [label]=\"'tsi_file_manager_remove_file' | localize\"\r\n (click)=\"removeFile()\" class=\"p-button-danger h-2rem w-full text-center\">\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n </p-fileUpload>\r\n \r\n</div>", styles: [".ui-fileupload-choose{display:flex;align-items:center;justify-content:center;padding:.5rem;width:10rem;height:40px}.ui-fileupload-choose .ui-button-text{display:none}.ui-fileupload-choose .pi{font-size:2rem}.p-fileupload-choose input{display:none!important}:host ::ng-deep .p-fileupload-choose[disabled]{display:none!important}.tsi-file-content{display:flex;flex-direction:column;overflow:auto;box-sizing:border-box;width:100%}.tsi-file-preview{display:flex;justify-content:center;align-items:center;width:100%;flex:1 1 auto;min-height:0}\n"] }]
196
208
  }], ctorParameters: () => [{ type: i1.LocalizePipe }, { type: i2.TsiNotificationService }, { type: i0.ChangeDetectorRef }, { type: i0.EnvironmentInjector }], propDecorators: { fileName: [{
197
209
  type: Input
198
210
  }], name: [{
@@ -225,6 +237,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
225
237
  type: Input
226
238
  }], contentHeight: [{
227
239
  type: Input
240
+ }], showRemoveButton: [{
241
+ type: Input
228
242
  }], onSelectFileManager: [{
229
243
  type: Output
230
244
  }], onClear: [{
@@ -235,5 +249,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
235
249
  type: Output
236
250
  }], fileNameChange: [{
237
251
  type: Output
252
+ }], onDeleteFile: [{
253
+ type: Output
238
254
  }] } });
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZpbGUtbWFuYWdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy90c2ktZmlsZS1tYW5hZ2VyL3RzaS1maWxlLW1hbmFnZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvdHNpLWZpbGUtbWFuYWdlci90c2ktZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQTBDLE1BQU0sZUFBZSxDQUFDO0FBRWxJLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUd6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7OztBQVFwSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsWUFBcUQ7SUF1Q2hHOzs7O1FBSUk7SUFFSixZQUNVLFFBQXNCLEVBQ3RCLG1CQUEyQyxFQUMzQyxpQkFBb0MsRUFDcEMsU0FBOEI7UUFFdEMsS0FBSyxFQUFFLENBQUM7UUFMQSxhQUFRLEdBQVIsUUFBUSxDQUFjO1FBQ3RCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBd0I7UUFDM0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxjQUFTLEdBQVQsU0FBUyxDQUFx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O2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdG9yUmVmLCBFbnZpcm9ubWVudEluamVjdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gXCJwcmltZW5nL2R5bmFtaWNkaWFsb2dcIjtcclxuaW1wb3J0IHsgVHNpSW5wdXRCYXNlIH0gZnJvbSBcIi4uLy4uLy4uL3RzaS1iYXNlL3RzaS1pbnB1dC1iYXNlL3RzaS1pbnB1dC1iYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tIFwiLi4vLi4vLi4vcGlwZXMvbG9jYWxpemUucGlwZVwiO1xyXG5pbXBvcnQgeyBUc2lOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbm90aWZpY2F0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTW9kYWxTaXplRW51bSB9IGZyb20gXCIuLi8uLi8uLi9lbnVtcy9tb2RhbC1zaXplLWVudW1cIjtcclxuaW1wb3J0IHsgb3BlblRzaUZpbGVQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL2Z1bmN0aW9ucy9tb2RhbC1vcGVuLmZ1bmN0aW9uXCI7XHJcbmltcG9ydCB7IGdldEZpbGVFeHRlbnNpb24sIGdldE1lZGlhQ2F0ZWdvcnksIGdldE1pbWVUeXBlRnJvbUV4dGVuc2lvbiB9IGZyb20gXCIuLi8uLi8uLi9mdW5jdGlvbnMvZmlsZS1wcmV2aWV3LnV0aWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnVHNpLUZpbGUtTWFuYWdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1maWxlLW1hbmFnZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1maWxlLW1hbmFnZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUc2lGaWxlTWFuYWdlckNvbXBvbmVudCBleHRlbmRzIFRzaUlucHV0QmFzZTxzdHJpbmcgfCBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB8IG51bGw+IHtcclxuICAvLyBASW5wdXQoKSBpbnB1dEZpZWxkOiBzdHJpbmcgfCBBcnJheUJ1ZmZlciB8dW5kZWZpbmVkIHwgbnVsbDtcclxuICBASW5wdXQoKSBmaWxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgYWNjZXB0OiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBtYXhGaWxlU2l6ZTogbnVtYmVyID0gMTA0ODU3NjA7XHJcbiAgQElucHV0KCkgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBleHBsb3JlT25Eb3dubG9hZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dVcGxvYWRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93Q2FuY2VsQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0Rvd25sb2FkQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY2hvb3NlSWNvbjogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgY2hvb3NlTGFiZWw6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHNob3dTZWxlY3RCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dGaWxlVXBsb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93UHJldmlld0J1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgY29udGVudEhlaWdodDogc3RyaW5nID0gJzIwcmVtJztcclxuXHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0RmlsZU1hbmFnZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgb25DbGVhciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb25SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaW5wdXRGaWVsZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmaWxlTmFtZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuXHJcbiAgaW1hZ2VVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBmaWxlRXh0ZW5zaW9uPzogc3RyaW5nO1xyXG5cclxuICBmaWxlU2l6ZUVycm9yOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFJlYWwgTUlNRSB0eXBlIGNhcHR1cmVkIGZyb20gdGhlIHNlbGVjdGVkIEZpbGUgKHdoZW4gYXZhaWxhYmxlKS4gKi9cclxuICBtaW1lVHlwZT86IHN0cmluZztcclxuXHJcbiAgLyoqIFNldCB3aGVuIHRoZSBpbmxpbmUgcHJldmlldyByZXBvcnRzIGEgbWVkaWEgbG9hZCBlcnJvciDihpIgZmFsbCBiYWNrIHRvIHRoZSBkb3dubG9hZCBjYXJkLiAqL1xyXG4gIG1lZGlhTG9hZEVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX3ByZXZpZXdSZWY/OiBEeW5hbWljRGlhbG9nUmVmO1xyXG4gIC8qIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLnNob3dTZWxlY3RCdXR0b24gJiYgdGhpcy5maWxlVXBsb2FkSW5wdXQpIHtcclxuICAgICAgdGhpcy5maWxlVXBsb2FkSW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgfVxyXG4gIH0gKi9cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxvY2FsaXplOiBMb2NhbGl6ZVBpcGUsXHJcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRydWUgd2hlbiB0aGUgc2VsZWN0ZWQgZmlsZSBjYW4gYmUgcmVuZGVyZWQgaW4gdGhlIGJyb3dzZXIgKGltYWdlL3ZpZGVvL2F1ZGlvL3BkZikuICovXHJcbiAgZ2V0IGNhblByZXZpZXcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLmlucHV0RmllbGQgJiYgZ2V0TWVkaWFDYXRlZ29yeSh0aGlzLmZpbGVOYW1lKSAhPT0gJ3Vuc3VwcG9ydGVkJztcclxuICB9XHJcblxyXG4gIC8qKiBUcnVlIHdoZW4gdGhlIHNlbGVjdGVkIGZpbGUgY2Fubm90IGJlIHByZXZpZXdlZCBpbmxpbmUuICovXHJcbiAgZ2V0IGlzVW5zdXBwb3J0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZ2V0TWVkaWFDYXRlZ29yeSh0aGlzLmZpbGVOYW1lKSA9PT0gJ3Vuc3VwcG9ydGVkJztcclxuICB9XHJcblxyXG4gIC8qKiBDYWxsZWQgd2hlbiB0aGUgaW5saW5lIHByZXZpZXcgY29tcG9uZW50IHJlcG9ydHMgYSBtZWRpYSBsb2FkIGZhaWx1cmUuICovXHJcbiAgb25QcmV2aWV3RXJyb3IoKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lZGlhTG9hZEVycm9yID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKiBPcGVuIHRoZSBzZWxlY3RlZCBmaWxlIGluIGEgbWF4aW1pemFibGUgbW9kYWwgdmlhIHRoZSBzaGFyZWQgRGlhbG9nU2VydmljZS4gKi9cclxuICBhc3luYyBvcGVuUHJldmlldygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5jYW5QcmV2aWV3KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgIGhlYWRlcjogdGhpcy5maWxlTmFtZSxcclxuICAgICAgZGF0YTogeyBjb250ZW50OiB0aGlzLmlucHV0RmllbGQsIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLCBtaW1lVHlwZTogdGhpcy5taW1lVHlwZSB9LFxyXG4gICAgICB3aWR0aDogTW9kYWxTaXplRW51bS5NZWRpdW0ud2lkdGgsXHJcbiAgICAgIGhlaWdodDogTW9kYWxTaXplRW51bS5NZWRpdW0uaGVpZ2h0LFxyXG4gICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgIGNvbnRlbnRTdHlsZTogeyBvdmVyZmxvdzogJ2F1dG8nIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fcHJldmlld1JlZiA9IGF3YWl0IG9wZW5Uc2lGaWxlUHJldmlld0NvbXBvbmVudCh0aGlzLl9pbmplY3RvciwgY29uZik7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBvbkZpbGVTZWxlY3QoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZmlsZXM6IEZpbGVbXSA9IGV2ZW50LmZpbGVzO1xyXG4gICAgLy8gdGhpcy5jb252ZXJ0RmlsZVRvQmFzZTY0KGZpbGVzWzBdKS50aGVuKChiYXNlNjRTdHJpbmc6IHN0cmluZykgPT4ge1xyXG4gICAgLy8gdGhpcy5pbnB1dEZpZWxkID0gYmFzZTY0U3RyaW5nO1xyXG4gICAgLy8gfSk7XHJcbiAgICB0aGlzLm1lZGlhTG9hZEVycm9yID0gZmFsc2U7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgdGhpcy5pbnB1dEZpZWxkID0gKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKS5zcGxpdCgnLCcpWzFdO1xyXG4gICAgfTtcclxuICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiB7XHJcbiAgICB9O1xyXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZXNbMF0pO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IGZpbGVzWzBdLm5hbWU7XHJcbiAgICAvLyBQcmVmZXIgdGhlIGJyb3dzZXItZGV0ZWN0ZWQgTUlNRSB0eXBlOyBmYWxsIGJhY2sgdG8gdGhlIGV4dGVuc2lvbiBtYXAuXHJcbiAgICB0aGlzLm1pbWVUeXBlID0gZmlsZXNbMF0udHlwZSB8fCBnZXRNaW1lVHlwZUZyb21FeHRlbnNpb24oZ2V0RmlsZUV4dGVuc2lvbihmaWxlc1swXS5uYW1lKSk7XHJcbiAgICBjb25zdCBmaWxlTmFtZTogc3RyaW5nID0gdGhpcy5maWxlTmFtZSE7XHJcblxyXG4gICAgaWYgKGZpbGVzWzBdLnNpemUgPiB0aGlzLm1heEZpbGVTaXplKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuKGBcclxuICAgICAgICAke3RoaXMubG9jYWxpemUudHJhbnNmb3JtKFwidHNpX2ZpbGVfdXBsb2FkX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoX2RldGFpbF8xXCIpfSBcclxuICAgICAgICAkeyhmaWxlc1swXS5zaXplIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKX0gXHJcbiAgICAgICAgJHt0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShcInRzaV9maWxlX3VwbG9hZF9hdXRvX3ZhbGlkYXRpb25fbWF4X2xlbmd0aF9kZXRhaWxfMlwiKX1cclxuICAgICAgICAkeyh0aGlzLm1heEZpbGVTaXplIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgyKX0gTW9gLFxyXG4gICAgICAgIHRoaXMubG9jYWxpemUudHJhbnNmb3JtKFwidHNpX2ZpbGVfdXBsb2FkX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoX3RpdGxlXCIpKVxyXG5cclxuICAgICAgdGhpcy5pc0RpcnR5ID0gdGhpcy5pbnB1dEZpZWxkICE9IHVuZGVmaW5lZCAmJiB0aGlzLmlucHV0RmllbGQgIT0gbnVsbFxyXG4gICAgICB0aGlzLmlucHV0RmllbGQgPSB1bmRlZmluZWRcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy90aGlzLmZpbGVOYW1lID0gZmlsZXMubWFwKChmaWxlOiBhbnkpID0+IGZpbGUubmFtZSkuam9pbignLCAnKTtcclxuICAgICAgdGhpcy5vblNlbGVjdEZpbGVNYW5hZ2VyLmVtaXQoeyBldmVudCwgZmlsZXMsIGlucHV0RmllbGQ6IHRoaXMuaW5wdXRGaWVsZCwgZmlsZU5hbWU6IGZpbGVOYW1lIH0pO1xyXG4gICAgICB0aGlzLmlucHV0RmllbGRDaGFuZ2UuZW1pdCh0aGlzLmlucHV0RmllbGQpO1xyXG4gICAgICB0aGlzLmZpbGVOYW1lQ2hhbmdlLmVtaXQodGhpcy5maWxlTmFtZSk7XHJcbiAgICB9LCAyMDApO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICBvbkZpbGVDbGVhcigpIHtcclxuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcclxuICAgIHRoaXMuaW5wdXRGaWVsZCA9IG51bGw7XHJcbiAgICB0aGlzLmZpbGVOYW1lID0gJyc7XHJcbiAgICB0aGlzLmltYWdlVXJsID0gbnVsbDtcclxuICAgIHRoaXMucmVzZXRQcmV2aWV3KCk7XHJcbiAgICB0aGlzLmlucHV0RmllbGRDaGFuZ2UuZW1pdCh0aGlzLmlucHV0RmllbGQpO1xyXG4gICAgdGhpcy5maWxlTmFtZUNoYW5nZS5lbWl0KHRoaXMuZmlsZU5hbWUpO1xyXG4gICAgdGhpcy5vbkNsZWFyLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG9uRmlsZVJlbW92ZShldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBmaWxlID0gZXZlbnQuZmlsZTtcclxuICAgIC8vdGhpcy5pbnB1dEZpZWxkID0gdGhpcy5pbnB1dEZpZWxkLmZpbHRlcigoZjogYW55KSA9PiBmICE9PSBmaWxlKTtcclxuICAgIC8vdGhpcy5maWxlTmFtZSA9IHRoaXMuaW5wdXRGaWVsZC5tYXAoKGY6IGFueSkgPT4gZi5uYW1lKS5qb2luKCcsICcpO1xyXG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxyXG4gICAgdGhpcy5pbnB1dEZpZWxkID0gbnVsbDtcclxuICAgIHRoaXMuZmlsZU5hbWUgPSAnJztcclxuICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xyXG4gICAgdGhpcy5yZXNldFByZXZpZXcoKTtcclxuICAgIHRoaXMub25SZW1vdmUuZW1pdChmaWxlKTtcclxuICAgIHRoaXMuaW5wdXRGaWVsZENoYW5nZS5lbWl0KHRoaXMuaW5wdXRGaWVsZCk7XHJcbiAgICB0aGlzLmZpbGVOYW1lQ2hhbmdlLmVtaXQodGhpcy5maWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0UHJldmlldygpIHtcclxuICAgIHRoaXMubWltZVR5cGUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLm1lZGlhTG9hZEVycm9yID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0RmlsZVRvQmFzZTY0KGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYmFzZTY0U3RyaW5nID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7IC8vIENvbnZlcnNpb24gZXhwbGljaXRlIGVuIHN0cmluZ1xyXG4gICAgICAgIHJlc29sdmUoYmFzZTY0U3RyaW5nKTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZEZpbGUoKSB7XHJcbiAgICBpZiAoIXRoaXMuaW5wdXRGaWVsZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmxvYiA9IHRoaXMuYmFzZTY0VG9CbG9iKHRoaXMuaW5wdXRGaWVsZCBhcyBzdHJpbmcsIHRoaXMucmVzb2x2ZWRNaW1lVHlwZSk7XHJcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHJcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcclxuICAgIGEuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgIGEuaHJlZiA9IHVybDtcclxuICAgIGEuZG93bmxvYWQgPSB0aGlzLmZpbGVOYW1lITtcclxuICAgIGEuY2xpY2soKTtcclxuXHJcbiAgICAvL3dpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgfVxyXG5cclxuICAvKiogRGVjb2RlIGEgYmFzZTY0IHN0cmluZyBpbnRvIGEgQmxvYiB0YWdnZWQgd2l0aCB0aGUgZ2l2ZW4gTUlNRSB0eXBlLiAqL1xyXG4gIHByaXZhdGUgYmFzZTY0VG9CbG9iKGJhc2U2NDogc3RyaW5nLCBtaW1lVHlwZTogc3RyaW5nKTogQmxvYiB7XHJcbiAgICBjb25zdCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYmFzZTY0KTtcclxuICAgIGNvbnN0IGJ5dGVOdW1iZXJzID0gbmV3IEFycmF5KGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGJ5dGVOdW1iZXJzW2ldID0gYnl0ZUNoYXJhY3RlcnMuY2hhckNvZGVBdChpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVOdW1iZXJzKTtcclxuICAgIHJldHVybiBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiBtaW1lVHlwZSB9KTtcclxuICB9XHJcblxyXG4gIGFycmF5QnVmZmVyVG9CYXNlNjQoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICBsZXQgYmluYXJ5ID0gJyc7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmJ5dGVMZW5ndGg7IGkrKykge1xyXG4gICAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ2RhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwnICsgYnRvYShiaW5hcnkpO1xyXG4gIH1cclxuXHJcbiAgLyoqIE1JTUUgdHlwZSB1c2VkIGZvciBkb3dubG9hZCDigJQgY2FwdHVyZWQgZnJvbSB0aGUgRmlsZSwgZWxzZSBkZXJpdmVkIGZyb20gdGhlIGV4dGVuc2lvbi4gKi9cclxuICBnZXQgcmVzb2x2ZWRNaW1lVHlwZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubWltZVR5cGUgfHwgZ2V0TWltZVR5cGVGcm9tRXh0ZW5zaW9uKGdldEZpbGVFeHRlbnNpb24odGhpcy5maWxlTmFtZSkpO1xyXG4gIH1cclxufSIsIjwhLS0gPHAtZmlsZVVwbG9hZCBjbGFzcz1cImZpbGUtbWFuYWdlclwiICNmaWxlVXBsb2FkIFtuYW1lXT1cIm5hbWVcIiBbaWRdPVwiaWRcIiBbYWNjZXB0XT1cImFjY2VwdFwiIFttYXhGaWxlU2l6ZV09XCJtYXhGaWxlU2l6ZVwiXHJcbiAgW211bHRpcGxlXT1cIm11bHRpcGxlXCIgW3Nob3dVcGxvYWRCdXR0b25dPVwic2hvd1VwbG9hZEJ1dHRvblwiIFtzaG93Q2FuY2VsQnV0dG9uXT1cInNob3dDYW5jZWxCdXR0b25cIlxyXG4gIGNob29zZUljb249XCJwaSBwaS11cGxvYWRcIiBjaG9vc2VMYWJlbD1cIiBcIiAob25TZWxlY3QpPVwib25GaWxlU2VsZWN0KCRldmVudClcIiAob25DbGVhcik9XCJvbkZpbGVDbGVhcigpXCJcclxuICAob25SZW1vdmUpPVwib25GaWxlUmVtb3ZlKCRldmVudClcIiBjbGFzcz1cImN1c3RvbS1maWxlLXVwbG9hZFwiIGljb249XCJwaSBwaS11cGxvYWRcIj5cclxuPC9wLWZpbGVVcGxvYWQ+XHJcblxyXG48QlI+XHJcbjxkaXYgKm5nSWY9XCJzaG93RG93bmxvYWRCdXR0b25cIj5cclxuICA8YnV0dG9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1kb3dubG9hZFwiIChjbGljayk9XCJkb3dubG9hZEZpbGUoKVwiIGNsYXNzPVwiaC0ycmVtIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj4gLS0+XHJcbjxkaXYgY2xhc3M9XCJ7e3ZhbGlkYXRpb25TdGF0dXNDc3NDbGFzc319XCI+XHJcblxyXG4gIDxwLWZpbGVVcGxvYWQgY2xhc3M9XCJmaWxlLW1hbmFnZXIgY3VzdG9tLWZpbGUtdXBsb2FkIFwiIFxyXG4gICAgI2ZpbGVVcGxvYWRcclxuICAgIFtuYW1lXT1cIm5hbWVcIlxyXG4gICAgW2lkXT1cImlkXCIgXHJcbiAgICBbYWNjZXB0XT1cImFjY2VwdFwiIFxyXG4gICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICBbc2hvd1VwbG9hZEJ1dHRvbl09XCJzaG93VXBsb2FkQnV0dG9uXCIgXHJcbiAgICBbc2hvd0NhbmNlbEJ1dHRvbl09XCJzaG93Q2FuY2VsQnV0dG9uXCJcclxuICAgIGNob29zZUljb249XCJwaSBwaS11cGxvYWRcIlxyXG4gICAgY2hvb3NlTGFiZWw9IFwiVXBsb2FkXCIgXHJcbiAgICAob25TZWxlY3QpPVwib25GaWxlU2VsZWN0KCRldmVudClcIlxyXG4gICAgKG9uQ2xlYXIpPVwib25GaWxlQ2xlYXIoKVwiXHJcbiAgICAob25SZW1vdmUpPVwib25GaWxlUmVtb3ZlKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgXHJcbiAgICBcclxuICAgIFxyXG4gICAgPCEtLSA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS11cGxvYWRcIiBjbGFzcz1cIm1sLTQgaC0ycmVtIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+IC0tPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIiBsZXQtZmlsZXM+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0c2ktZmlsZS1jb250ZW50XCIgW3N0eWxlLmhlaWdodF09XCJjb250ZW50SGVpZ2h0XCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpbnB1dEZpZWxkXCIgY2xhc3M9XCJ0c2ktZmlsZS1wcmV2aWV3XCI+XHJcbiAgICAgICAgPFRzaS1GaWxlLVByZXZpZXcgW2NvbnRlbnRdPVwiaW5wdXRGaWVsZFwiIFtmaWxlTmFtZV09XCJmaWxlTmFtZVwiIFttaW1lVHlwZV09XCJtaW1lVHlwZVwiXHJcbiAgICAgICAgICBtZWRpYU1heFdpZHRoPVwiMTVyZW1cIiAocHJldmlld0Vycm9yKT1cIm9uUHJldmlld0Vycm9yKClcIj5cclxuICAgICAgICA8L1RzaS1GaWxlLVByZXZpZXc+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImZpbGVOYW1lICE9IHVuZGVmaW5lZCAmJiBmaWxlTmFtZSAhPSBudWxsXCI+XHJcbiAgICAgICAgPHA+e3sgJ3RzaV9maWxlX21hbmFnZXJfZmlsZV9uYW1lJyB8IGxvY2FsaXplIH19OiB7eyBmaWxlTmFtZSB9fTwvcD5cclxuICAgICAgICA8cD57eyAndHNpX2ZpbGVfbWFuYWdlcl9maWxlX2V4dGVuc2lvbicgfCBsb2NhbGl6ZSB9fToge3sgZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZSkgfX08L3A+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInBiLTIgcHQtMlwiICpuZ0lmPVwic2hvd1ByZXZpZXdCdXR0b24gJiYgY2FuUHJldmlld1wiPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWV5ZVwiXHJcbiAgICAgICAgICBbbGFiZWxdPVwiJ3RzaV9maWxlX21hbmFnZXJfcHJldmlldycgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlblByZXZpZXcoKVwiIGNsYXNzPVwiaC0ycmVtIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpbnB1dEZpZWxkICYmIChpc1Vuc3VwcG9ydGVkIHx8IG1lZGlhTG9hZEVycm9yKVwiPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWRvd25sb2FkXCJcclxuICAgICAgICAgIFtsYWJlbF09XCIndHNpX2ZpbGVfbWFuYWdlcl9kb3dubG9hZCcgfCBsb2NhbGl6ZVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRGaWxlKClcIiBjbGFzcz1cImgtMnJlbSB3LWZ1bGwgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZmlsZU5hbWUgIT0gdW5kZWZpbmVkICYmIHNob3dEb3dubG9hZEJ1dHRvbiAmJiAhaXNVbnN1cHBvcnRlZCAmJiAhbWVkaWFMb2FkRXJyb3JcIj5cclxuICAgICAgICA8YnV0dG9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1kb3dubG9hZFwiIChjbGljayk9XCJkb3dubG9hZEZpbGUoKVwiIGNsYXNzPVwiIGgtMnJlbSB3LWZ1bGwgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIFxyXG4gIDwvcC1maWxlVXBsb2FkPlxyXG4gIFxyXG48L2Rpdj4iXX0=
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZpbGUtbWFuYWdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy90c2ktZmlsZS1tYW5hZ2VyL3RzaS1maWxlLW1hbmFnZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvdHNpLWZpbGUtbWFuYWdlci90c2ktZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQTBDLE1BQU0sZUFBZSxDQUFDO0FBRWxJLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUd6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7OztBQVFwSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsWUFBcUQ7SUF5Q2hHOzs7O1FBSUk7SUFFSixZQUNVLFFBQXNCLEVBQ3RCLG1CQUEyQyxFQUMzQyxpQkFBb0MsRUFDcEMsU0FBOEI7UUFFdEMsS0FBSyxFQUFFLENBQUM7UUFMQSxhQUFRLEdBQVIsUUFBUSxDQUFjO1FBQ3RCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBd0I7UUFDM0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxjQUFTLEdBQVQsU0FBUyxDQUFx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LENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDOytHQXRPVSx1QkFBdUI7bUdBQXZCLHVCQUF1QixneUJDZnBDLDR3RkFtRU07OzRGRHBETyx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0Usa0JBQWtCLGlCQUdiLGlCQUFpQixDQUFDLElBQUk7d0xBSTVCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVudmlyb25tZW50SW5qZWN0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSBcInByaW1lbmcvZHluYW1pY2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBUc2lJbnB1dEJhc2UgfSBmcm9tIFwiLi4vLi4vLi4vdHNpLWJhc2UvdHNpLWlucHV0LWJhc2UvdHNpLWlucHV0LWJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gXCIuLi8uLi8uLi9waXBlcy9sb2NhbGl6ZS5waXBlXCI7XHJcbmltcG9ydCB7IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL3RzaS1ub3RpZmljYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNb2RhbFNpemVFbnVtIH0gZnJvbSBcIi4uLy4uLy4uL2VudW1zL21vZGFsLXNpemUtZW51bVwiO1xyXG5pbXBvcnQgeyBvcGVuVHNpRmlsZVByZXZpZXdDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vZnVuY3Rpb25zL21vZGFsLW9wZW4uZnVuY3Rpb25cIjtcclxuaW1wb3J0IHsgZ2V0RmlsZUV4dGVuc2lvbiwgZ2V0TWVkaWFDYXRlZ29yeSwgZ2V0TWltZVR5cGVGcm9tRXh0ZW5zaW9uIH0gZnJvbSBcIi4uLy4uLy4uL2Z1bmN0aW9ucy9maWxlLXByZXZpZXcudXRpbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdUc2ktRmlsZS1NYW5hZ2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHNpLWZpbGUtbWFuYWdlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHNpLWZpbGUtbWFuYWdlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUZpbGVNYW5hZ2VyQ29tcG9uZW50IGV4dGVuZHMgVHNpSW5wdXRCYXNlPHN0cmluZyB8IEFycmF5QnVmZmVyIHwgdW5kZWZpbmVkIHwgbnVsbD4ge1xyXG4gIC8vIEBJbnB1dCgpIGlucHV0RmllbGQ6IHN0cmluZyB8IEFycmF5QnVmZmVyIHx1bmRlZmluZWQgfCBudWxsO1xyXG4gIEBJbnB1dCgpIGZpbGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBhY2NlcHQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIG1heEZpbGVTaXplOiBudW1iZXIgPSAxMDQ4NTc2MDtcclxuICBASW5wdXQoKSBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGV4cGxvcmVPbkRvd25sb2FkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd1VwbG9hZEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dDYW5jZWxCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93RG93bmxvYWRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBjaG9vc2VJY29uOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBjaG9vc2VMYWJlbDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgc2hvd1NlbGVjdEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0ZpbGVVcGxvYWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dQcmV2aWV3QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjb250ZW50SGVpZ2h0OiBzdHJpbmcgPSAnMjByZW0nO1xyXG4gIEBJbnB1dCgpIHNob3dSZW1vdmVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0RmlsZU1hbmFnZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgb25DbGVhciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb25SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaW5wdXRGaWVsZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmaWxlTmFtZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvbkRlbGV0ZUZpbGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG5cclxuICBpbWFnZVVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGZpbGVFeHRlbnNpb24/OiBzdHJpbmc7XHJcblxyXG4gIGZpbGVTaXplRXJyb3I6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogUmVhbCBNSU1FIHR5cGUgY2FwdHVyZWQgZnJvbSB0aGUgc2VsZWN0ZWQgRmlsZSAod2hlbiBhdmFpbGFibGUpLiAqL1xyXG4gIG1pbWVUeXBlPzogc3RyaW5nO1xyXG5cclxuICAvKiogU2V0IHdoZW4gdGhlIGlubGluZSBwcmV2aWV3IHJlcG9ydHMgYSBtZWRpYSBsb2FkIGVycm9yIOKGkiBmYWxsIGJhY2sgdG8gdGhlIGRvd25sb2FkIGNhcmQuICovXHJcbiAgbWVkaWFMb2FkRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfcHJldmlld1JlZj86IER5bmFtaWNEaWFsb2dSZWY7XHJcbiAgLyogbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd1NlbGVjdEJ1dHRvbiAmJiB0aGlzLmZpbGVVcGxvYWRJbnB1dCkge1xyXG4gICAgICB0aGlzLmZpbGVVcGxvYWRJbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICB9XHJcbiAgfSAqL1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbG9jYWxpemU6IExvY2FsaXplUGlwZSxcclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3JcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKiogVHJ1ZSB3aGVuIHRoZSBzZWxlY3RlZCBmaWxlIGNhbiBiZSByZW5kZXJlZCBpbiB0aGUgYnJvd3NlciAoaW1hZ2UvdmlkZW8vYXVkaW8vcGRmKS4gKi9cclxuICBnZXQgY2FuUHJldmlldygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMuaW5wdXRGaWVsZCAmJiBnZXRNZWRpYUNhdGVnb3J5KHRoaXMuZmlsZU5hbWUpICE9PSAndW5zdXBwb3J0ZWQnO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRydWUgd2hlbiB0aGUgc2VsZWN0ZWQgZmlsZSBjYW5ub3QgYmUgcHJldmlld2VkIGlubGluZS4gKi9cclxuICBnZXQgaXNVbnN1cHBvcnRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBnZXRNZWRpYUNhdGVnb3J5KHRoaXMuZmlsZU5hbWUpID09PSAndW5zdXBwb3J0ZWQnO1xyXG4gIH1cclxuXHJcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSBpbmxpbmUgcHJldmlldyBjb21wb25lbnQgcmVwb3J0cyBhIG1lZGlhIGxvYWQgZmFpbHVyZS4gKi9cclxuICBvblByZXZpZXdFcnJvcigpOiB2b2lkIHtcclxuICAgIHRoaXMubWVkaWFMb2FkRXJyb3IgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIE9wZW4gdGhlIHNlbGVjdGVkIGZpbGUgaW4gYSBtYXhpbWl6YWJsZSBtb2RhbCB2aWEgdGhlIHNoYXJlZCBEaWFsb2dTZXJ2aWNlLiAqL1xyXG4gIGFzeW5jIG9wZW5QcmV2aWV3KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmNhblByZXZpZXcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgaGVhZGVyOiB0aGlzLmZpbGVOYW1lLFxyXG4gICAgICBkYXRhOiB7IGNvbnRlbnQ6IHRoaXMuaW5wdXRGaWVsZCwgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsIG1pbWVUeXBlOiB0aGlzLm1pbWVUeXBlIH0sXHJcbiAgICAgIHdpZHRoOiBNb2RhbFNpemVFbnVtLk1lZGl1bS53aWR0aCxcclxuICAgICAgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLk1lZGl1bS5oZWlnaHQsXHJcbiAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgY29udGVudFN0eWxlOiB7IG92ZXJmbG93OiAnYXV0bycgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9wcmV2aWV3UmVmID0gYXdhaXQgb3BlblRzaUZpbGVQcmV2aWV3Q29tcG9uZW50KHRoaXMuX2luamVjdG9yLCBjb25mKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKTtcclxuICB9XHJcblxyXG4gIG9uRmlsZVNlbGVjdChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBmaWxlczogRmlsZVtdID0gZXZlbnQuZmlsZXM7XHJcbiAgICAvLyB0aGlzLmNvbnZlcnRGaWxlVG9CYXNlNjQoZmlsZXNbMF0pLnRoZW4oKGJhc2U2NFN0cmluZzogc3RyaW5nKSA9PiB7XHJcbiAgICAvLyB0aGlzLmlucHV0RmllbGQgPSBiYXNlNjRTdHJpbmc7XHJcbiAgICAvLyB9KTtcclxuICAgIHRoaXMubWVkaWFMb2FkRXJyb3IgPSBmYWxzZTtcclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmlucHV0RmllbGQgPSAocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpLnNwbGl0KCcsJylbMV07XHJcbiAgICB9O1xyXG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcclxuICAgIH07XHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlc1swXSk7XHJcbiAgICB0aGlzLmZpbGVOYW1lID0gZmlsZXNbMF0ubmFtZTtcclxuICAgIC8vIFByZWZlciB0aGUgYnJvd3Nlci1kZXRlY3RlZCBNSU1FIHR5cGU7IGZhbGwgYmFjayB0byB0aGUgZXh0ZW5zaW9uIG1hcC5cclxuICAgIHRoaXMubWltZVR5cGUgPSBmaWxlc1swXS50eXBlIHx8IGdldE1pbWVUeXBlRnJvbUV4dGVuc2lvbihnZXRGaWxlRXh0ZW5zaW9uKGZpbGVzWzBdLm5hbWUpKTtcclxuICAgIGNvbnN0IGZpbGVOYW1lOiBzdHJpbmcgPSB0aGlzLmZpbGVOYW1lITtcclxuXHJcbiAgICBpZiAoZmlsZXNbMF0uc2l6ZSA+IHRoaXMubWF4RmlsZVNpemUpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLndhcm4oYFxyXG4gICAgICAgICR7dGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oXCJ0c2lfZmlsZV91cGxvYWRfYXV0b192YWxpZGF0aW9uX21heF9sZW5ndGhfZGV0YWlsXzFcIil9IFxyXG4gICAgICAgICR7KGZpbGVzWzBdLnNpemUgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpfSBcclxuICAgICAgICAke3RoaXMubG9jYWxpemUudHJhbnNmb3JtKFwidHNpX2ZpbGVfdXBsb2FkX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoX2RldGFpbF8yXCIpfVxyXG4gICAgICAgICR7KHRoaXMubWF4RmlsZVNpemUgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpfSBNb2AsXHJcbiAgICAgICAgdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oXCJ0c2lfZmlsZV91cGxvYWRfYXV0b192YWxpZGF0aW9uX21heF9sZW5ndGhfdGl0bGVcIikpXHJcblxyXG4gICAgICB0aGlzLmlzRGlydHkgPSB0aGlzLmlucHV0RmllbGQgIT0gdW5kZWZpbmVkICYmIHRoaXMuaW5wdXRGaWVsZCAhPSBudWxsXHJcbiAgICAgIHRoaXMuaW5wdXRGaWVsZCA9IHVuZGVmaW5lZFxyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvL3RoaXMuZmlsZU5hbWUgPSBmaWxlcy5tYXAoKGZpbGU6IGFueSkgPT4gZmlsZS5uYW1lKS5qb2luKCcsICcpO1xyXG4gICAgICB0aGlzLm9uU2VsZWN0RmlsZU1hbmFnZXIuZW1pdCh7IGV2ZW50LCBmaWxlcywgaW5wdXRGaWVsZDogdGhpcy5pbnB1dEZpZWxkLCBmaWxlTmFtZTogZmlsZU5hbWUgfSk7XHJcbiAgICAgIHRoaXMuaW5wdXRGaWVsZENoYW5nZS5lbWl0KHRoaXMuaW5wdXRGaWVsZCk7XHJcbiAgICAgIHRoaXMuZmlsZU5hbWVDaGFuZ2UuZW1pdCh0aGlzLmZpbGVOYW1lKTtcclxuICAgIH0sIDIwMCk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIG9uRmlsZUNsZWFyKCkge1xyXG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxyXG4gICAgdGhpcy5pbnB1dEZpZWxkID0gbnVsbDtcclxuICAgIHRoaXMuZmlsZU5hbWUgPSAnJztcclxuICAgIHRoaXMuaW1hZ2VVcmwgPSBudWxsO1xyXG4gICAgdGhpcy5yZXNldFByZXZpZXcoKTtcclxuICAgIHRoaXMuaW5wdXRGaWVsZENoYW5nZS5lbWl0KHRoaXMuaW5wdXRGaWVsZCk7XHJcbiAgICB0aGlzLmZpbGVOYW1lQ2hhbmdlLmVtaXQodGhpcy5maWxlTmFtZSk7XHJcbiAgICB0aGlzLm9uQ2xlYXIuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25GaWxlUmVtb3ZlKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGZpbGUgPSBldmVudC5maWxlO1xyXG4gICAgLy90aGlzLmlucHV0RmllbGQgPSB0aGlzLmlucHV0RmllbGQuZmlsdGVyKChmOiBhbnkpID0+IGYgIT09IGZpbGUpO1xyXG4gICAgLy90aGlzLmZpbGVOYW1lID0gdGhpcy5pbnB1dEZpZWxkLm1hcCgoZjogYW55KSA9PiBmLm5hbWUpLmpvaW4oJywgJyk7XHJcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlXHJcbiAgICB0aGlzLmlucHV0RmllbGQgPSBudWxsO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9ICcnO1xyXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XHJcbiAgICB0aGlzLnJlc2V0UHJldmlldygpO1xyXG4gICAgdGhpcy5vblJlbW92ZS5lbWl0KGZpbGUpO1xyXG4gICAgdGhpcy5pbnB1dEZpZWxkQ2hhbmdlLmVtaXQodGhpcy5pbnB1dEZpZWxkKTtcclxuICAgIHRoaXMuZmlsZU5hbWVDaGFuZ2UuZW1pdCh0aGlzLmZpbGVOYW1lKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUZpbGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlXHJcbiAgICB0aGlzLmlucHV0RmllbGQgPSBudWxsO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9ICcnO1xyXG4gICAgdGhpcy5pbWFnZVVybCA9IG51bGw7XHJcbiAgICB0aGlzLnJlc2V0UHJldmlldygpO1xyXG4gICAgdGhpcy5pbnB1dEZpZWxkQ2hhbmdlLmVtaXQodGhpcy5pbnB1dEZpZWxkKTtcclxuICAgIHRoaXMuZmlsZU5hbWVDaGFuZ2UuZW1pdCh0aGlzLmZpbGVOYW1lKTtcclxuICAgIHRoaXMub25EZWxldGVGaWxlLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRQcmV2aWV3KCkge1xyXG4gICAgdGhpcy5taW1lVHlwZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMubWVkaWFMb2FkRXJyb3IgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRGaWxlVG9CYXNlNjQoZmlsZTogRmlsZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBiYXNlNjRTdHJpbmcgPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZzsgLy8gQ29udmVyc2lvbiBleHBsaWNpdGUgZW4gc3RyaW5nXHJcbiAgICAgICAgcmVzb2x2ZShiYXNlNjRTdHJpbmcpO1xyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkRmlsZSgpIHtcclxuICAgIGlmICghdGhpcy5pbnB1dEZpZWxkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBibG9iID0gdGhpcy5iYXNlNjRUb0Jsb2IodGhpcy5pbnB1dEZpZWxkIGFzIHN0cmluZywgdGhpcy5yZXNvbHZlZE1pbWVUeXBlKTtcclxuICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cclxuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xyXG4gICAgYS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgYS5ocmVmID0gdXJsO1xyXG4gICAgYS5kb3dubG9hZCA9IHRoaXMuZmlsZU5hbWUhO1xyXG4gICAgYS5jbGljaygpO1xyXG5cclxuICAgIC8vd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICB9XHJcblxyXG4gIC8qKiBEZWNvZGUgYSBiYXNlNjQgc3RyaW5nIGludG8gYSBCbG9iIHRhZ2dlZCB3aXRoIHRoZSBnaXZlbiBNSU1FIHR5cGUuICovXHJcbiAgcHJpdmF0ZSBiYXNlNjRUb0Jsb2IoYmFzZTY0OiBzdHJpbmcsIG1pbWVUeXBlOiBzdHJpbmcpOiBCbG9iIHtcclxuICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzID0gYXRvYihiYXNlNjQpO1xyXG4gICAgY29uc3QgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgYnl0ZU51bWJlcnNbaV0gPSBieXRlQ2hhcmFjdGVycy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xyXG4gICAgcmV0dXJuIG5ldyBCbG9iKFtieXRlQXJyYXldLCB7IHR5cGU6IG1pbWVUeXBlIH0pO1xyXG4gIH1cclxuXHJcbiAgYXJyYXlCdWZmZXJUb0Jhc2U2NChidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgIGxldCBiaW5hcnkgPSAnJztcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMuYnl0ZUxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiAnZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCcgKyBidG9hKGJpbmFyeSk7XHJcbiAgfVxyXG5cclxuICAvKiogTUlNRSB0eXBlIHVzZWQgZm9yIGRvd25sb2FkIOKAlCBjYXB0dXJlZCBmcm9tIHRoZSBGaWxlLCBlbHNlIGRlcml2ZWQgZnJvbSB0aGUgZXh0ZW5zaW9uLiAqL1xyXG4gIGdldCByZXNvbHZlZE1pbWVUeXBlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5taW1lVHlwZSB8fCBnZXRNaW1lVHlwZUZyb21FeHRlbnNpb24oZ2V0RmlsZUV4dGVuc2lvbih0aGlzLmZpbGVOYW1lKSk7XHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cInt7dmFsaWRhdGlvblN0YXR1c0Nzc0NsYXNzfX1cIj5cclxuXHJcbiAgPHAtZmlsZVVwbG9hZCBjbGFzcz1cImZpbGUtbWFuYWdlciBjdXN0b20tZmlsZS11cGxvYWQgXCIgXHJcbiAgICAjZmlsZVVwbG9hZFxyXG4gICAgW25hbWVdPVwibmFtZVwiXHJcbiAgICBbaWRdPVwiaWRcIiBcclxuICAgIFthY2NlcHRdPVwiYWNjZXB0XCIgXHJcbiAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxyXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgIFtzaG93VXBsb2FkQnV0dG9uXT1cInNob3dVcGxvYWRCdXR0b25cIiBcclxuICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cInNob3dDYW5jZWxCdXR0b25cIlxyXG4gICAgY2hvb3NlSWNvbj1cInBpIHBpLXVwbG9hZFwiXHJcbiAgICBjaG9vc2VMYWJlbD0gXCJVcGxvYWRcIiBcclxuICAgIChvblNlbGVjdCk9XCJvbkZpbGVTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAob25DbGVhcik9XCJvbkZpbGVDbGVhcigpXCJcclxuICAgIChvblJlbW92ZSk9XCJvbkZpbGVSZW1vdmUoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICBcclxuICAgIFxyXG4gICAgXHJcbiAgICA8IS0tIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250ZW50XCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLXVwbG9hZFwiIGNsYXNzPVwibWwtNCBoLTJyZW0gdy1mdWxsIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiIGxldC1maWxlcz5cclxuICAgICAgPGRpdiBjbGFzcz1cInRzaS1maWxlLWNvbnRlbnRcIiBbc3R5bGUuaGVpZ2h0XT1cImNvbnRlbnRIZWlnaHRcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cImlucHV0RmllbGRcIiBjbGFzcz1cInRzaS1maWxlLXByZXZpZXdcIj5cclxuICAgICAgICA8VHNpLUZpbGUtUHJldmlldyBbY29udGVudF09XCJpbnB1dEZpZWxkXCIgW2ZpbGVOYW1lXT1cImZpbGVOYW1lXCIgW21pbWVUeXBlXT1cIm1pbWVUeXBlXCJcclxuICAgICAgICAgIG1lZGlhTWF4V2lkdGg9XCIxNXJlbVwiIChwcmV2aWV3RXJyb3IpPVwib25QcmV2aWV3RXJyb3IoKVwiPlxyXG4gICAgICAgIDwvVHNpLUZpbGUtUHJldmlldz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0lmPVwiZmlsZU5hbWUgIT0gdW5kZWZpbmVkICYmIGZpbGVOYW1lICE9IG51bGxcIj5cclxuICAgICAgICA8cD57eyAndHNpX2ZpbGVfbWFuYWdlcl9maWxlX25hbWUnIHwgbG9jYWxpemUgfX06IHt7IGZpbGVOYW1lIH19PC9wPlxyXG4gICAgICAgIDxwPnt7ICd0c2lfZmlsZV9tYW5hZ2VyX2ZpbGVfZXh0ZW5zaW9uJyB8IGxvY2FsaXplIH19OiB7eyBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKSB9fTwvcD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGItMiBwdC0yXCIgKm5nSWY9XCJzaG93UHJldmlld0J1dHRvbiAmJiBjYW5QcmV2aWV3XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktZXllXCJcclxuICAgICAgICAgIFtsYWJlbF09XCIndHNpX2ZpbGVfbWFuYWdlcl9wcmV2aWV3JyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuUHJldmlldygpXCIgY2xhc3M9XCJoLTJyZW0gdy1mdWxsIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cImlucHV0RmllbGQgJiYgKGlzVW5zdXBwb3J0ZWQgfHwgbWVkaWFMb2FkRXJyb3IpXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktZG93bmxvYWRcIlxyXG4gICAgICAgICAgW2xhYmVsXT1cIid0c2lfZmlsZV9tYW5hZ2VyX2Rvd25sb2FkJyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEZpbGUoKVwiIGNsYXNzPVwiaC0ycmVtIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJmaWxlTmFtZSAhPSB1bmRlZmluZWQgJiYgc2hvd0Rvd25sb2FkQnV0dG9uICYmICFpc1Vuc3VwcG9ydGVkICYmICFtZWRpYUxvYWRFcnJvclwiPlxyXG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWRvd25sb2FkXCIgKGNsaWNrKT1cImRvd25sb2FkRmlsZSgpXCIgY2xhc3M9XCIgaC0ycmVtIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwdC0yXCIgKm5nSWY9XCJzaG93UmVtb3ZlQnV0dG9uICYmIGlucHV0RmllbGQgJiYgIWRpc2FibGVkXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiBpY29uPVwicGkgcGktdHJhc2hcIlxyXG4gICAgICAgICAgW2xhYmVsXT1cIid0c2lfZmlsZV9tYW5hZ2VyX3JlbW92ZV9maWxlJyB8IGxvY2FsaXplXCJcclxuICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWxlKClcIiBjbGFzcz1cInAtYnV0dG9uLWRhbmdlciBoLTJyZW0gdy1mdWxsIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICBcclxuICA8L3AtZmlsZVVwbG9hZD5cclxuICBcclxuPC9kaXY+Il19