modal-attachment.component.js 63.6 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523
/**
 * @fileoverview added by tsickle
 * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
 */
import * as tslib_1 from "tslib";
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { ModalDirective } from 'ngx-bootstrap';
import { AppConfigService } from '../app-config/app-config.service';
import { Request } from '../_services/request.service';
import { Common } from '../_services/common.service';
import { FormBuilder, Validators } from '@angular/forms';
import { CustomValidators } from 'ng2-validation';
import { UploadAttachmentComponent } from '../upload-attachment/upload-attachment.component';
import * as _ from 'lodash';
import { DateService } from '../_services/date.service';
var Options = /** @class */ (function () {
    function Options() {
    }
    return Options;
}());
if (false) {
    /**
     * title ที่ต้องการแสดง
     * @type {?}
     */
    Options.prototype.title;
    /**
     * data
     * @type {?}
     */
    Options.prototype.data;
    /** @type {?} */
    Options.prototype.mode;
    /** @type {?} */
    Options.prototype.downloadToken;
    /**
     * name ที่ต้องการแสดง
     * @type {?}
     */
    Options.prototype.config;
}
var ModalAttachmentComponent = /** @class */ (function (_super) {
    tslib_1.__extends(ModalAttachmentComponent, _super);
    function ModalAttachmentComponent(appConfigService, request, formBuilder, common, date) {
        var _this = _super.call(this) || this;
        _this.appConfigService = appConfigService;
        _this.request = request;
        _this.formBuilder = formBuilder;
        _this.common = common;
        _this.date = date;
        _this.isImage = false;
        _this.onModalCreateSubmit = new EventEmitter();
        _this.onModalEditSubmit = new EventEmitter();
        _this.submitted = false;
        _this.title = '';
        _this.selectList = [];
        _this.modalConfig = {
            ignoreBackdropClick: true
        };
        _this.isMore = false;
        _this.attachmentData = {
            doc_type: null
        };
        _this.tmpData = {};
        _this.filteredDepartments = [];
        _this.departmentList = [];
        _this.disabledForm = false;
        _this.isOpen = false;
        _this.isEnable = false;
        _this.config = appConfigService.getConfig();
        _this.attachmentUrl = _.get(_this.config, 'apiServers.alfresco.url') || "https://203.154.32.126:2585/api/mfec/Alfresco";
        return _this;
    }
    /**
     * @return {?}
     */
    ModalAttachmentComponent.prototype.ngOnInit = /**
     * @return {?}
     */
    function () {
        this.th = this.common.fnLocalPCalendar('th');
        this.registerForm = this.formBuilder.group({
            name: [{ value: '', disabled: this.disabledForm }, Validators.required],
            doc_type: [{ value: '', disabled: this.disabledForm }],
            url: [{ value: '', disabled: this.disabledForm }],
            is_classifieds: [{ value: '', disabled: this.disabledForm }],
            is_image: [{ value: '', disabled: this.disabledForm }],
            keyword: [{ value: '', disabled: this.disabledForm }],
            book_no: [{ value: '', disabled: this.disabledForm }],
            amount: [{ value: '', disabled: this.disabledForm }],
            record_date: [{ value: '', disabled: this.disabledForm }],
            version: [{ value: '', disabled: this.disabledForm }],
            resolution: [{ value: '', disabled: this.disabledForm }],
            remark: [{ value: '', disabled: this.disabledForm }],
            moreField: this.formBuilder.array([])
        });
    };
    /**
     * @param {?=} options
     * @return {?}
     */
    ModalAttachmentComponent.prototype.open = /**
     * @param {?=} options
     * @return {?}
     */
    function (options) {
        return tslib_1.__awaiter(this, void 0, void 0, function () {
            var _a;
            return tslib_1.__generator(this, function (_b) {
                switch (_b.label) {
                    case 0:
                        this.isEnable = false;
                        console.log(options);
                        this.attachmentData = {};
                        if (!options) return [3 /*break*/, 2];
                        this.mode = options.mode;
                        this.title = options.title || '';
                        this.downloadToken = options.downloadToken;
                        this.attachmentData = JSON.parse(JSON.stringify(options.data));
                        if (!this.attachmentData.doc_type) {
                            this.attachmentData.doc_type = null;
                        }
                        // ต้องเปลี่ยนเป็นเรียก api
                        _a = this;
                        return [4 /*yield*/, this.request.getDropDown(options.data.system_id, "ประเภทเอกสาร")];
                    case 1:
                        // ต้องเปลี่ยนเป็นเรียก api
                        _a.selectList = _b.sent();
                        _b.label = 2;
                    case 2:
                        if (this.mode) {
                            this.attachmentData.record_date = this.date.getNow();
                        }
                        if (this.mode !== 'VIEW') {
                            if (this.mode === 'EDIT') {
                                this.isEnable = true;
                            }
                            this.uploadAttachment.clearValue();
                            this.disabledForm = false;
                        }
                        else {
                            this.disabledForm = true;
                        }
                        if (this.attachmentData.system_id === 11) {
                            this.attachmentData.is_classifieds = true;
                        }
                        this.modal.show();
                        return [2 /*return*/];
                }
            });
        });
    };
    /**
     * @return {?}
     */
    ModalAttachmentComponent.prototype.f = /**
     * @return {?}
     */
    function () {
        return this.registerForm.controls;
    };
    /**
     * @return {?}
     */
    ModalAttachmentComponent.prototype.closeModal = /**
     * @return {?}
     */
    function () {
        this.submitted = false;
        this.selectList = [];
        this.isMore = false;
        this.moreField = [];
        this.attachmentData = {};
        this.modal.hide();
    };
    /**
     * @param {?} modal
     * @return {?}
     */
    ModalAttachmentComponent.prototype.onYesClick = /**
     * @param {?} modal
     * @return {?}
     */
    function (modal) {
        modal.hide();
    };
    /**
     * @param {?} modal
     * @return {?}
     */
    ModalAttachmentComponent.prototype.onNoClick = /**
     * @param {?} modal
     * @return {?}
     */
    function (modal) {
        modal.hide();
    };
    /**
     * @param {?} $event
     * @return {?}
     */
    ModalAttachmentComponent.prototype.onHidden = /**
     * @param {?} $event
     * @return {?}
     */
    function ($event) {
        console.log('LOG MESSAGE: ModalConfirm -> onHidden -> $event', $event);
    };
    /**
     * @return {?}
     */
    ModalAttachmentComponent.prototype.checkExtraField = /**
     * @return {?}
     */
    function () {
        console.log(this.selectList.map(function (r) { return r.name; }).indexOf(this.attachmentData.name), this.attachmentData.name);
        if (!this.attachmentData.name || this.attachmentData.name == '' || (this.selectList.map(function (r) { return r.name; }).indexOf(this.attachmentData.name) > -1)) {
            this.attachmentData.name = this.attachmentData.doc_type;
        }
        this.moreField = [];
        if (this.attachmentData.system_id) {
            // this.addField(newField, +requireFlag);
            // this.moreField.push(newField);
            this.isMore = true;
        }
        else {
            this.isMore = false;
        }
    };
    /**
     * @param {?} e
     * @return {?}
     */
    ModalAttachmentComponent.prototype.onCellPrepared = /**
     * @param {?} e
     * @return {?}
     */
    function (e) {
        if (e.rowType === 'data') {
            for (var i in e.component.columns) {
                if (e.column.dataField === e.component.columns[i]) {
                    e.cellElement.accessKey = e.component.columns[i];
                }
            }
        }
    };
    /**
     * @param {?} data
     * @param {?} required
     * @return {?}
     */
    ModalAttachmentComponent.prototype.addField = /**
     * @param {?} data
     * @param {?} required
     * @return {?}
     */
    function (data, required) {
        /** @type {?} */
        var control = /** @type {?} */ (this.registerForm.controls['moreField']);
        /** @type {?} */
        var newgroup;
        if (data.type === 'text') {
            if (required) {
                /** @type {?} */
                var group = {};
                group[data.field_name] = [{ value: '', disabled: this.disabledForm }];
                newgroup = this.formBuilder.group(group);
            }
            else {
                /** @type {?} */
                var group = {};
                group[data.field_name] = [{ value: '', disabled: this.disabledForm }];
                newgroup = this.formBuilder.group(group);
            }
        }
        else if (data.type === 'datetime') {
            if (required) {
                /** @type {?} */
                var group = {};
                group[data.field_name] = [Validators.required, CustomValidators.date];
                newgroup = this.formBuilder.group(group);
            }
            else {
                /** @type {?} */
                var group = {};
                group[data.field_name] = [{ value: '', disabled: this.disabledForm }];
                newgroup = this.formBuilder.group(group);
            }
        }
        else if (data.type === 'special') {
            if (required) {
                /** @type {?} */
                var group = {};
                group[data.field_name] = [{ value: '', disabled: this.disabledForm }];
                newgroup = this.formBuilder.group(group);
            }
            else {
                /** @type {?} */
                var group = {};
                group[data.field_name] = [{ value: '', disabled: this.disabledForm }];
                newgroup = this.formBuilder.group(group);
            }
            if (data.field_name === 'amount') {
                /** @type {?} */
                var group = {};
                group['amount_type'] = [{ value: '', disabled: this.disabledForm }];
                control.push(this.formBuilder.group(group));
            }
        }
        control.push(newgroup);
    };
    /**
     * @param {?} i
     * @param {?} field
     * @param {?=} validateType
     * @return {?}
     */
    ModalAttachmentComponent.prototype.getValidateMoreField = /**
     * @param {?} i
     * @param {?} field
     * @param {?=} validateType
     * @return {?}
     */
    function (i, field, validateType) {
        /** @type {?} */
        var formMoreField = this.f['moreField'];
        if (validateType) {
            formMoreField = formMoreField.controls[i];
            formMoreField = formMoreField.controls[field];
            if (formMoreField.errors) {
                return formMoreField.errors[validateType];
            }
            else {
                return formMoreField.errors;
            }
        }
        else {
            return formMoreField.errors;
        }
    };
    /**
     * @param {?} data
     * @return {?}
     */
    ModalAttachmentComponent.prototype.getRowIndex = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        if (!data.data) {
            return '';
        }
        /** @type {?} */
        var no = data.row.dataIndex + 1;
        return no;
    };
    /**
     * @return {?}
     */
    ModalAttachmentComponent.prototype.onSubmit = /**
     * @return {?}
     */
    function () {
        return tslib_1.__awaiter(this, void 0, void 0, function () {
            return tslib_1.__generator(this, function (_a) {
                this.submitted = true;
                // ถ้า form ไม่ครบหรือผิดตามเงื่อนไขที่ตั้งไว้จะจบที่ตรงนี้
                if (this.registerForm.invalid) {
                    return [2 /*return*/];
                }
                // let postData = [];
                // await this.request.post("/db/rc_attachment",this.attachmentData);
                if (this.mode === 'CREATE') {
                    this.attachmentData.created_at = this.date.getNow();
                    if (!this.attachmentData.doc_type || this.attachmentData.doc_type === 'null') {
                        delete this.attachmentData['doc_type'];
                    }
                    this.onModalCreateSubmit.emit(_.cloneDeep(this.attachmentData));
                }
                else {
                    this.onModalEditSubmit.emit(_.cloneDeep(this.attachmentData));
                }
                this.closeModal();
                return [2 /*return*/];
            });
        });
    };
    /**
     * @param {?} data
     * @return {?}
     */
    ModalAttachmentComponent.prototype.onUploaded = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        console.log("data", data);
        if (data && data.uuid) {
            this.attachmentData.url = this.attachmentUrl + '/' + data.uuid;
            this.attachmentData.uuid = data.uuid;
            this.attachmentData.filename = data.fileName;
            this.isEnable = true;
        }
        else {
            this.isEnable = false;
        }
    };
    /**
     * @return {?}
     */
    ModalAttachmentComponent.prototype.clickUrl = /**
     * @return {?}
     */
    function () {
        return tslib_1.__awaiter(this, void 0, void 0, function () {
            var _a, _b;
            return tslib_1.__generator(this, function (_c) {
                switch (_c.label) {
                    case 0:
                        _b = (_a = window).open;
                        return [4 /*yield*/, this.request.getAttachmentLinkToken(this.attachmentData.url)];
                    case 1:
                        _b.apply(_a, [_c.sent()]);
                        return [2 /*return*/];
                }
            });
        });
    };
    /**
     * @param {?} data
     * @return {?}
     */
    ModalAttachmentComponent.prototype.getImageLink = /**
     * @param {?} data
     * @return {?}
     */
    function (data) {
        return data.url + "?downloadToken=" + this.downloadToken;
    };
    ModalAttachmentComponent.decorators = [
        { type: Component, args: [{
                    selector: 'modal-attachment',
                    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-lg\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 id=\"dialog-static-name\" class=\"modal-title pull-left\">{{title}}</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            <div class=\"modal-body\">\n                <div class=\"row\">\n                    <div class=\"col-lg-12\">\n                        <form class=\"m-form m-form--state m-form--fit m-form--label-align-right\" [formGroup]=\"registerForm\" (ngSubmit)=\"onSubmit()\">\n                            <div class=\"m-portlet__body\">\n                                <!-- \u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23\u0E41\u0E19\u0E1A -->\n                                <div *ngIf=\"attachmentData.system_id !== 17\">\n                                    <div class=\"row\">\n                                        <!--<div class=\"col-sm-2\">-->\n                                            <!--<span>\u0E0A\u0E37\u0E48\u0E2D\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07 :</span>-->\n                                        <!--</div>-->\n                                        <div class=\"col-sm-12\">\n                                            <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && f().name.errors }\">\n                                                <label class=\"control-label\">\u0E0A\u0E37\u0E48\u0E2D\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23<span class=\"color-red\">&nbsp;*</span></label>\n                                                <input type=\"text\" class=\"form-control m-input\" id=\"txtCategoryName\" formControlName=\"name\" [(ngModel)]=\"attachmentData.name\" [disabled]=\"disabledForm\">\n                                                <!--<input type=\"text\" class=\"form-control m-input\" id=\"txtCategoryName\" [(ngModel)]=\"stepData.name\" disabled>-->\n                                                <!--<div *ngIf=\"submitted && f().name.errors\" class=\"invalid-feedback\">-->\n                                                    <!--<div *ngIf=\"f().name.errors.required\">First Name is required</div>-->\n                                                <!--</div>-->\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                                <div class=\"row\">\n                                    <!--<div class=\"col-sm-2\">-->\n                                        <!--<span>\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23 :</span>-->\n                                    <!--</div>-->\n                                    <div class=\"col-sm-12\">\n                                        <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && f().doc_type.errors }\">\n                                            <label class=\"control-label\">\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23</label>\n                                            <select id=\"selNewStatus\" style=\"width: 100%\" [(ngModel)]=\"attachmentData.doc_type\" formControlName=\"doc_type\"   (change)=\"checkExtraField()\" [disabled]=\"disabledForm\">\n                                                <option value=\"null\">\u0E01\u0E23\u0E38\u0E13\u0E32\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23</option>\n                                                <option *ngFor=\"let data of selectList\" [ngValue]=\"data.name\">{{data.name}}</option>\n                                            </select>\n                                            <div *ngIf=\"submitted && f().doc_type.errors\" class=\"invalid-feedback\">\n                                                <div *ngIf=\"f().doc_type.errors.required\">First Name is required</div>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                                <div *ngIf=\"attachmentData.system_id !== 17 && attachmentData.system_id !== 11\">\n                                    <div class=\"row\">\n                                        <div class=\"col-sm-12\">\n                                            <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && f().remark.errors }\">\n                                                <label class=\"control-label\">\u0E2B\u0E21\u0E32\u0E22\u0E40\u0E2B\u0E15\u0E38</label>\n                                                <input type=\"text\" class=\"form-control m-input\" id=\"txtRemark\" formControlName=\"remark\" [(ngModel)]=\"attachmentData.remark\" [disabled]=\"disabledForm\">\n                                                <div *ngIf=\"submitted && f().remark.errors\" class=\"invalid-feedback\">\n                                                    <div *ngIf=\"f().remark.errors.required\">\u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01 \u0E2B\u0E21\u0E32\u0E22\u0E40\u0E2B\u0E15\u0E38</div>\n                                                </div>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                                <div class=\"row\">\n                                    <!--<div class=\"col-sm-2\">-->\n                                        <!--<span>\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23\u0E41\u0E19\u0E1A :</span>-->\n                                    <!--</div>-->\n                                    <div *ngIf=\"mode !== 'VIEW'\" class=\"col-sm-12\">\n                                        <label class=\"control-label\">\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23\u0E41\u0E19\u0E1A</label>\n                                        <upload-attachment #uploadAttachment [systemId]=\"attachmentData.system_id\" (uploaded)=\"onUploaded($event)\" [onlyImage]=\"isImage\"></upload-attachment>\n                                    </div>\n                                    <div *ngIf=\"mode === 'VIEW'\" class=\"col-sm-12\">\n                                        <label *ngIf=\"!isImage\" class=\"control-label\">\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23\u0E41\u0E19\u0E1A</label>\n                                        <label *ngIf=\"isImage\" class=\"control-label\">\u0E40\u0E04\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E2B\u0E21\u0E32\u0E22</label>\n                                        <br>\n                                        <a *ngIf=\"!isImage\" [href]=\"getImageLink(attachmentData)\" target=\"_blank\">{{attachmentData.url}}</a>\n                                        <img *ngIf=\"isImage\" [src]=\"getImageLink(attachmentData)\" style=\"width: auto !important; text-align: center\">\n                                    </div>\n                                </div>\n                                <br>\n                                <div *ngIf=\"attachmentData.system_id === 11\">\n                                    <div class=\"row\">\n                                        <!--<div class=\"col-sm-2\">-->\n                                            <!--<span>\u0E08\u0E31\u0E14\u0E40\u0E02\u0E49\u0E32\u0E27\u0E32\u0E23\u0E30 :</span>-->\n                                        <!--</div>-->\n                                        <div class=\"col-sm-12\">\n                                            <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && f().is_classifieds.errors }\">\n                                                <!--<label class=\"control-label\"></label>-->\n                                                <!--<label class=\"control-label\"></label>-->\n                                                <input type=\"checkbox\" id=\"chxIsClassifieds\"  name=\"is_classifieds\" formControlName=\"is_classifieds\" [(ngModel)]=\"attachmentData.is_classifieds\" [disabled]=\"disabledForm\" ng-checked> \u0E08\u0E31\u0E14\u0E40\u0E02\u0E49\u0E32\u0E27\u0E32\u0E23\u0E30\n                                                <!--<input type=\"text\" class=\"form-control m-input\" id=\"txtCategoryName\" formControlName=\"name\" [(ngModel)]=\"attachmentData.is_classifieds\">-->\n                                                <!--<div *ngIf=\"submitted && f().is_classifieds.errors\" class=\"invalid-feedback\">-->\n                                                    <!--<div *ngIf=\"f().is_classifieds.errors.required\">First Name is required</div>-->\n                                                <!--</div>-->\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                                <div *ngIf=\"attachmentData.system_id === 11\">\n                                    <div class=\"row\">\n                                        <!--<div class=\"col-sm-2\">-->\n                                            <!--<span>\u0E41\u0E1B\u0E25\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E20\u0E32\u0E1E\u0E41\u0E25\u0E49\u0E27 :</span>-->\n                                        <!--</div>-->\n                                        <div class=\"col-sm-12\">\n                                            <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && f().is_image.errors }\">\n                                                <!--<label class=\"control-label\">\u0E41\u0E1B\u0E25\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E20\u0E32\u0E1E\u0E41\u0E25\u0E49\u0E27</label>-->\n                                                <!--<label class=\"control-label\"></label>-->\n                                                <input type=\"checkbox\" id=\"chxIsImage\"  name=\"is_image\" formControlName=\"is_image\" [(ngModel)]=\"attachmentData.is_image\" [disabled]=\"disabledForm\" ng-checked> \u0E41\u0E1B\u0E25\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E20\u0E32\u0E1E\u0E41\u0E25\u0E49\u0E27\n                                                <!--<input type=\"text\" class=\"form-control m-input\" id=\"txtCategoryName\" formControlName=\"name\" [(ngModel)]=\"attachmentData.is_classifieds\">-->\n                                                <!--<div *ngIf=\"submitted && f().is_classifieds.errors\" class=\"invalid-feedback\">-->\n                                                <!--<div *ngIf=\"f().is_classifieds.errors.required\">First Name is required</div>-->\n                                                <!--</div>-->\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                                <div *ngIf=\"attachmentData.system_id === 11\">\n                                    <div class=\"row\">\n                                        <!--<div class=\"col-sm-2\">-->\n                                            <!--<span>\u0E04\u0E33\u0E2A\u0E33\u0E04\u0E31\u0E0D :</span>-->\n                                        <!--</div>-->\n                                        <div class=\"col-sm-12\">\n                                            <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && f().keyword.errors }\">\n                                                <label class=\"control-label\">\u0E04\u0E33\u0E2A\u0E33\u0E04\u0E31\u0E0D</label>\n                                                <!--<label class=\"control-label\"></label>-->\n                                                <input type=\"text\" class=\"form-control m-input\" id=\"txtKeyword\" formControlName=\"keyword\" [(ngModel)]=\"attachmentData.keyword\" [disabled]=\"disabledForm\">\n                                                <!--<input type=\"text\" class=\"form-control m-input\" id=\"txtCategoryName\" formControlName=\"name\" [(ngModel)]=\"attachmentData.is_classifieds\">-->\n                                                <div *ngIf=\"submitted && f().keyword.errors\" class=\"invalid-feedback\">\n                                                    <div *ngIf=\"f().keyword.errors.required\">\u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01 \u0E04\u0E33\u0E2A\u0E33\u0E04\u0E31\u0E0D</div>\n                                                </div>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                                <div *ngIf=\"attachmentData.system_id === 17\">\n                                    <div class=\"row\">\n                                        <!--<div class=\"col-sm-2\">-->\n                                            <!--<span>\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23 :</span>-->\n                                        <!--</div>-->\n                                        <div class=\"col-sm-12\">\n                                            <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && f().book_no.errors }\">\n                                                <label class=\"control-label\">\u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23</label>\n                                                <!--<label class=\"control-label\"></label>-->\n                                                <input type=\"text\" class=\"form-control m-input\" id=\"txtBookNo\" formControlName=\"book_no\" [(ngModel)]=\"attachmentData.book_no\" [disabled]=\"disabledForm\">\n                                                <!--<input type=\"text\" class=\"form-control m-input\" id=\"txtCategoryName\" formControlName=\"name\" [(ngModel)]=\"attachmentData.is_classifieds\">-->\n                                                <div *ngIf=\"submitted && f().book_no.errors\" class=\"invalid-feedback\">\n                                                    <div *ngIf=\"f().book_no.errors.required\">\u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01 \u0E40\u0E25\u0E02\u0E17\u0E35\u0E48\u0E40\u0E2D\u0E01\u0E2A\u0E32\u0E23</div>\n                                                </div>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                                <!--<div *ngIf=\"attachmentData.system_id === 17\">-->\n                                    <!--<div class=\"row\">-->\n                                        <!--<div class=\"col-sm-2\">-->\n                                            <!--<span>\u0E08\u0E33\u0E19\u0E27\u0E19 :</span>-->\n                                        <!--</div>-->\n                                        <!--<div class=\"col-sm-10\">-->\n                                            <!--<div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && f().amount.errors }\">-->\n                                                <!--&lt;!&ndash;<label class=\"control-label\"></label>&ndash;&gt;-->\n                                                <!--<input type=\"number\" class=\"form-control m-input\" id=\"txtAmount\" name=\"amount\" formControlName=\"amount\" [(ngModel)]=\"attachmentData.amount\">-->\n                                                <!--&lt;!&ndash;<input type=\"text\" class=\"form-control m-input\" id=\"txtCategoryName\" formControlName=\"name\" [(ngModel)]=\"attachmentData.is_classifieds\">&ndash;&gt;-->\n                                                <!--<div *ngIf=\"submitted && f().amount.errors\" class=\"invalid-feedback\">-->\n                                                    <!--<div *ngIf=\"f().amount.errors.required\">\u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01 \u0E08\u0E33\u0E19\u0E27\u0E19</div>-->\n                                                <!--</div>-->\n                                            <!--</div>-->\n                                        <!--</div>-->\n                                    <!--</div>-->\n                                <!--</div>-->\n                                <div *ngIf=\"attachmentData.system_id === 17\">\n                                    <div class=\"row\">\n                                        <!--<div class=\"col-sm-2\">-->\n                                            <!--<span>\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E08\u0E31\u0E14\u0E40\u0E01\u0E47\u0E1A :</span>-->\n                                        <!--</div>-->\n                                        <div class=\"col-sm-12\">\n                                            <div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && f().record_date.errors }\">\n                                                <label class=\"control-label\">\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E08\u0E31\u0E14\u0E40\u0E01\u0E47\u0E1A</label>\n                                                <soc-date-box [id]=\"'txtDate'\" [(value)]=\"attachmentData.record_date\" [disabled]=\"disabledForm\"></soc-date-box>\n                                                <div *ngIf=\"submitted && f().record_date.errors\" >\n                                                    <div *ngIf=\"f().record_date.errors.required\" class=\"lable-error\">\u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01 \u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E08\u0E31\u0E14\u0E40\u0E01\u0E47\u0E1A</div>\n                                                    <div *ngIf=\"f().record_date.errors.date\" class=\"lable-error\">\u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01 \u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E08\u0E31\u0E14\u0E40\u0E01\u0E47\u0E1A \u0E43\u0E2B\u0E49\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07</div>\n                                                </div>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                                <!--<div *ngIf=\"attachmentData.system_id === 17\">-->\n                                    <!--<div class=\"row\">-->\n                                        <!--<div class=\"col-sm-2\">-->\n                                            <!--<span>\u0E40\u0E27\u0E2D\u0E23\u0E4C\u0E0A\u0E31\u0E48\u0E19/\u0E40\u0E25\u0E02\u0E23\u0E38\u0E48\u0E19 :</span>-->\n                                        <!--</div>-->\n                                        <!--<div class=\"col-sm-10\">-->\n                                            <!--<div class=\"form-group m-form__group\" [ngClass]=\"{ 'has-error': submitted && f().version.errors }\">-->\n                                                <!--<input type=\"text\" class=\"form-control m-input\" id=\"txtVersion\"  name=\"version\" formControlName=\"version\" [(ngModel)]=\"attachmentData.version\">-->\n                                                <!--<div *ngIf=\"submitted && f().version.errors\" class=\"invalid-feedback\">-->\n                                                    <!--<div *ngIf=\"f().version.errors.required\">\u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01 \u0E40\u0E27\u0E2D\u0E23\u0E4C\u0E0A\u0E31\u0E48\u0E19/\u0E40\u0E25\u0E02\u0E23\u0E38\u0E48\u0E19</div>-->\n                                                <!--</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\" style=\"margin-left: -5px;margin-right: -5px;\">\n                                    <button *ngIf=\"mode !== 'VIEW'\" [disabled]=\"!isEnable\" 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    </div>\n</div>"
                }] }
    ];
    /** @nocollapse */
    ModalAttachmentComponent.ctorParameters = function () { return [
        { type: AppConfigService },
        { type: Request },
        { type: FormBuilder },
        { type: Common },
        { type: DateService }
    ]; };
    ModalAttachmentComponent.propDecorators = {
        isImage: [{ type: Input }],
        onModalCreateSubmit: [{ type: Output }],
        onModalEditSubmit: [{ type: Output }],
        modal: [{ type: ViewChild, args: ['modal',] }],
        uploadAttachment: [{ type: ViewChild, args: ['uploadAttachment',] }]
    };
    return ModalAttachmentComponent;
}(Options));
export { ModalAttachmentComponent };
if (false) {
    /** @type {?} */
    ModalAttachmentComponent.prototype.isImage;
    /** @type {?} */
    ModalAttachmentComponent.prototype.onModalCreateSubmit;
    /** @type {?} */
    ModalAttachmentComponent.prototype.onModalEditSubmit;
    /** @type {?} */
    ModalAttachmentComponent.prototype.modal;
    /** @type {?} */
    ModalAttachmentComponent.prototype.uploadAttachment;
    /** @type {?} */
    ModalAttachmentComponent.prototype.registerForm;
    /** @type {?} */
    ModalAttachmentComponent.prototype.control;
    /** @type {?} */
    ModalAttachmentComponent.prototype.submitted;
    /** @type {?} */
    ModalAttachmentComponent.prototype.title;
    /** @type {?} */
    ModalAttachmentComponent.prototype.selectList;
    /** @type {?} */
    ModalAttachmentComponent.prototype.modalConfig;
    /** @type {?} */
    ModalAttachmentComponent.prototype.th;
    /** @type {?} */
    ModalAttachmentComponent.prototype.isMore;
    /** @type {?} */
    ModalAttachmentComponent.prototype.moreField;
    /** @type {?} */
    ModalAttachmentComponent.prototype.config;
    /** @type {?} */
    ModalAttachmentComponent.prototype.attachmentData;
    /** @type {?} */
    ModalAttachmentComponent.prototype.tmpData;
    /** @type {?} */
    ModalAttachmentComponent.prototype.filteredDepartments;
    /** @type {?} */
    ModalAttachmentComponent.prototype.departmentList;
    /** @type {?} */
    ModalAttachmentComponent.prototype.attachmentUrl;
    /** @type {?} */
    ModalAttachmentComponent.prototype.disabledForm;
    /** @type {?} */
    ModalAttachmentComponent.prototype.isOpen;
    /** @type {?} */
    ModalAttachmentComponent.prototype.isEnable;
    /** @type {?} */
    ModalAttachmentComponent.prototype.appConfigService;
    /** @type {?} */
    ModalAttachmentComponent.prototype.request;
    /** @type {?} */
    ModalAttachmentComponent.prototype.formBuilder;
    /** @type {?} */
    ModalAttachmentComponent.prototype.common;
    /** @type {?} */
    ModalAttachmentComponent.prototype.date;
}

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtYXR0YWNobWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9zb2MtYXBwLWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvbW9kYWwtYXR0YWNobWVudC9tb2RhbC1hdHRhY2htZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQWUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDbkQsT0FBTyxFQUFDLFdBQVcsRUFBd0IsVUFBVSxFQUFrQixNQUFNLGdCQUFnQixDQUFDO0FBQzlGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR2hELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUV0RCxJQUFBOzs7a0JBYkE7SUFzQkMsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFNNkMsb0RBQU87SUE4QmpELGtDQUFvQixnQkFBa0MsRUFBVSxPQUFnQixFQUFVLFdBQXdCLEVBQVMsTUFBYyxFQUFTLElBQWlCO1FBQW5LLFlBQ0ksaUJBQU8sU0FHVjtRQUptQixzQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVUsYUFBTyxHQUFQLE9BQU8sQ0FBUztRQUFVLGlCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVMsWUFBTSxHQUFOLE1BQU0sQ0FBUTtRQUFTLFVBQUksR0FBSixJQUFJLENBQWE7d0JBNUJ2SSxLQUFLO29DQUNELElBQUksWUFBWSxFQUFFO2tDQUNwQixJQUFJLFlBQVksRUFBRTswQkFLcEMsS0FBSztzQkFDSixFQUFFOzJCQUNHLEVBQUU7NEJBQ1E7WUFDeEIsbUJBQW1CLEVBQUUsSUFBSTtTQUM1Qjt1QkFFUSxLQUFLOytCQUdRO1lBQ2xCLFFBQVEsRUFBQyxJQUFJO1NBQ2hCO3dCQUNhLEVBQUU7b0NBQ1UsRUFBRTsrQkFDUCxFQUFFOzZCQUVSLEtBQUs7dUJBQ1gsS0FBSzt5QkFDSCxLQUFLO1FBSVosS0FBSSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzQyxLQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSSxDQUFDLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQyxJQUFJLCtDQUErQyxDQUFDOztLQUN6SDs7OztJQUVELDJDQUFROzs7SUFBUjtRQUVJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3ZDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDdkUsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEQsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDakQsY0FBYyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDNUQsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEQsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckQsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckQsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEQsV0FBVyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekQsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckQsVUFBVSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEQsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEQsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUN4QyxDQUFDLENBQUM7S0FDTjs7Ozs7SUFFSyx1Q0FBSTs7OztJQUFWLFVBQVcsT0FBaUI7Ozs7Ozt3QkFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7d0JBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDOzZCQUNyQixPQUFPLEVBQVAsd0JBQU87d0JBQ1AsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7d0JBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUMvRCxJQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUM7NEJBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzt5QkFDdkM7d0JBQ0QsMkJBQTJCO3dCQUMzQixLQUFBLElBQUksQ0FBQTt3QkFBYyxxQkFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBQyxjQUFjLENBQUMsRUFBQTs7O3dCQUF2RixHQUFLLFVBQVUsR0FBRyxTQUFxRSxDQUFDOzs7d0JBRTVGLElBQUcsSUFBSSxDQUFDLElBQUksRUFBQzs0QkFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO3lCQUN4RDt3QkFDRCxJQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFDOzRCQUNwQixJQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFDO2dDQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzs2QkFDeEI7NEJBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDOzRCQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQzt5QkFDN0I7NkJBQUk7NEJBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7eUJBQzVCO3dCQUVELElBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEtBQUssRUFBRSxFQUFDOzRCQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7eUJBQzNDO3dCQUVELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Ozs7O0tBQ3JCOzs7O0lBRUQsb0NBQUM7OztJQUFEO1FBQ0ksT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztLQUNyQzs7OztJQUVELDZDQUFVOzs7SUFBVjtRQUNJLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDckI7Ozs7O0lBRUQsNkNBQVU7Ozs7SUFBVixVQUFXLEtBQUs7UUFDWixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDaEI7Ozs7O0lBRUQsNENBQVM7Ozs7SUFBVCxVQUFVLEtBQUs7UUFDWCxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDaEI7Ozs7O0lBRUQsMkNBQVE7Ozs7SUFBUixVQUFTLE1BQXNCO1FBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaURBQWlELEVBQUUsTUFBTSxDQUFDLENBQUM7S0FFMUU7Ozs7SUFFRCxrREFBZTs7O0lBQWY7UUFDSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQyxJQUFFLE9BQUEsQ0FBQyxDQUFDLElBQUksRUFBTixDQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RHLElBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFBLENBQUMsSUFBRSxPQUFBLENBQUMsQ0FBQyxJQUFJLEVBQU4sQ0FBTSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQztZQUN0SSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQTtTQUMxRDtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUc7OztZQUdoQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUN0QjthQUFNO1lBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDdkI7S0FHSjs7Ozs7SUFFRCxpREFBYzs7OztJQUFkLFVBQWUsQ0FBQztRQUNaLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7WUFDdEIsS0FBSyxJQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtnQkFDakMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDL0MsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3BEO2FBQ0o7U0FDSjtLQUNKOzs7Ozs7SUFFRCwyQ0FBUTs7Ozs7SUFBUixVQUFTLElBQUksRUFBRSxRQUFROztRQUNuQixJQUFNLE9BQU8scUJBQWMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUM7O1FBQ25FLElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUN0QixJQUFJLFFBQVEsRUFBRTs7Z0JBQ1YsSUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO2dCQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztnQkFDdEUsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzVDO2lCQUFNOztnQkFDSCxJQUFNLEtBQUssR0FBUSxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDNUM7U0FDSjthQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDakMsSUFBSSxRQUFRLEVBQUU7O2dCQUNWLElBQU0sS0FBSyxHQUFRLEVBQUUsQ0FBQztnQkFDdEIsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RFLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM1QztpQkFBTTs7Z0JBQ0gsSUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO2dCQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztnQkFDdEUsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzVDO1NBQ0o7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFDO1lBQy9CLElBQUksUUFBUSxFQUFFOztnQkFDVixJQUFNLEtBQUssR0FBUSxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDNUM7aUJBQU07O2dCQUNILElBQU0sS0FBSyxHQUFRLEVBQUUsQ0FBQztnQkFDdEIsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBQ3RFLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM1QztZQUNELElBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUM7O2dCQUM1QixJQUFNLEtBQUssR0FBUSxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBQ3BFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUMvQztTQUNKO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUMxQjs7Ozs7OztJQUVELHVEQUFvQjs7Ozs7O0lBQXBCLFVBQXFCLENBQUMsRUFBRSxLQUFLLEVBQUUsWUFBYTs7UUFDeEMsSUFBSSxhQUFhLEdBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QyxJQUFJLFlBQVksRUFBRTtZQUNkLGFBQWEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLGFBQWEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRTtnQkFDdEIsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzdDO2lCQUFNO2dCQUNILE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQzthQUMvQjtTQUNKO2FBQU07WUFDSCxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUM7U0FDL0I7S0FDSjs7Ozs7SUFFRCw4Q0FBVzs7OztJQUFYLFVBQVksSUFBSTtRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1osT0FBTyxFQUFFLENBQUM7U0FDYjs7UUFDRCxJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEMsT0FBTyxFQUFFLENBQUM7S0FDYjs7OztJQUVLLDJDQUFROzs7SUFBZDs7O2dCQUNJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDOztnQkFFdEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRTtvQkFDM0Isc0JBQU87aUJBQ1Y7OztnQkFHRCxJQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFDO29CQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNwRCxJQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEtBQUssTUFBTSxFQUFDO3dCQUN4RSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQzFDO29CQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztpQkFDbkU7cUJBQUk7b0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2lCQUNqRTtnQkFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Ozs7S0FDckI7Ozs7O0lBRUQsNkNBQVU7Ozs7SUFBVixVQUFXLElBQUk7UUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFHLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFDO1lBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUMsR0FBRyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO2FBQUk7WUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUN6QjtLQUNKOzs7O0lBRUssMkNBQVE7OztJQUFkOzs7Ozs7d0JBQ0ksS0FBQSxDQUFBLEtBQUEsTUFBTSxDQUFBLENBQUMsSUFBSSxDQUFBO3dCQUFDLHFCQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBQTs7d0JBQTlFLGNBQVksU0FBa0UsRUFBQyxDQUFDOzs7OztLQUNuRjs7Ozs7SUFFRCwrQ0FBWTs7OztJQUFaLFVBQWEsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEdBQUcsR0FBQyxpQkFBaUIsR0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO0tBQ3hEOztnQkE3UEosU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLGttcEJBQWdEO2lCQUNuRDs7OztnQkF6Qk8sZ0JBQWdCO2dCQUNmLE9BQU87Z0JBRVIsV0FBVztnQkFEWCxNQUFNO2dCQU9OLFdBQVc7OzswQkFtQmQsS0FBSztzQ0FDTCxNQUFNO29DQUNOLE1BQU07d0JBQ04sU0FBUyxTQUFDLE9BQU87bUNBQ2pCLFNBQVMsU0FBQyxrQkFBa0I7O21DQWxDakM7RUE0QjhDLE9BQU87U0FBeEMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01vZGFsT3B0aW9ucywgTW9kYWxEaXJlY3RpdmV9IGZyb20gJ25neC1ib290c3RyYXAnO1xuaW1wb3J0IHtBcHBDb25maWdTZXJ2aWNlfSBmcm9tICcuLi9hcHAtY29uZmlnL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSAnLi4vX3NlcnZpY2VzL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQge0NvbW1vbn0gZnJvbSAnLi4vX3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1BcnJheSwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBBYnN0cmFjdENvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Q3VzdG9tVmFsaWRhdG9yc30gZnJvbSAnbmcyLXZhbGlkYXRpb24nO1xuaW1wb3J0IHtEeERhdGFHcmlkQ29tcG9uZW50fSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcbmltcG9ydCB7VXBsb2FkQXR0YWNobWVudENvbXBvbmVudH0gZnJvbSAnLi4vdXBsb2FkLWF0dGFjaG1lbnQvdXBsb2FkLWF0dGFjaG1lbnQuY29tcG9uZW50JztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7RGF0ZVNlcnZpY2V9IGZyb20gJy4uL19zZXJ2aWNlcy9kYXRlLnNlcnZpY2UnO1xuXG5jbGFzcyBPcHRpb25zIHtcbiAgICAvKiogdGl0bGUg4LiX4Li14LmI4LiV4LmJ4Lit4LiH4LiB4Liy4Lij4LmB4Liq4LiU4LiHICovXG4gICAgdGl0bGU/OiBTdHJpbmc7XG4gICAgLyoqIGRhdGEgKi9cbiAgICBkYXRhOiBhbnk7XG4gICAgbW9kZTogYW55O1xuICAgIGRvd25sb2FkVG9rZW46IGFueTtcbiAgICAvKiogbmFtZSDguJfguLXguYjguJXguYnguK3guIfguIHguLLguKPguYHguKrguJTguIcgKi9cbiAgICBjb25maWc6IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtb2RhbC1hdHRhY2htZW50JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbW9kYWwtYXR0YWNobWVudC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsQXR0YWNobWVudENvbXBvbmVudCBleHRlbmRzIE9wdGlvbnMgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgQElucHV0KCkgaXNJbWFnZSA6Ym9vbGVhbiA9IGZhbHNlO1xuICAgIEBPdXRwdXQoKSBvbk1vZGFsQ3JlYXRlU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBvbk1vZGFsRWRpdFN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAVmlld0NoaWxkKCdtb2RhbCcpIG1vZGFsOiBNb2RhbERpcmVjdGl2ZTtcbiAgICBAVmlld0NoaWxkKCd1cGxvYWRBdHRhY2htZW50JykgdXBsb2FkQXR0YWNobWVudDogVXBsb2FkQXR0YWNobWVudENvbXBvbmVudDtcbiAgICByZWdpc3RlckZvcm06IEZvcm1Hcm91cDtcbiAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XG4gICAgc3VibWl0dGVkID0gZmFsc2U7XG4gICAgdGl0bGU6IGFueSA9ICcnO1xuICAgIHNlbGVjdExpc3Q6IGFueSA9IFtdO1xuICAgIG1vZGFsQ29uZmlnOiBNb2RhbE9wdGlvbnMgPSB7XG4gICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWVcbiAgICB9O1xuICAgIHRoO1xuICAgIGlzTW9yZSA9IGZhbHNlO1xuICAgIG1vcmVGaWVsZDogYW55O1xuICAgIHB1YmxpYyBjb25maWc6IGFueTtcbiAgICBhdHRhY2htZW50RGF0YTogYW55ID0ge1xuICAgICAgICBkb2NfdHlwZTpudWxsXG4gICAgfTtcbiAgICB0bXBEYXRhOmFueSA9IHt9O1xuICAgIGZpbHRlcmVkRGVwYXJ0bWVudHM6YW55ID0gW107XG4gICAgZGVwYXJ0bWVudExpc3Q6YW55ID0gW107XG4gICAgYXR0YWNobWVudFVybDtcbiAgICBkaXNhYmxlZEZvcm0gPSBmYWxzZTtcbiAgICBpc09wZW4gPSBmYWxzZTtcbiAgICBpc0VuYWJsZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLCBwcml2YXRlIHJlcXVlc3Q6IFJlcXVlc3QsIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBwdWJsaWMgY29tbW9uOiBDb21tb24sIHB1YmxpYyBkYXRlOiBEYXRlU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudFVybCA9IF8uZ2V0KHRoaXMuY29uZmlnLCAnYXBpU2VydmVycy5hbGZyZXNjby51cmwnKSB8fCBcImh0dHBzOi8vMjAzLjE1NC4zMi4xMjY6MjU4NS9hcGkvbWZlYy9BbGZyZXNjb1wiO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuXG4gICAgICAgIHRoaXMudGggPSB0aGlzLmNvbW1vbi5mbkxvY2FsUENhbGVuZGFyKCd0aCcpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgbmFtZTogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgICAgICBkb2NfdHlwZTogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV0sXG4gICAgICAgICAgICB1cmw6IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dLFxuICAgICAgICAgICAgaXNfY2xhc3NpZmllZHM6IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dLFxuICAgICAgICAgICAgaXNfaW1hZ2U6IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dLFxuICAgICAgICAgICAga2V5d29yZDogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV0sXG4gICAgICAgICAgICBib29rX25vOiBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XSxcbiAgICAgICAgICAgIGFtb3VudDogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV0sXG4gICAgICAgICAgICByZWNvcmRfZGF0ZTogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV0sXG4gICAgICAgICAgICB2ZXJzaW9uOiBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XSxcbiAgICAgICAgICAgIHJlc29sdXRpb246IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dLFxuICAgICAgICAgICAgcmVtYXJrOiBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XSxcbiAgICAgICAgICAgIG1vcmVGaWVsZDogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgb3BlbihvcHRpb25zPzogT3B0aW9ucykge1xuICAgICAgICB0aGlzLmlzRW5hYmxlID0gZmFsc2U7XG4gICAgICAgIGNvbnNvbGUubG9nKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmF0dGFjaG1lbnREYXRhID0ge307XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGU7XG4gICAgICAgICAgICB0aGlzLnRpdGxlID0gb3B0aW9ucy50aXRsZSB8fCAnJztcbiAgICAgICAgICAgIHRoaXMuZG93bmxvYWRUb2tlbiA9IG9wdGlvbnMuZG93bmxvYWRUb2tlbjtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudERhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSkpO1xuICAgICAgICAgICAgaWYoIXRoaXMuYXR0YWNobWVudERhdGEuZG9jX3R5cGUpe1xuICAgICAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudERhdGEuZG9jX3R5cGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g4LiV4LmJ4Lit4LiH4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmA4Lib4LmH4LiZ4LmA4Lij4Li14Lii4LiBIGFwaVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RMaXN0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldERyb3BEb3duKG9wdGlvbnMuZGF0YS5zeXN0ZW1faWQsXCLguJvguKPguLDguYDguKDguJfguYDguK3guIHguKrguLLguKNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5tb2RlKXtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudERhdGEucmVjb3JkX2RhdGUgPSB0aGlzLmRhdGUuZ2V0Tm93KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5tb2RlICE9PSAnVklFVycpe1xuICAgICAgICAgICAgaWYodGhpcy5tb2RlID09PSAnRURJVCcpe1xuICAgICAgICAgICAgICAgIHRoaXMuaXNFbmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGxvYWRBdHRhY2htZW50LmNsZWFyVmFsdWUoKTtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRGb3JtID0gZmFsc2U7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZEZvcm0gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5hdHRhY2htZW50RGF0YS5zeXN0ZW1faWQgPT09IDExKXtcbiAgICAgICAgICB0aGlzLmF0dGFjaG1lbnREYXRhLmlzX2NsYXNzaWZpZWRzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubW9kYWwuc2hvdygpO1xuICAgIH1cblxuICAgIGYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyRm9ybS5jb250cm9scztcbiAgICB9XG5cbiAgICBjbG9zZU1vZGFsKCkge1xuICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGVjdExpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5pc01vcmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tb3JlRmllbGQgPSBbXTtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50RGF0YSA9IHt9O1xuICAgICAgICB0aGlzLm1vZGFsLmhpZGUoKTtcbiAgICB9XG5cbiAgICBvblllc0NsaWNrKG1vZGFsKSB7XG4gICAgICAgIG1vZGFsLmhpZGUoKTtcbiAgICB9XG5cbiAgICBvbk5vQ2xpY2sobW9kYWwpIHtcbiAgICAgICAgbW9kYWwuaGlkZSgpO1xuICAgIH1cblxuICAgIG9uSGlkZGVuKCRldmVudDogTW9kYWxEaXJlY3RpdmUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0xPRyBNRVNTQUdFOiBNb2RhbENvbmZpcm0gLT4gb25IaWRkZW4gLT4gJGV2ZW50JywgJGV2ZW50KTtcblxuICAgIH1cblxuICAgIGNoZWNrRXh0cmFGaWVsZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5zZWxlY3RMaXN0Lm1hcChyPT5yLm5hbWUpLmluZGV4T2YodGhpcy5hdHRhY2htZW50RGF0YS5uYW1lKSx0aGlzLmF0dGFjaG1lbnREYXRhLm5hbWUpXG4gICAgICAgIGlmKCF0aGlzLmF0dGFjaG1lbnREYXRhLm5hbWUgfHwgdGhpcy5hdHRhY2htZW50RGF0YS5uYW1lID09ICcnIHx8ICh0aGlzLnNlbGVjdExpc3QubWFwKHI9PnIubmFtZSkuaW5kZXhPZih0aGlzLmF0dGFjaG1lbnREYXRhLm5hbWUpID4gLTEpKXtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudERhdGEubmFtZSA9IHRoaXMuYXR0YWNobWVudERhdGEuZG9jX3R5cGVcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubW9yZUZpZWxkID0gW107XG4gICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnREYXRhLnN5c3RlbV9pZCApIHtcbiAgICAgICAgICAgIC8vIHRoaXMuYWRkRmllbGQobmV3RmllbGQsICtyZXF1aXJlRmxhZyk7XG4gICAgICAgICAgICAvLyB0aGlzLm1vcmVGaWVsZC5wdXNoKG5ld0ZpZWxkKTtcbiAgICAgICAgICAgIHRoaXMuaXNNb3JlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3JlID0gZmFsc2U7XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgb25DZWxsUHJlcGFyZWQoZSkge1xuICAgICAgICBpZiAoZS5yb3dUeXBlID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiBlLmNvbXBvbmVudC5jb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUuY29sdW1uLmRhdGFGaWVsZCA9PT0gZS5jb21wb25lbnQuY29sdW1uc1tpXSkge1xuICAgICAgICAgICAgICAgICAgICBlLmNlbGxFbGVtZW50LmFjY2Vzc0tleSA9IGUuY29tcG9uZW50LmNvbHVtbnNbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkRmllbGQoZGF0YSwgcmVxdWlyZWQpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IDxGb3JtQXJyYXk+dGhpcy5yZWdpc3RlckZvcm0uY29udHJvbHNbJ21vcmVGaWVsZCddO1xuICAgICAgICBsZXQgbmV3Z3JvdXA7XG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGdyb3VwW2RhdGEuZmllbGRfbmFtZV0gPSBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkRm9ybSB9XTtcbiAgICAgICAgICAgICAgICBuZXdncm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dO1xuICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSAnZGF0ZXRpbWUnKSB7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBDdXN0b21WYWxpZGF0b3JzLmRhdGVdO1xuICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV07XG4gICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdzcGVjaWFsJyl7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cDogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZ3JvdXBbZGF0YS5maWVsZF9uYW1lXSA9IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dO1xuICAgICAgICAgICAgICAgIG5ld2dyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICBncm91cFtkYXRhLmZpZWxkX25hbWVdID0gW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEZvcm0gfV07XG4gICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGRhdGEuZmllbGRfbmFtZSA9PT0gJ2Ftb3VudCcpe1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgICBncm91cFsnYW1vdW50X3R5cGUnXSA9IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRGb3JtIH1dO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wucHVzaCh0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250cm9sLnB1c2gobmV3Z3JvdXApO1xuICAgIH1cblxuICAgIGdldFZhbGlkYXRlTW9yZUZpZWxkKGksIGZpZWxkLCB2YWxpZGF0ZVR5cGU/KSB7XG4gICAgICAgIGxldCBmb3JtTW9yZUZpZWxkOiBhbnkgPSB0aGlzLmZbJ21vcmVGaWVsZCddO1xuICAgICAgICBpZiAodmFsaWRhdGVUeXBlKSB7XG4gICAgICAgICAgICBmb3JtTW9yZUZpZWxkID0gZm9ybU1vcmVGaWVsZC5jb250cm9sc1tpXTtcbiAgICAgICAgICAgIGZvcm1Nb3JlRmllbGQgPSBmb3JtTW9yZUZpZWxkLmNvbnRyb2xzW2ZpZWxkXTtcbiAgICAgICAgICAgIGlmIChmb3JtTW9yZUZpZWxkLmVycm9ycykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtTW9yZUZpZWxkLmVycm9yc1t2YWxpZGF0ZVR5cGVdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybU1vcmVGaWVsZC5lcnJvcnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybU1vcmVGaWVsZC5lcnJvcnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSb3dJbmRleChkYXRhKSB7XG4gICAgICAgIGlmICghZGF0YS5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm8gPSBkYXRhLnJvdy5kYXRhSW5kZXggKyAxO1xuICAgICAgICByZXR1cm4gbm87XG4gICAgfVxuXG4gICAgYXN5bmMgb25TdWJtaXQoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgLy8g4LiW4LmJ4LiyIGZvcm0g4LmE4Lih4LmI4LiE4Lij4Lia4Lir4Lij4Li34Lit4Lic4Li04LiU4LiV4Liy4Lih4LmA4LiH4Li34LmI4Lit4LiZ4LmE4LiC4LiX4Li14LmI4LiV4Lix4LmJ4LiH4LmE4Lin4LmJ4LiI4Liw4LiI4Lia4LiX4Li14LmI4LiV4Lij4LiH4LiZ4Li14LmJXG4gICAgICAgIGlmICh0aGlzLnJlZ2lzdGVyRm9ybS5pbnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbGV0IHBvc3REYXRhID0gW107XG4gICAgICAgIC8vIGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0KFwiL2RiL3JjX2F0dGFjaG1lbnRcIix0aGlzLmF0dGFjaG1lbnREYXRhKTtcbiAgICAgICAgaWYodGhpcy5tb2RlID09PSAnQ1JFQVRFJyl7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnREYXRhLmNyZWF0ZWRfYXQgPSB0aGlzLmRhdGUuZ2V0Tm93KCk7XG4gICAgICAgICAgICBpZighdGhpcy5hdHRhY2htZW50RGF0YS5kb2NfdHlwZSB8fCB0aGlzLmF0dGFjaG1lbnREYXRhLmRvY190eXBlID09PSAnbnVsbCcpe1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmF0dGFjaG1lbnREYXRhWydkb2NfdHlwZSddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbk1vZGFsQ3JlYXRlU3VibWl0LmVtaXQoXy5jbG9uZURlZXAodGhpcy5hdHRhY2htZW50RGF0YSkpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMub25Nb2RhbEVkaXRTdWJtaXQuZW1pdChfLmNsb25lRGVlcCh0aGlzLmF0dGFjaG1lbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbG9zZU1vZGFsKCk7XG4gICAgfVxuXG4gICAgb25VcGxvYWRlZChkYXRhKXtcbiAgICAgICAgY29uc29sZS5sb2coXCJkYXRhXCIsZGF0YSk7XG4gICAgICAgIGlmKGRhdGEgJiYgZGF0YS51dWlkKXtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudERhdGEudXJsID0gdGhpcy5hdHRhY2htZW50VXJsKycvJytkYXRhLnV1aWQ7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnREYXRhLnV1aWQgPSBkYXRhLnV1aWQ7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnREYXRhLmZpbGVuYW1lID0gZGF0YS5maWxlTmFtZTtcbiAgICAgICAgICAgIHRoaXMuaXNFbmFibGUgPSB0cnVlO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuaXNFbmFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNsaWNrVXJsKCl7XG4gICAgICAgIHdpbmRvdy5vcGVuKGF3YWl0IHRoaXMucmVxdWVzdC5nZXRBdHRhY2htZW50TGlua1Rva2VuKHRoaXMuYXR0YWNobWVudERhdGEudXJsKSk7XG4gICAgfVxuXG4gICAgZ2V0SW1hZ2VMaW5rKGRhdGEpe1xuICAgICAgICByZXR1cm4gZGF0YS51cmwrXCI/ZG93bmxvYWRUb2tlbj1cIit0aGlzLmRvd25sb2FkVG9rZW47XG4gICAgfVxufVxuIl19