UNPKG

@shikshalokam/sl-questionnaire

Version:
148 lines 26.7 kB
import { Component, Input } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "../services/translate.service"; import * as i2 from "../services/utils.service"; import * as i3 from "@angular/common"; export class AttachmentComponent { constructor(translate, utils) { this.translate = translate; this.utils = utils; } ngOnInit() { this.files = this.translate['frmelmnts'].lbl?.files; } basicUpload(event) { const files = event.target.files; let sizeMB = +(files[0].size / 1000 / 1000).toFixed(4); if (sizeMB > 20) { this.fileLimitCross(); return; } this.formData = new FormData(); Array.from(files).forEach((f) => this.formData.append('file', f)); event.target.value = null; this.preSignedUrl(this.getFileNames(this.formData)); } fileLimitCross() { const alertMeta = { size: 'tiny', bodyType: 'text', data: this.translate['frmelmnts'].lbl.fileLimitCross20, buttonClass: 'single-btn', acceptText: this.translate['frmelmnts'].btn.ok, cancelText: null, }; this.utils.alert(alertMeta); } getFileNames(formData) { let files = []; formData.forEach((element) => { files.push(element.name); }); return files; } preSignedUrl(files) { let payload = {}; payload['ref'] = 'survey'; payload['request'] = {}; payload['request'][this.data.submissionId] = { files: files, }; this.utils.getPreSingedUrls(payload).subscribe((imageData) => { const presignedUrlData = imageData['result'][this.data.submissionId].files[0]; this.formData.append('url', presignedUrlData.url); this.utils.cloudStorageUpload(this.formData).subscribe((success) => { if (success.status === 200) { const obj = { name: this.getFileNames(this.formData)[0], url: presignedUrlData.url.split('?')[0], }; for (const key of Object.keys(presignedUrlData.payload)) { obj[key] = presignedUrlData['payload'][key]; } this.data.files.push(obj); const alertMeta = { size: 'tiny', bodyType: 'text', data: this.translate['frmelmnts'].lbl.evidenceUploaded, buttonClass: 'single-btn', acceptText: this.translate['frmelmnts'].btn.ok, cancelText: null, type: 'uploaded', }; this.utils.alert(alertMeta); } else { this.utils.error(this.translate['frmelmnts'].message.unableToUpload); } }, (error) => { this.utils.error(this.translate['frmelmnts'].message.unableToUpload); }); }, (error) => { console.log(error); }); } extension(name) { return name.split('.').pop(); } openFile(file) { window.open(file.url, '_blank'); } async deleteAttachment(fileIndex) { const alertMeta = { size: 'mini', bodyType: 'text', data: this.translate['frmelmnts'].lbl.confirmEvidenceDelete, buttonClass: 'double-btn', acceptText: this.translate['frmelmnts'].btn.yes, cancelText: this.translate['frmelmnts'].btn.no, }; const accepted = await this.utils.alert(alertMeta); if (!accepted) { return; } this.data.files.splice(fileIndex, 1); } async onAddApproval(file) { let html = ` ${this.translate['frmelmnts'].lbl.evidence_content_policy}<a href='/term-of-use.html' target="_blank">${this.translate['frmelmnts'].lbl.evidence_content_policy_label}</a> .${this.translate['frmelmnts'].lbl.uploadevidencecontent} `; const alertMeta = { size: 'tiny', bodyType: 'checkbox', data: html, buttonClass: 'double-btn', acceptText: this.translate['frmelmnts'].btn.upload, cancelText: this.translate['frmelmnts'].btn.donotupload, }; let returnData = await this.utils.alert(alertMeta); if (returnData == false) { this.notAccepted(); return; } if (returnData == true) { file.click(); } } notAccepted() { const alertMeta = { size: 'tiny', bodyType: 'text', data: this.translate['frmelmnts'].lbl.uploadTermsRejected, buttonClass: 'single-btn', acceptText: this.translate['frmelmnts'].btn.ok, cancelText: null, type: 'notAccepted', }; this.utils.alert(alertMeta); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AttachmentComponent, deps: [{ token: i1.SlTranslateService }, { token: i2.SlUtilsService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AttachmentComponent, selector: "sl-attachment", inputs: { data: "data" }, ngImport: i0, template: "<label for=\"file-upload\" class=\"custom-file-upload\"></label>\n<input\n id=\"file-upload\"\n type=\"file\"\n #file\n (change)=\"basicUpload($event)\"\n/>\n<div class=\"d-flex\">\n <div class=\"bs-1 attachment\" (click)=\"onAddApproval(file)\">\n <i class=\"plus icon\"></i>\n <div class=\"files\">{{files}}</div>\n </div>\n <div\n *ngFor=\"let item of data.files; let i = index\"\n (click)=\"openFile(item)\"\n class=\"area\"\n >\n <a\n class=\"remove-image\"\n (click)=\"$event.stopPropagation(); deleteAttachment(i)\"\n >&#215;</a\n >\n <div [ngSwitch]=\"extension(item.name)\">\n <div *ngSwitchCase = \"'png'\" class=\"mx-10\">\n <i class=\"file image outline icon\"></i>\n </div>\n <div *ngSwitchCase = \"'jpg'\" class=\"mx-10\">\n <i class=\"file image outline icon\"></i>\n </div>\n <div *ngSwitchCase = \"'jpeg'\" class=\"mx-10\">\n <i class=\"file image outline icon\"></i>\n </div>\n <div *ngSwitchCase = \"'pdf'\" class=\"mx-10\">\n <i class=\"file pdf outline icon\"></i>\n </div>\n <div *ngSwitchCase = \"'mp4'\" class=\"mx-10\">\n <i class=\"file video outline icon\"></i>\n </div>\n <div *ngSwitchCase = \"'mp3'\" class=\"mx-10\">\n <i class=\"file audio outline icon\"></i>\n </div>\n <div *ngSwitchDefault class=\"mx-10\">\n <i class=\"file alternate outline icon\"></i>\n </div>\n </div>\n </div>\n</div>", styles: ["input[type=file]{display:none}.area{position:relative}.area a{display:inline}.area i{font-size:40px}.remove-image{display:none;position:absolute;top:-10px;right:2px;border-radius:10em;padding:0 7px;text-decoration:none;font:620 9px/12px sans-serif;background:#555;border:3px solid #fff;color:#fff!important;box-shadow:0 2px 6px #00000080,inset 0 2px 4px #0000004d;text-shadow:0 1px 2px rgba(0,0,0,.5);transition:background .5s}.remove-image:hover{background:#e54e4e;padding:0 7px;top:-11px;right:2px}.remove-image:active{background:#e54e4e;top:-10px;right:2px}.bs-1{background-color:gray}.files{font-size:.8rem}.attachment{width:10%;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:.5rem;padding:.8rem;background:#a9a9a9;font-size:.5rem;border-radius:.1rem!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AttachmentComponent, decorators: [{ type: Component, args: [{ selector: 'sl-attachment', template: "<label for=\"file-upload\" class=\"custom-file-upload\"></label>\n<input\n id=\"file-upload\"\n type=\"file\"\n #file\n (change)=\"basicUpload($event)\"\n/>\n<div class=\"d-flex\">\n <div class=\"bs-1 attachment\" (click)=\"onAddApproval(file)\">\n <i class=\"plus icon\"></i>\n <div class=\"files\">{{files}}</div>\n </div>\n <div\n *ngFor=\"let item of data.files; let i = index\"\n (click)=\"openFile(item)\"\n class=\"area\"\n >\n <a\n class=\"remove-image\"\n (click)=\"$event.stopPropagation(); deleteAttachment(i)\"\n >&#215;</a\n >\n <div [ngSwitch]=\"extension(item.name)\">\n <div *ngSwitchCase = \"'png'\" class=\"mx-10\">\n <i class=\"file image outline icon\"></i>\n </div>\n <div *ngSwitchCase = \"'jpg'\" class=\"mx-10\">\n <i class=\"file image outline icon\"></i>\n </div>\n <div *ngSwitchCase = \"'jpeg'\" class=\"mx-10\">\n <i class=\"file image outline icon\"></i>\n </div>\n <div *ngSwitchCase = \"'pdf'\" class=\"mx-10\">\n <i class=\"file pdf outline icon\"></i>\n </div>\n <div *ngSwitchCase = \"'mp4'\" class=\"mx-10\">\n <i class=\"file video outline icon\"></i>\n </div>\n <div *ngSwitchCase = \"'mp3'\" class=\"mx-10\">\n <i class=\"file audio outline icon\"></i>\n </div>\n <div *ngSwitchDefault class=\"mx-10\">\n <i class=\"file alternate outline icon\"></i>\n </div>\n </div>\n </div>\n</div>", styles: ["input[type=file]{display:none}.area{position:relative}.area a{display:inline}.area i{font-size:40px}.remove-image{display:none;position:absolute;top:-10px;right:2px;border-radius:10em;padding:0 7px;text-decoration:none;font:620 9px/12px sans-serif;background:#555;border:3px solid #fff;color:#fff!important;box-shadow:0 2px 6px #00000080,inset 0 2px 4px #0000004d;text-shadow:0 1px 2px rgba(0,0,0,.5);transition:background .5s}.remove-image:hover{background:#e54e4e;padding:0 7px;top:-11px;right:2px}.remove-image:active{background:#e54e4e;top:-10px;right:2px}.bs-1{background-color:gray}.files{font-size:.8rem}.attachment{width:10%;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:.5rem;padding:.8rem;background:#a9a9a9;font-size:.5rem;border-radius:.1rem!important}\n"] }] }], ctorParameters: function () { return [{ type: i1.SlTranslateService }, { type: i2.SlUtilsService }]; }, propDecorators: { data: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbC1xdWVzdGlvbm5haXJlL3NyYy9saWIvYXR0YWNobWVudC9hdHRhY2htZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NsLXF1ZXN0aW9ubmFpcmUvc3JjL2xpYi9hdHRhY2htZW50L2F0dGFjaG1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDOzs7OztBQVVoRixNQUFNLE9BQU8sbUJBQW1CO0lBSTlCLFlBQ1UsU0FBNkIsRUFDN0IsS0FBcUI7UUFEckIsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUFDN0IsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7SUFDNUIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQztJQUN0RCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUs7UUFDZixNQUFNLEtBQUssR0FBYSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMzQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksTUFBTSxHQUFHLEVBQUUsRUFBRTtZQUNmLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENB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QUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXO1NBQ3hELENBQUM7UUFDRixJQUFJLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELElBQUksVUFBVSxJQUFJLEtBQUssRUFBRTtZQUN2QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsT0FBTztTQUNSO1FBQ0QsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLFNBQVMsR0FBYztZQUMzQixJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUI7WUFDekQsV0FBVyxFQUFFLFlBQVk7WUFDekIsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDOUMsVUFBVSxFQUFFLElBQUk7WUFDaEIsSUFBSSxFQUFFLGFBQWE7U0FDcEIsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7K0dBM0pVLG1CQUFtQjttR0FBbkIsbUJBQW1CLCtFQ1ZoQyw0NkNBOENNOzs0RkRwQ08sbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGVBQWU7c0lBS2hCLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbGVydE1ldGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2FsZXJ0LnR5cGUnO1xuaW1wb3J0IHsgU2xUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2xVdGlsc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91dGlscy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2wtYXR0YWNobWVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdHRhY2htZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXR0YWNobWVudC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgZGF0YTtcbiAgZmlsZXM6c3RyaW5nO1xuICBmb3JtRGF0YTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFNsVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHV0aWxzOiBTbFV0aWxzU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKXtcbiAgICB0aGlzLmZpbGVzID0gdGhpcy50cmFuc2xhdGVbJ2ZybWVsbW50cyddLmxibD8uZmlsZXM7XG4gIH1cblxuICBiYXNpY1VwbG9hZChldmVudCkge1xuICAgIGNvbnN0IGZpbGVzOiBGaWxlTGlzdCA9IGV2ZW50LnRhcmdldC5maWxlcztcbiAgICBsZXQgc2l6ZU1CID0gKyhmaWxlc1swXS5zaXplIC8gMTAwMCAvIDEwMDApLnRvRml4ZWQoNCk7XG4gICAgaWYgKHNpemVNQiA+IDIwKSB7XG4gICAgICB0aGlzLmZpbGVMaW1pdENyb3NzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBBcnJheS5mcm9tKGZpbGVzKS5mb3JFYWNoKChmKSA9PiB0aGlzLmZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGYpKTtcbiAgICBldmVudC50YXJnZXQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMucHJlU2lnbmVkVXJsKHRoaXMuZ2V0RmlsZU5hbWVzKHRoaXMuZm9ybURhdGEpKTtcbiAgfVxuXG4gIGZpbGVMaW1pdENyb3NzKCkge1xuICAgIGNvbnN0IGFsZXJ0TWV0YTogQWxlcnRNZXRhID0ge1xuICAgICAgc2l6ZTogJ3RpbnknLFxuICAgICAgYm9keVR5cGU6ICd0ZXh0JyxcbiAgICAgIGRhdGE6IHRoaXMudHJhbnNsYXRlWydmcm1lbG1udHMnXS5sYmwuZmlsZUxpbWl0Q3Jvc3MyMCxcbiAgICAgIGJ1dHRvbkNsYXNzOiAnc2luZ2xlLWJ0bicsXG4gICAgICBhY2NlcHRUZXh0OiB0aGlzLnRyYW5zbGF0ZVsnZnJtZWxtbnRzJ10uYnRuLm9rLFxuICAgICAgY2FuY2VsVGV4dDogbnVsbCxcbiAgICB9O1xuICAgIHRoaXMudXRpbHMuYWxlcnQoYWxlcnRNZXRhKTtcbiAgfVxuXG4gIGdldEZpbGVOYW1lcyhmb3JtRGF0YSkge1xuICAgIGxldCBmaWxlcyA9IFtdO1xuICAgIGZvcm1EYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGZpbGVzLnB1c2goZWxlbWVudC5uYW1lKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlsZXM7XG4gIH1cblxuICBwcmVTaWduZWRVcmwoZmlsZXMpIHtcbiAgICBsZXQgcGF5bG9hZCA9IHt9O1xuICAgIHBheWxvYWRbJ3JlZiddID0gJ3N1cnZleSc7XG4gICAgcGF5bG9hZFsncmVxdWVzdCddID0ge307XG4gICAgcGF5bG9hZFsncmVxdWVzdCddW3RoaXMuZGF0YS5zdWJtaXNzaW9uSWRdID0ge1xuICAgICAgZmlsZXM6IGZpbGVzLFxuICAgIH07XG4gICAgdGhpcy51dGlscy5nZXRQcmVTaW5nZWRVcmxzKHBheWxvYWQpLnN1YnNjcmliZShcbiAgICAgIChpbWFnZURhdGEpID0+IHtcbiAgICAgICAgY29uc3QgcHJlc2lnbmVkVXJsRGF0YSA9XG4gICAgICAgICAgaW1hZ2VEYXRhWydyZXN1bHQnXVt0aGlzLmRhdGEuc3VibWlzc2lvbklkXS5maWxlc1swXTtcbiAgICAgICAgdGhpcy5mb3JtRGF0YS5hcHBlbmQoJ3VybCcsIHByZXNpZ25lZFVybERhdGEudXJsKTtcbiAgICAgICAgdGhpcy51dGlscy5jbG91ZFN0b3JhZ2VVcGxvYWQodGhpcy5mb3JtRGF0YSkuc3Vic2NyaWJlKFxuICAgICAgICAgIChzdWNjZXNzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChzdWNjZXNzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdldEZpbGVOYW1lcyh0aGlzLmZvcm1EYXRhKVswXSxcbiAgICAgICAgICAgICAgICB1cmw6IHByZXNpZ25lZFVybERhdGEudXJsLnNwbGl0KCc/JylbMF0sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByZXNpZ25lZFVybERhdGEucGF5bG9hZCkpIHtcbiAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHByZXNpZ25lZFVybERhdGFbJ3BheWxvYWQnXVtrZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuZGF0YS5maWxlcy5wdXNoKG9iaik7XG4gICAgICAgICAgICAgIGNvbnN0IGFsZXJ0TWV0YTogQWxlcnRNZXRhID0ge1xuICAgICAgICAgICAgICAgIHNpemU6ICd0aW55JyxcbiAgICAgICAgICAgICAgICBib2R5VHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMudHJhbnNsYXRlWydmcm1lbG1udHMnXS5sYmwuZXZpZGVuY2VVcGxvYWRlZCxcbiAgICAgICAgICAgICAgICBidXR0b25DbGFzczogJ3NpbmdsZS1idG4nLFxuICAgICAgICAgICAgICAgIGFjY2VwdFRleHQ6IHRoaXMudHJhbnNsYXRlWydmcm1lbG1udHMnXS5idG4ub2ssXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogbnVsbCxcbiAgICAgICAgICAgICAgICB0eXBlOiAndXBsb2FkZWQnLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB0aGlzLnV0aWxzLmFsZXJ0KGFsZXJ0TWV0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnV0aWxzLmVycm9yKFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlWydmcm1lbG1udHMnXS5tZXNzYWdlLnVuYWJsZVRvVXBsb2FkXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXRpbHMuZXJyb3IoXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlWydmcm1lbG1udHMnXS5tZXNzYWdlLnVuYWJsZVRvVXBsb2FkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBleHRlbnNpb24obmFtZSkge1xuICAgIHJldHVybiBuYW1lLnNwbGl0KCcuJykucG9wKCk7XG4gIH1cbiAgb3BlbkZpbGUoZmlsZSkge1xuICAgIHdpbmRvdy5vcGVuKGZpbGUudXJsLCAnX2JsYW5rJyk7XG4gIH1cblxuICBhc3luYyBkZWxldGVBdHRhY2htZW50KGZpbGVJbmRleCkge1xuICAgIGNvbnN0IGFsZXJ0TWV0YTogQWxlcnRNZXRhID0ge1xuICAgICAgc2l6ZTogJ21pbmknLFxuICAgICAgYm9keVR5cGU6ICd0ZXh0JyxcbiAgICAgIGRhdGE6IHRoaXMudHJhbnNsYXRlWydmcm1lbG1udHMnXS5sYmwuY29uZmlybUV2aWRlbmNlRGVsZXRlLFxuICAgICAgYnV0dG9uQ2xhc3M6ICdkb3VibGUtYnRuJyxcbiAgICAgIGFjY2VwdFRleHQ6IHRoaXMudHJhbnNsYXRlWydmcm1lbG1udHMnXS5idG4ueWVzLFxuICAgICAgY2FuY2VsVGV4dDogdGhpcy50cmFuc2xhdGVbJ2ZybWVsbW50cyddLmJ0bi5ubyxcbiAgICB9O1xuICAgIGNvbnN0IGFjY2VwdGVkID0gYXdhaXQgdGhpcy51dGlscy5hbGVydChhbGVydE1ldGEpO1xuXG4gICAgaWYgKCFhY2NlcHRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGEuZmlsZXMuc3BsaWNlKGZpbGVJbmRleCwgMSk7XG4gIH1cblxuICBhc3luYyBvbkFkZEFwcHJvdmFsKGZpbGUpIHtcbiAgICBsZXQgaHRtbCA9IGBcbiAgICAke3RoaXMudHJhbnNsYXRlWydmcm1lbG1udHMnXS5sYmwuZXZpZGVuY2VfY29udGVudF9wb2xpY3l9PGEgaHJlZj0nL3Rlcm0tb2YtdXNlLmh0bWwnIHRhcmdldD1cIl9ibGFua1wiPiR7dGhpcy50cmFuc2xhdGVbJ2ZybWVsbW50cyddLmxibC5ldmlkZW5jZV9jb250ZW50X3BvbGljeV9sYWJlbH08L2E+IC4ke3RoaXMudHJhbnNsYXRlWydmcm1lbG1udHMnXS5sYmwudXBsb2FkZXZpZGVuY2Vjb250ZW50fVxuICAgIGA7XG4gICAgY29uc3QgYWxlcnRNZXRhOiBBbGVydE1ldGEgPSB7XG4gICAgICBzaXplOiAndGlueScsXG4gICAgICBib2R5VHlwZTogJ2NoZWNrYm94JyxcbiAgICAgIGRhdGE6IGh0bWwsXG4gICAgICBidXR0b25DbGFzczogJ2RvdWJsZS1idG4nLFxuICAgICAgYWNjZXB0VGV4dDogdGhpcy50cmFuc2xhdGVbJ2ZybWVsbW50cyddLmJ0bi51cGxvYWQsXG4gICAgICBjYW5jZWxUZXh0OiB0aGlzLnRyYW5zbGF0ZVsnZnJtZWxtbnRzJ10uYnRuLmRvbm90dXBsb2FkLFxuICAgIH07XG4gICAgbGV0IHJldHVybkRhdGEgPSBhd2FpdCB0aGlzLnV0aWxzLmFsZXJ0KGFsZXJ0TWV0YSk7XG4gICAgaWYgKHJldHVybkRhdGEgPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubm90QWNjZXB0ZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJldHVybkRhdGEgPT0gdHJ1ZSkge1xuICAgICAgZmlsZS5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIG5vdEFjY2VwdGVkKCk6IHZvaWQge1xuICAgIGNvbnN0IGFsZXJ0TWV0YTogQWxlcnRNZXRhID0ge1xuICAgICAgc2l6ZTogJ3RpbnknLFxuICAgICAgYm9keVR5cGU6ICd0ZXh0JyxcbiAgICAgIGRhdGE6IHRoaXMudHJhbnNsYXRlWydmcm1lbG1udHMnXS5sYmwudXBsb2FkVGVybXNSZWplY3RlZCxcbiAgICAgIGJ1dHRvbkNsYXNzOiAnc2luZ2xlLWJ0bicsXG4gICAgICBhY2NlcHRUZXh0OiB0aGlzLnRyYW5zbGF0ZVsnZnJtZWxtbnRzJ10uYnRuLm9rLFxuICAgICAgY2FuY2VsVGV4dDogbnVsbCxcbiAgICAgIHR5cGU6ICdub3RBY2NlcHRlZCcsXG4gICAgfTtcbiAgICB0aGlzLnV0aWxzLmFsZXJ0KGFsZXJ0TWV0YSk7XG4gIH1cbn1cbiIsIjxsYWJlbCBmb3I9XCJmaWxlLXVwbG9hZFwiIGNsYXNzPVwiY3VzdG9tLWZpbGUtdXBsb2FkXCI+PC9sYWJlbD5cbjxpbnB1dFxuICBpZD1cImZpbGUtdXBsb2FkXCJcbiAgdHlwZT1cImZpbGVcIlxuICAjZmlsZVxuICAoY2hhbmdlKT1cImJhc2ljVXBsb2FkKCRldmVudClcIlxuLz5cbjxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgPGRpdiBjbGFzcz1cImJzLTEgYXR0YWNobWVudFwiIChjbGljayk9XCJvbkFkZEFwcHJvdmFsKGZpbGUpXCI+XG4gICAgPGkgY2xhc3M9XCJwbHVzIGljb25cIj48L2k+XG4gICAgPGRpdiBjbGFzcz1cImZpbGVzXCI+e3tmaWxlc319PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YS5maWxlczsgbGV0IGkgPSBpbmRleFwiXG4gICAgKGNsaWNrKT1cIm9wZW5GaWxlKGl0ZW0pXCJcbiAgICBjbGFzcz1cImFyZWFcIlxuICA+XG4gICAgPGFcbiAgICAgIGNsYXNzPVwicmVtb3ZlLWltYWdlXCJcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRlbGV0ZUF0dGFjaG1lbnQoaSlcIlxuICAgICAgPiYjMjE1OzwvYVxuICAgID5cbiAgICA8ZGl2IFtuZ1N3aXRjaF09XCJleHRlbnNpb24oaXRlbS5uYW1lKVwiPlxuICAgIDxkaXYgKm5nU3dpdGNoQ2FzZSA9IFwiJ3BuZydcIiBjbGFzcz1cIm14LTEwXCI+XG4gICAgICA8aSBjbGFzcz1cImZpbGUgaW1hZ2Ugb3V0bGluZSBpY29uXCI+PC9pPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nU3dpdGNoQ2FzZSA9IFwiJ2pwZydcIiBjbGFzcz1cIm14LTEwXCI+XG4gICAgICA8aSBjbGFzcz1cImZpbGUgaW1hZ2Ugb3V0bGluZSBpY29uXCI+PC9pPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nU3dpdGNoQ2FzZSA9IFwiJ2pwZWcnXCIgY2xhc3M9XCJteC0xMFwiPlxuICAgICAgPGkgY2xhc3M9XCJmaWxlIGltYWdlIG91dGxpbmUgaWNvblwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ1N3aXRjaENhc2UgPSBcIidwZGYnXCIgY2xhc3M9XCJteC0xMFwiPlxuICAgICAgPGkgY2xhc3M9XCJmaWxlIHBkZiBvdXRsaW5lIGljb25cIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdTd2l0Y2hDYXNlID0gXCInbXA0J1wiIGNsYXNzPVwibXgtMTBcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmlsZSB2aWRlbyBvdXRsaW5lIGljb25cIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdTd2l0Y2hDYXNlID0gXCInbXAzJ1wiIGNsYXNzPVwibXgtMTBcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmlsZSBhdWRpbyBvdXRsaW5lIGljb25cIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0IGNsYXNzPVwibXgtMTBcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmlsZSBhbHRlcm5hdGUgb3V0bGluZSBpY29uXCI+PC9pPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=