modal-image-upload.component.js 28.9 KB
/**
 * @fileoverview added by tsickle
 * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
 */
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { Request } from '../_services/request.service';
import { Common } from '../_services/common.service';
import { HttpClient, HttpEventType, HttpHeaders, HttpRequest, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import { ModalDirective } from 'ngx-bootstrap';
import { AppConfigService } from '../app-config/app-config.service';
import * as _ from 'lodash';
export class ModalImageUploadComponent {
    /**
     * @param {?} appConfigService
     * @param {?} request
     * @param {?} common
     * @param {?} http
     */
    constructor(appConfigService, request, common, http) {
        this.appConfigService = appConfigService;
        this.request = request;
        this.common = common;
        this.http = http;
        this.upLoadType = [{ title: "File", type: 1 }, { title: "Scan", type: 2 }, { title: "Link", type: 3 }, { title: "QR Code", type: 3 }];
        this.systemId = '0';
        this.RelatedAgency = 'SOC';
        this.RecordId = '0';
        this.Subject = '-';
        this.TypeId = '0';
        this.popupTitle = 'เลือกรูปประจำตัว';
        this.uploaded = new EventEmitter();
        this.onSubmit = new EventEmitter();
        // @ViewChild('myModal') myModal;
        this.fileList = [];
        this.uploadHeaders = {
            "Authorization": "Basic " + btoa("APPSOC:123456")
        };
        this.loading = false;
        this.beforeUpload = (file, _fileList) => {
            return new Observable((observer) => {
                /** @type {?} */
                let whitelist = [
                    'application/pdf',
                    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                    'application/vnd.ms-excel',
                    'application/vnd.msexcel',
                    'application/csv',
                    'text/csv',
                    'application/msword',
                    'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                    'application/vnd.ms-powerpoint',
                    'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
                    'application/vnd.openxmlformats-officedocument.presentationml.presentation',
                    'text/plain',
                    'text/comma-separated-values',
                    'text/anytext',
                    'image/png',
                    'image/jpeg',
                    'image/gif',
                    'image/bmp'
                ];
                /** @type {?} */
                const isWhitelist = (file && whitelist.indexOf(file.type) > -1);
                if (!isWhitelist) {
                    setTimeout(() => {
                        this.fileList = [{
                                uid: '999',
                                name: 'สามารถอัพโหลดได้เฉพาะไฟล์  pdf , png  , jpeg  ,gif , text , word , excel , powerpoint',
                                status: 'error',
                                response: 'สามารถอัพโหลดได้เฉพาะไฟล์  pdf , png  , jpeg  ,gif , text , word , excel , powerpoint',
                                url: null
                            }];
                    }, 50);
                    observer.complete();
                    return;
                }
                /** @type {?} */
                const isLt30M = /** @type {?} */ ((file.size)) / 1024 / 1024 < 30;
                if (!isLt30M) {
                    this.fileList = [{
                            uid: '999',
                            name: 'File must smaller than 30MB!',
                            status: 'error',
                            response: 'File must smaller than 30MB!',
                            url: null
                        }];
                    observer.complete();
                    return;
                }
                observer.next(isWhitelist && isLt30M);
                observer.complete();
            });
        };
        this.customReq = (item) => {
            /** @type {?} */
            const formData = new FormData();
            // tslint:disable-next-line:no-any
            formData.append('FileData', /** @type {?} */ (item.file));
            formData.append('SystemId', '' + this.systemId);
            formData.append('RelatedAgency', this.RelatedAgency);
            formData.append('RecordId', this.RecordId);
            formData.append('Subject', this.Subject);
            formData.append('TypeId', this.TypeId);
            /** @type {?} */
            let headers = new HttpHeaders();
            headers = headers.set('Authorization', 'Basic ' + btoa('APPSOC:123456'));
            /** @type {?} */
            let req = new HttpRequest('POST', item.action, formData, {
                reportProgress: true,
                headers: headers
            });
            // req.headers.set('Authorization', 'Basic ' + btoa('APPSOC:123456'));
            return this.http.request(req).subscribe((event) => {
                if (event.type === HttpEventType.UploadProgress) {
                    if (event.total > 0) {
                        (/** @type {?} */ (event)).percent = event.loaded / event.total * 100;
                    }
                    item.onProgress(event, item.file);
                }
                else if (event instanceof HttpResponse) {
                    // console.log("event.body",event.body);
                    // let res = JSON.parse(event.body);
                    if (this.fileList && this.fileList.length > 1) {
                        this.fileList = [this.fileList[this.fileList.length - 1]];
                    }
                    this.uploaded.emit(event.body);
                    this.data = event.body;
                    item.onSuccess(event.body, item.file, event);
                }
            }, (err) => {
                item.onError(err, item.file);
            });
        };
        this.config = appConfigService.getConfig();
        this.url = _.get(this.config, 'apiServers.alfresco.url') || "https://203.154.32.126:2585/api/mfec/Alfresco";
    }
    /**
     * @return {?}
     */
    ngOnInit() {
    }
    /**
     * @param {?} file
     * @return {?}
     */
    onUploaded(file) {
        console.log("file", file);
        /** @type {?} */
        let res = JSON.parse(file.request.response);
        this.request.getAttachmentLinkToken(this.url + '/' + res.uuid).then(url => {
            this.avatarUrl = url;
        });
        this.uploaded.emit(res);
    }
    /**
     * @return {?}
     */
    clearValue() {
        this.fileList = [];
    }
    /**
     * @return {?}
     */
    closeModal() {
        this.modal.hide();
        this.data = null;
        this.fileList = [];
    }
    /**
     * @return {?}
     */
    clickSubmit() {
        this.onSubmit.emit(this.data);
        this.modal.hide();
        this.data = null;
        this.fileList = [];
    }
}
ModalImageUploadComponent.decorators = [
    { type: Component, args: [{
                selector: 'modal-image-upload',
                template: "<div class=\"modal fade\" bsModal #modal=\"bs-modal\" [config]=\"{backdrop: 'static'}\"\n     tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"dialog-static-name1\">\n    <div class=\"modal-dialog modal-md\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 id=\"dialog-static-name\" class=\"modal-title pull-left\">{{popupTitle}}</h4>\n                <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"closeModal()\">\n                    <span aria-hidden=\"true\">&times;</span>\n                </button>\n            </div>\n\n            <div class=\"modal-body\">\n                <form class=\"m-form m-form--state m-form--fit m-form--label-align-right\" (ngSubmit)=\"clickSubmit()\">\n                    <div class=\"ibox-body\">\n                        <div class=\"col-sm-12\" style=\"text-align: center\">\n                            <br>\n                            <nz-upload nzType=\"drag\"\n                                       [nzAction]=\"url\"\n                                       [nzCustomRequest]=\"customReq\"\n                                       nzFileType=\"image/png,image/jpeg,image/gif,image/bmp\"\n                                       [(nzFileList)]=\"fileList\"\n                                       [nzBeforeUpload]=\"beforeUpload\"\n                                       >\n                                <!--<nz-upload nzType=\"drag\"-->\n                                <!--nzAction=\"https://203.154.32.126:2585/api/mfec/Alfresco\"-->\n                                <!--&gt;-->\n                                <a nz-button>\n                                    <i nz-icon type=\"upload\"></i><span>Click to Upload</span>\n                                </a>\n                            </nz-upload>\n                            <br>\n                        </div>\n                        <div class=\"col-sm-12\" style=\"text-align: center\" *ngIf=\"avatarUrl\">\n                            <div class=\"avatar-box\">\n                                <img [src]=\"avatarUrl\" alt=\"\">\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"m-portlet__foot m-portlet__foot--fit text-right\">\n                        <div class=\"m-form__actions\">\n                            <button type=\"submit\" class=\"btn btn-success btn-md btn-md-save\">\n                                \u0E1A\u0E31\u0E19\u0E17\u0E36\u0E01\n                            </button>\n                            <button type=\"reset\" class=\"btn btn-default btn-md btn-md-search\" (click)=\"closeModal()\">\n                                \u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\n                            </button>\n                        </div>\n                    </div>\n                </form>\n            </div>\n        </div>\n    </div>\n</div>\n",
                styles: [`
    :host ::ng-deep .avatar-uploader > .ant-upload, :host ::ng-deep .avatar {
      width: 128px;
      height: 128px;
    }
    :host ::ng-deep .ant-upload-select-picture-card i {
      font-size: 32px;
      color: #999;
    }
    :host ::ng-deep .ant-upload-select-picture-card .ant-upload-text {
      margin-top: 8px;
      color: #666;
    }
  `]
            }] }
];
/** @nocollapse */
ModalImageUploadComponent.ctorParameters = () => [
    { type: AppConfigService },
    { type: Request },
    { type: Common },
    { type: HttpClient }
];
ModalImageUploadComponent.propDecorators = {
    modal: [{ type: ViewChild, args: ['modal',] }],
    upLoadType: [{ type: Input }],
    systemId: [{ type: Input }],
    RelatedAgency: [{ type: Input }],
    RecordId: [{ type: Input }],
    Subject: [{ type: Input }],
    TypeId: [{ type: Input }],
    downloadToken: [{ type: Input }],
    popupTitle: [{ type: Input }],
    uploaded: [{ type: Output }],
    onSubmit: [{ type: Output }]
};
if (false) {
    /** @type {?} */
    ModalImageUploadComponent.prototype.modal;
    /** @type {?} */
    ModalImageUploadComponent.prototype.upLoadType;
    /** @type {?} */
    ModalImageUploadComponent.prototype.systemId;
    /** @type {?} */
    ModalImageUploadComponent.prototype.RelatedAgency;
    /** @type {?} */
    ModalImageUploadComponent.prototype.RecordId;
    /** @type {?} */
    ModalImageUploadComponent.prototype.Subject;
    /** @type {?} */
    ModalImageUploadComponent.prototype.TypeId;
    /** @type {?} */
    ModalImageUploadComponent.prototype.downloadToken;
    /** @type {?} */
    ModalImageUploadComponent.prototype.popupTitle;
    /** @type {?} */
    ModalImageUploadComponent.prototype.uploaded;
    /** @type {?} */
    ModalImageUploadComponent.prototype.onSubmit;
    /** @type {?} */
    ModalImageUploadComponent.prototype.fileList;
    /** @type {?} */
    ModalImageUploadComponent.prototype.uploadHeaders;
    /** @type {?} */
    ModalImageUploadComponent.prototype.loading;
    /** @type {?} */
    ModalImageUploadComponent.prototype.avatarUrl;
    /** @type {?} */
    ModalImageUploadComponent.prototype.data;
    /** @type {?} */
    ModalImageUploadComponent.prototype.config;
    /** @type {?} */
    ModalImageUploadComponent.prototype.url;
    /** @type {?} */
    ModalImageUploadComponent.prototype.beforeUpload;
    /** @type {?} */
    ModalImageUploadComponent.prototype.customReq;
    /** @type {?} */
    ModalImageUploadComponent.prototype.appConfigService;
    /** @type {?} */
    ModalImageUploadComponent.prototype.request;
    /** @type {?} */
    ModalImageUploadComponent.prototype.common;
    /** @type {?} */
    ModalImageUploadComponent.prototype.http;
}

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtaW1hZ2UtdXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NvYy1hcHAtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9tb2RhbC1pbWFnZS11cGxvYWQvbW9kYWwtaW1hZ2UtdXBsb2FkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsT0FBTyxFQUFDLFVBQVUsRUFBYSxhQUFhLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVsSCxPQUFPLEVBQUUsVUFBVSxFQUF1QixNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBdUI1QixNQUFNOzs7Ozs7O0lBdUJGLFlBQW9CLGdCQUFrQyxFQUFTLE9BQWdCLEVBQVMsTUFBYyxFQUFVLElBQWdCO1FBQTVHLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBUyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLFNBQUksR0FBSixJQUFJLENBQVk7MEJBcEJyRyxDQUFDLEVBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxJQUFJLEVBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLEtBQUss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RUFBRSxDQUFDOzs7OztJQUd2QixVQUFVO1FBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztLQUN0Qjs7OztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztLQUN0Qjs7O1lBMUtKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsb0JBQW9CO2dCQUM5QixzNUZBQWtEO3lCQUU5Qzs7Ozs7Ozs7Ozs7OztHQWFMO2FBRUY7Ozs7WUF2Qk8sZ0JBQWdCO1lBUmYsT0FBTztZQUNSLE1BQU07WUFFTixVQUFVOzs7b0JBK0JiLFNBQVMsU0FBQyxPQUFPO3lCQUNqQixLQUFLO3VCQUNMLEtBQUs7NEJBQ0wsS0FBSzt1QkFDTCxLQUFLO3NCQUNMLEtBQUs7cUJBQ0wsS0FBSzs0QkFDTCxLQUFLO3lCQUNMLEtBQUs7dUJBQ0wsTUFBTTt1QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSAnLi4vX3NlcnZpY2VzL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQge0NvbW1vbn0gZnJvbSAnLi4vX3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7VXBsb2FkWEhSQXJnc30gZnJvbSAnbmctem9ycm8tYW50ZCc7XG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBFdmVudCwgSHR0cEV2ZW50VHlwZSwgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE56TWVzc2FnZVNlcnZpY2UsIH0gZnJvbSAnbmctem9ycm8tYW50ZCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlcix0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcy9SeCc7XG5pbXBvcnQge01vZGFsRGlyZWN0aXZlfSBmcm9tICduZ3gtYm9vdHN0cmFwJztcbmltcG9ydCB7QXBwQ29uZmlnU2VydmljZX0gZnJvbSAnLi4vYXBwLWNvbmZpZy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuLy8gaW1wb3J0IHsgTnpNZXNzYWdlU2VydmljZSB9IGZyb20gJ25nLXpvcnJvLWFudGQvbWVzc2FnZSc7XG4vLyBpbXBvcnQgeyBVcGxvYWRGaWxlIH0gZnJvbSAnbmctem9ycm8tYW50ZC91cGxvYWQnO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtb2RhbC1pbWFnZS11cGxvYWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC1pbWFnZS11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlczogW1xuICAgICAgICBgXG4gICAgOmhvc3QgOjpuZy1kZWVwIC5hdmF0YXItdXBsb2FkZXIgPiAuYW50LXVwbG9hZCwgOmhvc3QgOjpuZy1kZWVwIC5hdmF0YXIge1xuICAgICAgd2lkdGg6IDEyOHB4O1xuICAgICAgaGVpZ2h0OiAxMjhweDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC5hbnQtdXBsb2FkLXNlbGVjdC1waWN0dXJlLWNhcmQgaSB7XG4gICAgICBmb250LXNpemU6IDMycHg7XG4gICAgICBjb2xvcjogIzk5OTtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC5hbnQtdXBsb2FkLXNlbGVjdC1waWN0dXJlLWNhcmQgLmFudC11cGxvYWQtdGV4dCB7XG4gICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICBjb2xvcjogIzY2NjtcbiAgICB9XG4gIGBcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsSW1hZ2VVcGxvYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgQFZpZXdDaGlsZCgnbW9kYWwnKSBtb2RhbDogTW9kYWxEaXJlY3RpdmU7XG4gICAgQElucHV0KCkgdXBMb2FkVHlwZTogYW55ID0gW3t0aXRsZTpcIkZpbGVcIix0eXBlOjF9LHt0aXRsZTpcIlNjYW5cIix0eXBlOjJ9LHt0aXRsZTpcIkxpbmtcIix0eXBlOjN9LHt0aXRsZTpcIlFSIENvZGVcIix0eXBlOjN9XTtcbiAgICBASW5wdXQoKSBzeXN0ZW1JZDogYW55ID0gJzAnO1xuICAgIEBJbnB1dCgpIFJlbGF0ZWRBZ2VuY3k6IGFueSA9ICdTT0MnO1xuICAgIEBJbnB1dCgpIFJlY29yZElkOiBhbnkgPSAnMCc7XG4gICAgQElucHV0KCkgU3ViamVjdDogYW55ID0gJy0nO1xuICAgIEBJbnB1dCgpIFR5cGVJZDogYW55ID0gJzAnO1xuICAgIEBJbnB1dCgpIGRvd25sb2FkVG9rZW46IGFueSA7XG4gICAgQElucHV0KCkgcG9wdXBUaXRsZSA9ICfguYDguKXguLfguK3guIHguKPguLnguJvguJvguKPguLDguIjguLPguJXguLHguKcnIDtcbiAgICBAT3V0cHV0KCkgdXBsb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG9uU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIC8vIEBWaWV3Q2hpbGQoJ215TW9kYWwnKSBteU1vZGFsO1xuICAgIGZpbGVMaXN0OmFueSA9IFtdO1xuICAgIHVwbG9hZEhlYWRlcnM6YW55ID0ge1xuICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogXCJCYXNpYyBcIitidG9hKFwiQVBQU09DOjEyMzQ1NlwiKVxuICAgIH07XG4gICAgbG9hZGluZyA9IGZhbHNlO1xuICAgIGF2YXRhclVybDogc3RyaW5nO1xuICAgIGRhdGE7XG4gICAgY29uZmlnO1xuICAgIHVybDtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UscHJpdmF0ZSByZXF1ZXN0OiBSZXF1ZXN0LCBwdWJsaWMgY29tbW9uOiBDb21tb24sIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHRoaXMudXJsID0gXy5nZXQodGhpcy5jb25maWcsICdhcGlTZXJ2ZXJzLmFsZnJlc2NvLnVybCcpIHx8IFwiaHR0cHM6Ly8yMDMuMTU0LjMyLjEyNjoyNTg1L2FwaS9tZmVjL0FsZnJlc2NvXCI7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG5cbiAgICB9XG4gICAgb25VcGxvYWRlZChmaWxlKXtcbiAgICAgICAgY29uc29sZS5sb2coXCJmaWxlXCIsZmlsZSk7XG4gICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKGZpbGUucmVxdWVzdC5yZXNwb25zZSk7XG4gICAgICAgIHRoaXMucmVxdWVzdC5nZXRBdHRhY2htZW50TGlua1Rva2VuKHRoaXMudXJsKycvJytyZXMudXVpZCkudGhlbih1cmwgPT4ge1xuICAgICAgICAgICAgdGhpcy5hdmF0YXJVcmwgPSB1cmw7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwbG9hZGVkLmVtaXQocmVzKTtcbiAgICB9XG5cbiAgICBiZWZvcmVVcGxvYWQgPSAoZmlsZTogYW55LCBfZmlsZUxpc3Q6IGFueSkgPT4gIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogYW55KSA9PiB7XG4gICAgICAgICAgbGV0IHdoaXRlbGlzdCA9IFtcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3BkZicsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLFxuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vdm5kLm1zZXhjZWwnLFxuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vY3N2JyxcbiAgICAgICAgICAgICAgJ3RleHQvY3N2JyxcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL21zd29yZCcsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCcsXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVzaG93JyxcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nLFxuICAgICAgICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICAgICAgICd0ZXh0L2NvbW1hLXNlcGFyYXRlZC12YWx1ZXMnLFxuICAgICAgICAgICAgICAndGV4dC9hbnl0ZXh0JyxcbiAgICAgICAgICAgICAgJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICAgICdpbWFnZS9qcGVnJyxcbiAgICAgICAgICAgICAgJ2ltYWdlL2dpZicsXG4gICAgICAgICAgICAgICdpbWFnZS9ibXAnXG5cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3QgaXNXaGl0ZWxpc3QgPSAoZmlsZSAmJiB3aGl0ZWxpc3QuaW5kZXhPZihmaWxlLnR5cGUpID4gLTEpXG4gICAgICAgICAgaWYoIWlzV2hpdGVsaXN0KXtcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlTGlzdCA9IFsge1xuICAgICAgICAgICAgICAgICAgICAgIHVpZDogJzk5OScsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ+C4quC4suC4oeC4suC4o+C4luC4reC4seC4nuC5guC4q+C4peC4lOC5hOC4lOC5ieC5gOC4ieC4nuC4suC4sOC5hOC4n+C4peC5jCAgcGRmICwgcG5nICAsIGpwZWcgICxnaWYgLCB0ZXh0ICwgd29yZCAsIGV4Y2VsICwgcG93ZXJwb2ludCcsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiAn4Liq4Liy4Lih4Liy4Lij4LiW4Lit4Lix4Lie4LmC4Lir4Lil4LiU4LmE4LiU4LmJ4LmA4LiJ4Lie4Liy4Liw4LmE4Lif4Lil4LmMICBwZGYgLCBwbmcgICwganBlZyAgLGdpZiAsIHRleHQgLCB3b3JkICwgZXhjZWwgLCBwb3dlcnBvaW50JyxcbiAgICAgICAgICAgICAgICAgICAgICB1cmw6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgfSwgNTApO1xuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgaXNMdDMwTSA9IGZpbGUuc2l6ZSEgLyAxMDI0IC8gMTAyNCA8IDMwO1xuICAgICAgICAgIGlmICghaXNMdDMwTSkge1xuICAgICAgICAgICAgdGhpcy5maWxlTGlzdCA9IFsge1xuICAgICAgICAgICAgICAgICAgdWlkOiAnOTk5JyxcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdGaWxlIG11c3Qgc21hbGxlciB0aGFuIDMwTUIhJyxcbiAgICAgICAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlOiAnRmlsZSBtdXN0IHNtYWxsZXIgdGhhbiAzME1CIScsXG4gICAgICAgICAgICAgICAgICB1cmw6IG51bGxcbiAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvYnNlcnZlci5uZXh0KGlzV2hpdGVsaXN0ICYmIGlzTHQzME0pO1xuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuXG4gICAgY3VzdG9tUmVxID0gKGl0ZW06IFVwbG9hZFhIUkFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ0ZpbGVEYXRhJywgaXRlbS5maWxlIGFzIGFueSk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnU3lzdGVtSWQnLCAnJyt0aGlzLnN5c3RlbUlkKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdSZWxhdGVkQWdlbmN5JywgdGhpcy5SZWxhdGVkQWdlbmN5KTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdSZWNvcmRJZCcsIHRoaXMuUmVjb3JkSWQpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ1N1YmplY3QnLCB0aGlzLlN1YmplY3QpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ1R5cGVJZCcsIHRoaXMuVHlwZUlkKTtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgKyBidG9hKCdBUFBTT0M6MTIzNDU2JykpO1xuICAgICAgICBsZXQgcmVxID0gbmV3IEh0dHBSZXF1ZXN0KCdQT1NUJywgaXRlbS5hY3Rpb24sIGZvcm1EYXRhLCB7XG4gICAgICAgICAgICByZXBvcnRQcm9ncmVzcyA6IHRydWUsXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzXG4gICAgICAgIH0pO1xuICAgICAgICAvLyByZXEuaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArIGJ0b2EoJ0FQUFNPQzoxMjM0NTYnKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChyZXEpLnN1YnNjcmliZShcbiAgICAgICAgICAgIChldmVudDogSHR0cEV2ZW50PHt9PikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC50b3RhbCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIChldmVudCBhcyBhbnkpLnBlcmNlbnQgPSBldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCAqIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpdGVtLm9uUHJvZ3Jlc3MoZXZlbnQsIGl0ZW0uZmlsZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImV2ZW50LmJvZHlcIixldmVudC5ib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gbGV0IHJlcyA9IEpTT04ucGFyc2UoZXZlbnQuYm9keSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZmlsZUxpc3QgJiYgdGhpcy5maWxlTGlzdC5sZW5ndGggPiAxKXtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVMaXN0ID0gW3RoaXMuZmlsZUxpc3RbdGhpcy5maWxlTGlzdC5sZW5ndGgtMV1dXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZC5lbWl0KGV2ZW50LmJvZHkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBldmVudC5ib2R5O1xuICAgICAgICAgICAgICAgICAgICBpdGVtLm9uU3VjY2VzcyhldmVudC5ib2R5LCBpdGVtLmZpbGUsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbS5vbkVycm9yKGVyciwgaXRlbS5maWxlKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclZhbHVlKCl7XG4gICAgICAgIHRoaXMuZmlsZUxpc3QgPSBbXTtcbiAgICB9XG5cbiAgICBjbG9zZU1vZGFsKCkge1xuICAgICAgICB0aGlzLm1vZGFsLmhpZGUoKTtcbiAgICAgICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICAgICAgdGhpcy5maWxlTGlzdCA9IFtdO1xuICAgIH1cblxuICAgIGNsaWNrU3VibWl0KCl7XG4gICAgICAgIHRoaXMub25TdWJtaXQuZW1pdCh0aGlzLmRhdGEpO1xuICAgICAgICB0aGlzLm1vZGFsLmhpZGUoKTtcbiAgICAgICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICAgICAgdGhpcy5maWxlTGlzdCA9IFtdO1xuICAgIH1cblxufVxuIl19