sent-list.component.js 24.7 KB
/**
 * @fileoverview added by tsickle
 * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
 */
import * as tslib_1 from "tslib";
import { Component, ViewChild, Input } from '@angular/core';
import { AppConfigService } from '../app-config/app-config.service';
import { DxDataGridComponent } from 'devextreme-angular';
import { Request } from '../_services/request.service';
import { Common } from '../_services/common.service';
import { ModalStepViewComponent } from '../modal-step-view/modal-step-view.component';
import { ModalDirective } from 'ngx-bootstrap';
import { FormBuilder, FormControl, Validators } from '@angular/forms';
import { B2bService } from '../_services/b2b.service';
export class SentListComponent {
    /**
     * @param {?} appConfigService
     * @param {?} request
     * @param {?} common
     * @param {?} formBuilder
     * @param {?} b2b
     */
    constructor(appConfigService, request, common, formBuilder, b2b) {
        this.appConfigService = appConfigService;
        this.request = request;
        this.common = common;
        this.formBuilder = formBuilder;
        this.b2b = b2b;
        this.mode = 'CREATE';
        this.sentList = [];
        this.dxgridPageSize = 10;
        this.allowedPageSizes1 = 10;
        this.allowedPageSizes2 = 25;
        this.allowedPageSizes3 = 50;
        this.allowedPageSizes4 = 100;
        this.customers = [];
        this.lastStep = '';
        this.recieveData = {};
        this.submittedRecieve = false;
        this.config = appConfigService.getConfig();
    }
    /**
     * @return {?}
     */
    ngOnInit() {
        // if(this.mode === "EDIT"){
        // setTimeout(async ()=>{
        //     this.downloadToken = await this.b2b.getAttachmentToken();
        // },500)
        this.getSentList();
        this.recieveForm = this.formBuilder.group({
            book_no: ['', [Validators.required]],
            recv_date: new FormControl(''),
        });
        // }
    }
    /**
     * @return {?}
     */
    fr() { return this.recieveForm.controls; }
    /**
     * @return {?}
     */
    getSentList() {
        return tslib_1.__awaiter(this, void 0, void 0, function* () {
            console.log('getSentList', this.sentList);
            /** @type {?} */
            let sentData = this.option.data;
            /** @type {?} */
            let filter = {
                filter: {
                    ref_table: sentData.ref_table,
                    ref_id: sentData.ref_id
                },
                order_by: ["is_important", "send_book_no", "created_at"]
            };
            /** @type {?} */
            const data = yield this.request.post('/search/v_ct_step_sent', filter);
            this.sentList = data.resultData;
            console.log('getSentList', this.sentList);
        });
    }
    /**
     * @param {?} data
     * @return {?}
     */
    getRowIndex(data) {
        if (!data.data) {
            return '';
        }
        /** @type {?} */
        const page = this.dxDataGridSentList.instance.option('paging.pageIndex') || 0;
        /** @type {?} */
        const pageSize = this.dxDataGridSentList.instance.option('paging.pageSize');
        /** @type {?} */
        const no = data.row.dataIndex + 1;
        return page * pageSize + no;
    }
    /**
     * @param {?} data
     * @return {?}
     */
    editRecieve(data) {
        console.log('data', data);
        this.tmpData = data;
        this.recieveModal.show();
    }
    /**
     * @return {?}
     */
    closeRecieveModal() {
        this.submittedRecieve = false;
        this.recieveData = {};
        this.tmpData = {};
        this.recieveModal.hide();
    }
    /**
     * @return {?}
     */
    onSubmitRecieve() {
        return tslib_1.__awaiter(this, void 0, void 0, function* () {
            this.submittedRecieve = true;
            // ถ้า form ไม่ครบหรือผิดตามเงื่อนไขที่ตั้งไว้จะจบที่ตรงนี้
            if (this.recieveForm.invalid) {
                return;
            }
            console.log('tmpData', this.tmpData);
            this.recieveData.name = this.tmpData.name;
            if (this.tmpData.ct_main_id)
                this.recieveData.ct_main_id = this.tmpData.ct_main_id;
            if (this.tmpData.ct_send_id)
                this.recieveData.ct_send_id = this.tmpData.ct_send_id;
            if (this.tmpData.ct_step_data_id)
                this.recieveData.ct_step_data_id = this.tmpData.ct_step_data_id;
            console.log('recieveData', this.recieveData);
            yield this.request.post("/db/ct_recieve", this.recieveData);
            this.getSentList();
            this.closeRecieveModal();
        });
    }
    /**
     * @param {?} data
     * @return {?}
     */
    isImportant(data) {
        return data.is_important ? "สำคัญ" : "";
    }
    /**
     * @param {?} e
     * @return {?}
     */
    onCellPrepared(e) {
        if (e.rowType === 'data') {
            e.cellElement.accessKey = e.column.caption;
        }
    }
}
SentListComponent.decorators = [
    { type: Component, args: [{
                selector: 'soc-sent-list',
                template: "\n<div class=\"col-sm-12\">\n    <div class=\"table-responsive table-wrapper\">\n        <dx-data-grid #dxDataGridSentList\n                      id=\"gridContainer\" noDataText=\"\" showBorders=\"true\" class=\"card-list-table\"\n                      (onCellPrepared)=\"onCellPrepared($event)\" [dataSource]=\"sentList\"\n                      [hoverStateEnabled]=\"true\" [rowAlternationEnabled]=\"true\" [columnAutoWidth]=\"false\"\n                      [allowColumnResizing]=\"true\" [allowColumnReordering]=\"true\" [wordWrapEnabled]=\"false\"\n                      [showBorders]=\"true\">\n            <dxi-column caption=\"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E17\u0E35\u0E48\" [allowSorting]=\"false\" cellTemplate=\"cellTemplate\" alignment=\"center\" [width]=\"70\"></dxi-column>\n            <dxi-column *ngIf=\"mode === 'EDIT'\" caption=\"\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\" [allowSorting]=\"false\" cellTemplate=\"cellTemplateAction\" alignment=\"center\" [width]=\"70\"></dxi-column>\n            <dxi-column dataField=\"send_to\" caption=\"\u0E2B\u0E19\u0E48\u0E27\u0E22\u0E07\u0E32\u0E19\"></dxi-column>\n            <dxi-column dataField=\"send_book_no\" caption=\"\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E2B\u0E19\u0E31\u0E07\u0E2A\u0E37\u0E2D\u0E2A\u0E48\u0E07\u0E2D\u0E2D\u0E01\"></dxi-column>\n            <dxi-column dataField=\"send_date\" caption=\"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E2A\u0E48\u0E07\u0E2D\u0E2D\u0E01\" dataType=\"date\" alignment=\"center\" [width]=\"100\"></dxi-column>\n            <dxi-column [calculateCellValue]=\"isImportant\" caption=\"\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E33\u0E04\u0E31\u0E0D\"></dxi-column>\n            <dxi-column dataField=\"book_no\" caption=\"\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A\u0E2B\u0E19\u0E31\u0E07\u0E2A\u0E37\u0E2D\"></dxi-column>\n            <dxi-column dataField=\"recv_date\" caption=\"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A\" dataType=\"date\" alignment=\"center\" [width]=\"100\"></dxi-column>\n            <dxo-paging [pageSize]=\"dxgridPageSize\"></dxo-paging>\n            <dxo-pager [showPageSizeSelector]=\"true\" [allowedPageSizes]=\"[allowedPageSizes1, allowedPageSizes2, allowedPageSizes3, allowedPageSizes4]\"\n                       [showInfo]=\"false\" [visible]=\"true\" [showNavigationButtons]=\"true\">\n            </dxo-pager>\n            <dxo-state-storing [enabled]=\"true\" type=\"localStorage\" storageKey=\"sentListDataGrid\"></dxo-state-storing>\n            <div *dxTemplate=\"let data of 'cellTemplate'\">\n                {{getRowIndex(data)}}\n            </div>\n            <div *dxTemplate=\"let data of 'cellTemplateAction'\">\n                <a *ngIf=\"mode === 'EDIT'\" id=\"btnEditRecieve\" (click)=\"editRecieve(data.data)\" class=\"btn btn-default btn-sm icon\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"\u0E41\u0E01\u0E49\u0E44\u0E02\"><i class=\"fal fa-pencil-alt\"></i></a>\n            </div>\n        </dx-data-grid>\n    </div>\n</div><!--End col-sm-12-->\n<div class=\"modal fade\" bsModal #recieveModal=\"bs-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"dialog-static-name2\" [config]=\"{backdrop: 'static'}\">\n    <div class=\"modal-dialog modal-md\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 id=\"dialog-static-recieve\" class=\"modal-title pull-left\"><label>\u0E23\u0E31\u0E1A\u0E2B\u0E19\u0E31\u0E07\u0E2A\u0E37\u0E2D \u0E15\u0E2D\u0E1A\u0E04\u0E27\u0E32\u0E21\u0E40\u0E2B\u0E47\u0E19</label></h4>\n                <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"closeRecieveModal()\">\n                    <span aria-hidden=\"true\">&times;</span>\n                </button>\n            </div>\n            <div class=\"modal-body\">\n                <form class=\"m-form m-form--state m-form--fit m-form--label-align-right\" [formGroup]=\"recieveForm\" (ngSubmit)=\"onSubmitRecieve()\">\n                    <div class=\"ibox-body\">\n                        <div class=\"row\">\n                            <div class=\"form-group\">\n                                <label class=\"control-label\">\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A\u0E2B\u0E19\u0E31\u0E07\u0E2A\u0E37\u0E2D</label>\n                                <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submittedRecieve && fr().book_no.errors }\">\n                                    <input type=\"text\" class=\"form-control m-input\" id=\"txtRecieveBookNo\" formControlName=\"book_no\" [(ngModel)]=\"recieveData.book_no\">\n                                    <div *ngIf=\"submittedRecieve && fr().book_no.errors\" class=\"invalid-feedback\">\n                                        <div *ngIf=\"fr().book_no.errors.required\">First Name is required</div>\n                                    </div>\n                                </div>\n                            </div>\n                            <div class=\"form-group\">\n                                <label class=\"control-label\">\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E23\u0E31\u0E1A</label>\n                                <!--<div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submittedRecieve && fr().recv_date.errors }\">-->\n                                    <soc-date-box [id]=\"'txtRecieveDate'\" [(value)]=\"recieveData.recv_date\"></soc-date-box>\n                                    <!--<div *ngIf=\"submittedRecieve && fr().recv_date.errors\" >-->\n                                        <!--<div *ngIf=\"fr().recv_date.errors.required\" class=\"lable-error\">Date is required</div>-->\n                                        <!--<div *ngIf=\"fr().recv_date.errors.date\" class=\"lable-error\">Date is invalid</div>-->\n                                    <!--</div>-->\n                                <!--</div>-->\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)=\"closeRecieveModal()\">\n                                \u0E22\u0E01\u0E40\u0E25\u0E34\u0E01\n                            </button>\n                        </div>\n                    </div>\n                </form>\n            </div>\n        </div>\n    </div>\n</div>\n"
            }] }
];
/** @nocollapse */
SentListComponent.ctorParameters = () => [
    { type: AppConfigService },
    { type: Request },
    { type: Common },
    { type: FormBuilder },
    { type: B2bService }
];
SentListComponent.propDecorators = {
    mode: [{ type: Input }],
    option: [{ type: Input }],
    dxDataGridSentList: [{ type: ViewChild, args: ['dxDataGridSentList',] }],
    modalStepView: [{ type: ViewChild, args: ['modalStepView',] }],
    recieveModal: [{ type: ViewChild, args: ['recieveModal',] }]
};
if (false) {
    /** @type {?} */
    SentListComponent.prototype.mode;
    /** @type {?} */
    SentListComponent.prototype.option;
    /** @type {?} */
    SentListComponent.prototype.dxDataGridSentList;
    /** @type {?} */
    SentListComponent.prototype.modalStepView;
    /** @type {?} */
    SentListComponent.prototype.recieveModal;
    /** @type {?} */
    SentListComponent.prototype.sentList;
    /** @type {?} */
    SentListComponent.prototype.th;
    /** @type {?} */
    SentListComponent.prototype.dxgridPageSize;
    /** @type {?} */
    SentListComponent.prototype.allowedPageSizes1;
    /** @type {?} */
    SentListComponent.prototype.allowedPageSizes2;
    /** @type {?} */
    SentListComponent.prototype.allowedPageSizes3;
    /** @type {?} */
    SentListComponent.prototype.allowedPageSizes4;
    /** @type {?} */
    SentListComponent.prototype.customers;
    /** @type {?} */
    SentListComponent.prototype.url;
    /** @type {?} */
    SentListComponent.prototype.lastStep;
    /** @type {?} */
    SentListComponent.prototype.config;
    /** @type {?} */
    SentListComponent.prototype.recieveData;
    /** @type {?} */
    SentListComponent.prototype.tmpData;
    /** @type {?} */
    SentListComponent.prototype.submittedRecieve;
    /** @type {?} */
    SentListComponent.prototype.recieveForm;
    /** @type {?} */
    SentListComponent.prototype.appConfigService;
    /** @type {?} */
    SentListComponent.prototype.request;
    /** @type {?} */
    SentListComponent.prototype.common;
    /** @type {?} */
    SentListComponent.prototype.formBuilder;
    /** @type {?} */
    SentListComponent.prototype.b2b;
}

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NvYy1hcHAtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9zZW50LWxpc3Qvc2VudC1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQXlCLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUNwRixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFNcEQsTUFBTTs7Ozs7Ozs7SUEyQkYsWUFDWSxrQkFDQSxTQUNELFFBQ0MsYUFDQTtRQUpBLHFCQUFnQixHQUFoQixnQkFBZ0I7UUFDaEIsWUFBTyxHQUFQLE9BQU87UUFDUixXQUFNLEdBQU4sTUFBTTtRQUNMLGdCQUFXLEdBQVgsV0FBVztRQUNYLFFBQUcsR0FBSCxHQUFHO29CQTlCeUIsUUFBUTt3QkFTaEMsRUFBRTs4QkFFRCxFQUFFO2lDQUNDLEVBQUU7aUNBQ0YsRUFBRTtpQ0FDRixFQUFFO2lDQUNGLEdBQUc7eUJBQ1gsRUFBRTt3QkFFSCxFQUFFOzJCQUVLLEVBQUU7Z0NBRUQsS0FBSztRQVNwQixJQUFJLENBQUMsTUFBTSxHQUFHLGdC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YyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNb2RhbFN0ZXBDb21wb25lbnR9IGZyb20gJy4uL21vZGFsLXN0ZXAvbW9kYWwtc3RlcC5jb21wb25lbnQnO1xuaW1wb3J0IHtBcHBDb25maWdTZXJ2aWNlfSBmcm9tICcuLi9hcHAtY29uZmlnL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQge0R4RGF0YUdyaWRDb21wb25lbnR9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSAnLi4vX3NlcnZpY2VzL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQge0NvbW1vbn0gZnJvbSAnLi4vX3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7TW9kYWxTdGVwVmlld0NvbXBvbmVudH0gZnJvbSAnLi4vbW9kYWwtc3RlcC12aWV3L21vZGFsLXN0ZXAtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHtNb2RhbERpcmVjdGl2ZX0gZnJvbSAnbmd4LWJvb3RzdHJhcCc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBBYnN0cmFjdENvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Q3VzdG9tVmFsaWRhdG9yc30gZnJvbSAnbmcyLXZhbGlkYXRpb24nO1xuaW1wb3J0IHtCMmJTZXJ2aWNlfSBmcm9tICcuLi9fc2VydmljZXMvYjJiLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzb2Mtc2VudC1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbnQtbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU2VudExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgQElucHV0KCkgbW9kZTogJ0NSRUFURSd8J0VESVQnfCdWSUVXJyA9ICdDUkVBVEUnO1xuICAgIEBJbnB1dCgpIG9wdGlvbjogYW55O1xuICAgIEBWaWV3Q2hpbGQoJ2R4RGF0YUdyaWRTZW50TGlzdCcpXG4gICAgZHhEYXRhR3JpZFNlbnRMaXN0OiBEeERhdGFHcmlkQ29tcG9uZW50O1xuICAgIC8vIEBWaWV3Q2hpbGQoJ21vZGFsU3RlcCcpXG4gICAgLy8gbW9kYWxTdGVwOiBNb2RhbFN0ZXBDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnbW9kYWxTdGVwVmlldycpXG4gICAgbW9kYWxTdGVwVmlldzogTW9kYWxTdGVwVmlld0NvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKCdyZWNpZXZlTW9kYWwnKSByZWNpZXZlTW9kYWw6IE1vZGFsRGlyZWN0aXZlO1xuICAgIHNlbnRMaXN0OiBhbnkgPSBbXTtcbiAgICB0aDtcbiAgICBkeGdyaWRQYWdlU2l6ZSA9IDEwO1xuICAgIGFsbG93ZWRQYWdlU2l6ZXMxID0gMTA7XG4gICAgYWxsb3dlZFBhZ2VTaXplczIgPSAyNTtcbiAgICBhbGxvd2VkUGFnZVNpemVzMyA9IDUwO1xuICAgIGFsbG93ZWRQYWdlU2l6ZXM0ID0gMTAwO1xuICAgIGN1c3RvbWVycyA9IFtdO1xuICAgIHVybDtcbiAgICBsYXN0U3RlcCA9ICcnO1xuICAgIGNvbmZpZzogYW55O1xuICAgIHJlY2lldmVEYXRhOmFueSA9IHt9O1xuICAgIHRtcERhdGE6YW55O1xuICAgIHN1Ym1pdHRlZFJlY2lldmUgPSBmYWxzZTtcbiAgICByZWNpZXZlRm9ybTogRm9ybUdyb3VwO1xuICAgIC8vIGRvd25sb2FkVG9rZW46YW55O1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVxdWVzdDogUmVxdWVzdCxcbiAgICAgICAgcHVibGljIGNvbW1vbjogQ29tbW9uLFxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBiMmI6QjJiU2VydmljZSkge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIC8vIGlmKHRoaXMubW9kZSA9PT0gXCJFRElUXCIpe1xuICAgICAgICAvLyBzZXRUaW1lb3V0KGFzeW5jICgpPT57XG4gICAgICAgIC8vICAgICB0aGlzLmRvd25sb2FkVG9rZW4gPSBhd2FpdCB0aGlzLmIyYi5nZXRBdHRhY2htZW50VG9rZW4oKTtcbiAgICAgICAgLy8gfSw1MDApXG4gICAgICAgIHRoaXMuZ2V0U2VudExpc3QoKTtcbiAgICAgICAgdGhpcy5yZWNpZXZlRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgYm9va19ubzogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICAgICAgcmVjdl9kYXRlOiAgbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBmcigpIHsgcmV0dXJuIHRoaXMucmVjaWV2ZUZvcm0uY29udHJvbHM7IH1cblxuICAgIGFzeW5jIGdldFNlbnRMaXN0KCkge1xuICAgICAgICBjb25zb2xlLmxvZygnZ2V0U2VudExpc3QnLHRoaXMuc2VudExpc3QpO1xuICAgICAgICBsZXQgc2VudERhdGEgPSB0aGlzLm9wdGlvbi5kYXRhO1xuICAgICAgICBsZXQgZmlsdGVyID0ge1xuICAgICAgICAgICAgZmlsdGVyIDoge1xuICAgICAgICAgICAgICAgIHJlZl90YWJsZSA6IHNlbnREYXRhLnJlZl90YWJsZSxcbiAgICAgICAgICAgICAgICByZWZfaWQgOiBzZW50RGF0YS5yZWZfaWRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcmRlcl9ieTpbXCJpc19pbXBvcnRhbnRcIixcInNlbmRfYm9va19ub1wiLFwiY3JlYXRlZF9hdFwiXVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdCgnL3NlYXJjaC92X2N0X3N0ZXBfc2VudCcsZmlsdGVyKTtcbiAgICAgICAgdGhpcy5zZW50TGlzdCA9IGRhdGEucmVzdWx0RGF0YTtcbiAgICAgICAgY29uc29sZS5sb2coJ2dldFNlbnRMaXN0Jyx0aGlzLnNlbnRMaXN0KTtcbiAgICB9XG5cbiAgICBnZXRSb3dJbmRleChkYXRhKSB7XG4gICAgICAgIGlmICghZGF0YS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMuZHhEYXRhR3JpZFNlbnRMaXN0Lmluc3RhbmNlLm9wdGlvbigncGFnaW5nLnBhZ2VJbmRleCcpIHx8IDA7XG4gICAgICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5keERhdGFHcmlkU2VudExpc3QuaW5zdGFuY2Uub3B0aW9uKCdwYWdpbmcucGFnZVNpemUnKTtcbiAgICAgICAgY29uc3Qgbm8gPSBkYXRhLnJvdy5kYXRhSW5kZXggKyAxO1xuICAgICAgICByZXR1cm4gcGFnZSAqIHBhZ2VTaXplICsgbm87XG4gICAgfVxuXG4gICAgZWRpdFJlY2lldmUoZGF0YSkge1xuICAgICAgICBjb25zb2xlLmxvZygnZGF0YScsZGF0YSk7XG4gICAgICAgIHRoaXMudG1wRGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMucmVjaWV2ZU1vZGFsLnNob3coKTtcbiAgICB9XG5cbiAgICBjbG9zZVJlY2lldmVNb2RhbCgpIHtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWRSZWNpZXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVjaWV2ZURhdGEgPSB7fTtcbiAgICAgICAgdGhpcy50bXBEYXRhID0ge307XG4gICAgICAgIHRoaXMucmVjaWV2ZU1vZGFsLmhpZGUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBvblN1Ym1pdFJlY2lldmUoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkUmVjaWV2ZSA9IHRydWU7XG5cbiAgICAgICAgLy8g4LiW4LmJ4LiyIGZvcm0g4LmE4Lih4LmI4LiE4Lij4Lia4Lir4Lij4Li34Lit4Lic4Li04LiU4LiV4Liy4Lih4LmA4LiH4Li34LmI4Lit4LiZ4LmE4LiC4LiX4Li14LmI4LiV4Lix4LmJ4LiH4LmE4Lin4LmJ4LiI4Liw4LiI4Lia4LiX4Li14LmI4LiV4Lij4LiH4LiZ4Li14LmJXG4gICAgICAgIGlmICh0aGlzLnJlY2lldmVGb3JtLmludmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygndG1wRGF0YScsdGhpcy50bXBEYXRhKTtcbiAgICAgICAgdGhpcy5yZWNpZXZlRGF0YS5uYW1lID0gdGhpcy50bXBEYXRhLm5hbWU7XG4gICAgICAgIGlmKHRoaXMudG1wRGF0YS5jdF9tYWluX2lkKSB0aGlzLnJlY2lldmVEYXRhLmN0X21haW5faWQgPSB0aGlzLnRtcERhdGEuY3RfbWFpbl9pZDtcbiAgICAgICAgaWYodGhpcy50bXBEYXRhLmN0X3NlbmRfaWQpIHRoaXMucmVjaWV2ZURhdGEuY3Rfc2VuZF9pZCA9IHRoaXMudG1wRGF0YS5jdF9zZW5kX2lkO1xuICAgICAgICBpZih0aGlzLnRtcERhdGEuY3Rfc3RlcF9kYXRhX2lkKSB0aGlzLnJlY2lldmVEYXRhLmN0X3N0ZXBfZGF0YV9pZCA9IHRoaXMudG1wRGF0YS5jdF9zdGVwX2RhdGFfaWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKCdyZWNpZXZlRGF0YScsdGhpcy5yZWNpZXZlRGF0YSk7XG4gICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0KFwiL2RiL2N0X3JlY2lldmVcIix0aGlzLnJlY2lldmVEYXRhKTtcbiAgICAgICAgdGhpcy5nZXRTZW50TGlzdCgpO1xuICAgICAgICB0aGlzLmNsb3NlUmVjaWV2ZU1vZGFsKCk7XG4gICAgfVxuICAgIGlzSW1wb3J0YW50KGRhdGEpe1xuICAgICAgICByZXR1cm4gZGF0YS5pc19pbXBvcnRhbnQ/XCLguKrguLPguITguLHguI1cIjpcIlwiO1xuICAgIH1cblxuICAgIG9uQ2VsbFByZXBhcmVkKGUpIHtcbiAgICAgICAgaWYgKGUucm93VHlwZSA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICBlLmNlbGxFbGVtZW50LmFjY2Vzc0tleSA9IGUuY29sdW1uLmNhcHRpb247XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=