Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

vipera-npm-registry / motif-web-admin-core   js

Repository URL to install this package:

Version: 0.3.1 

/ esm5 / lib / sections / CountersAndThresholds / components / thresholds / thresholds-component.js

/**
 * @fileoverview added by tsickle
 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
import { Component, EventEmitter, Output, Input } from '@angular/core';
import { NGXLogger } from 'web-console-core';
import { WCNotificationCenter, NotificationType } from 'web-console-ui-kit';
import { CountersService } from '@wa-motif-open-api/counters-thresholds-service';
import { WCSubscriptionHandler } from '../../../../components/Commons/wc-subscription-handler';
import { ThresholdsInfosModel } from './data/model';
import { faEdit } from '@fortawesome/free-solid-svg-icons';
/** @type {?} */
var LOG_TAG = '[ThresholdsComponent]';
/**
 * @record
 */
export function SelectionEvent() { }
if (false) {
    /** @type {?} */
    SelectionEvent.prototype.thresholdName;
    /** @type {?} */
    SelectionEvent.prototype.data;
}
/** @enum {string} */
var EditType = {
    Delete: 'Delete',
    Edit: 'Edit',
    StatusChange: 'StatusChange',
};
export { EditType };
/**
 * @record
 */
export function EditEvent() { }
if (false) {
    /** @type {?} */
    EditEvent.prototype.editType;
    /** @type {?} */
    EditEvent.prototype.dataItem;
}
var ThresholdsComponent = /** @class */ (function () {
    function ThresholdsComponent(logger, notificationCenter, countersService) {
        this.logger = logger;
        this.notificationCenter = notificationCenter;
        this.countersService = countersService;
        this.loading = false;
        this._subHandler = new WCSubscriptionHandler();
        this.faEdit = faEdit;
        this.selectionChange = new EventEmitter();
        this.edit = new EventEmitter();
        this.statusConfirmationTitleProvider = {
            getTitle: /**
             * @param {?} rowData
             * @return {?}
             */
            function (rowData) {
                if (rowData.enabled) {
                    return "Disable ?";
                }
                else {
                    return "Enable ?";
                }
            }
        };
        this.commands = [
            {
                commandIcon: 'wa-ico-edit',
                commandId: EditType.Edit,
                title: 'Edit'
            },
            {
                commandIcon: 'wa-ico-no',
                commandId: EditType.Delete,
                title: 'Delete',
                hasConfirmation: true,
                confirmationTitle: 'Delete ?'
            }
        ];
        this.tableModel = new ThresholdsInfosModel();
    }
    /**
     * @return {?}
     */
    ThresholdsComponent.prototype.ngOnInit = /**
     * @return {?}
     */
    function () {
        this.reloadData();
    };
    /**
     * @return {?}
     */
    ThresholdsComponent.prototype.ngOnDestroy = /**
     * @return {?}
     */
    function () {
        this.logger.debug(LOG_TAG, 'ngOnDestroy ');
        this.freeMem();
    };
    /**
     * @return {?}
     */
    ThresholdsComponent.prototype.freeMem = /**
     * @return {?}
     */
    function () {
        this.tableModel.close();
    };
    /**
     * @return {?}
     */
    ThresholdsComponent.prototype.reloadData = /**
     * @return {?}
     */
    function () {
        var _this = this;
        this.logger.debug(LOG_TAG, 'reloadData called');
        this.loading = true;
        if (this._counterInfo) {
            this._subHandler.add(this.countersService.getThresholdInfoList(this._counterInfo).subscribe((/**
             * @param {?} data
             * @return {?}
             */
            function (data) {
                _this.logger.debug(LOG_TAG, 'getThresholdInfoList done: ', data);
                _this.tableModel.loadData(data);
                _this.loading = false;
                _this.clearSelection();
            }), (/**
             * @param {?} error
             * @return {?}
             */
            function (error) {
                _this.logger.error(LOG_TAG, 'getThresholdInfoList error: ', error);
                _this.notificationCenter.post({
                    name: 'GetThresholdsListError',
                    title: 'Get Thresholds List',
                    message: 'Error getting thresholds list:',
                    type: NotificationType.Error,
                    error: error,
                    closable: true
                });
                _this.clearSelection();
                _this.loading = false;
            })));
        }
        else {
            this.tableModel.close();
            this.loading = false;
            this.clearSelection();
        }
    };
    /**
     * @private
     * @return {?}
     */
    ThresholdsComponent.prototype.clearSelection = /**
     * @private
     * @return {?}
     */
    function () {
        this.selectedThreshold = null;
        this.selectionChange.emit({
            thresholdName: this.selectedThreshold,
            data: null
        });
    };
    Object.defineProperty(ThresholdsComponent.prototype, "counterInfo", {
        get: /**
         * @return {?}
         */
        function () {
            return this._counterInfo;
        },
        set: /**
         * @param {?} counterInfo
         * @return {?}
         */
        function (counterInfo) {
            this.logger.debug(LOG_TAG, 'set counterInfo:', counterInfo);
            this._counterInfo = counterInfo;
            this.reloadData();
        },
        enumerable: true,
        configurable: true
    });
    /**
     * @param {?} dataItem
     * @return {?}
     */
    ThresholdsComponent.prototype.onStatusTogglePressed = /**
     * @param {?} dataItem
     * @return {?}
     */
    function (dataItem) {
        this.logger.debug(LOG_TAG, 'onStatusTogglePressed dataItem: ', dataItem);
        this.edit.emit({
            editType: EditType.StatusChange,
            dataItem: dataItem
        });
    };
    /**
     * @param {?} event
     * @return {?}
     */
    ThresholdsComponent.prototype.onCommandConfirm = /**
     * @param {?} event
     * @return {?}
     */
    function (event) {
        this.logger.debug(LOG_TAG, 'onCommandConfirm event: ', event);
        this.edit.emit({
            editType: EditType[event.id],
            dataItem: event.rowData.dataItem
        });
    };
    /**
     * @param {?} event
     * @return {?}
     */
    ThresholdsComponent.prototype.onCommandClick = /**
     * @param {?} event
     * @return {?}
     */
    function (event) {
        this.logger.debug(LOG_TAG, 'onCommandClick event: ', event);
        this.edit.emit({
            editType: EditType[event.id],
            dataItem: event.rowData.dataItem
        });
    };
    /**
     * @param {?} event
     * @return {?}
     */
    ThresholdsComponent.prototype.onSelectionChange = /**
     * @param {?} event
     * @return {?}
     */
    function (event) {
        this.logger.debug(LOG_TAG, 'onSelectionChange event: ', event);
        /** @type {?} */
        var data = null;
        if (event.selectedRows.length > 0) {
            this.selectedThreshold = event.selectedRows[0].dataItem.name;
            data = event.selectedRows[0].dataItem;
        }
        else {
            this.selectedThreshold = null;
        }
        this.selectionChange.emit({
            thresholdName: this.selectedThreshold,
            data: data
        });
    };
    ThresholdsComponent.decorators = [
        { type: Component, args: [{
                    // tslint:disable-next-line:component-selector
                    selector: 'wa-threshols-component',
                    template: "<wc-loading-overlay [visible]='loading'></wc-loading-overlay>\n\n<kendo-grid #datagrid [data]=\"tableModel.data\" (selectionChange)=\"onSelectionChange($event)\">\n  <kendo-grid-column field=\"name\" title=\"Name\" width=\"150\"> </kendo-grid-column>\n\n  <kendo-grid-column field=\"description\" title=\"Description\">\n  </kendo-grid-column>\n\n  <kendo-grid-column\n    field=\"created\"\n    title=\"Created\"\n    width=\"150\"\n    format=\"{0:dd/MM/yyyy HH:mm:ss}\"\n  >\n  </kendo-grid-column>\n\n  <kendo-grid-column field=\"enabled\" title=\"Status\">\n    <ng-template\n      kendoGridCellTemplate\n      let-dataItem\n      let-columnIndex=\"columnIndex\"\n      let-rowIndex=\"rowIndex\"\n      let-column=\"column\"\n    >\n    <wc-grid-editor-command\n    [motif-acl]=\"['com.vipera.osgi.bss.countersthresholds.api.rest.CountersThresholdsApi:CREATE:enableThresholdInfo', \n                  'com.vipera.osgi.bss.countersthresholds.api.rest.CountersThresholdsApi:DELETE:disableThresholdInfo']\"\n    [rowIndex]=\"rowIndex\" \n    [hasConfirmation]=\"true\"\n    [confirmationTitleProvider]=\"statusConfirmationTitleProvider\"\n    [columnIndex]=\"columnIndex\" \n    [column]=\"column\" \n    [value]=\"dataItem[column.field]\" \n    [dataItem]=\"dataItem\"\n    (commandConfirm)=\"onStatusTogglePressed(dataItem)\"  \n    >\n    <span *ngIf=\"dataItem.enabled\" class=\"badge badge-status badge-enabled\">\n            ENABLED\n        </span>\n        <span *ngIf=\"!dataItem.enabled\" class=\"badge badge-status  badge-disabled\">\n                DISABLED\n        </span>\n    </wc-grid-editor-command>\n\n  </ng-template>\n  </kendo-grid-column>\n\n  <kendo-grid-column media=\"(min-width: 80px)\" title=\"Deny\" width=\"80\">\n                <ng-template kendoGridCellTemplate let-dataItem>\n                  <label\n                    class=\"k-icon grid-cell-checkbox grid-cell-checkbox-{{\n                      dataItem.deny\n                    }}\"\n                  ></label>\n                </ng-template>\n              </kendo-grid-column>\n\n              <kendo-grid-column media=\"(min-width: 80px)\" title=\"Type\" width=\"80\">\n                        <ng-template kendoGridCellTemplate let-dataItem>\n                          <label>{{dataItem.type}}</label>\n                        </ng-template>\n                      </kendo-grid-column>\n        \n\n  <kendo-grid-column title=\"\">\n    <ng-template\n      kendoGridCellTemplate\n      let-dataItem\n      let-columnIndex=\"columnIndex\"\n      let-rowIndex=\"rowIndex\"\n      let-column=\"column\"\n    >\n      <wc-grid-editor-commands-group\n      [motif-acl]=\"['com.vipera.osgi.bss.countersthresholds.api.rest.CountersThresholdsApi:UPDATE:updateThresholdInfo',\n                    'com.vipera.osgi.bss.countersthresholds.api.rest.CountersThresholdsApi:DELETE:deleteThresholdInfo']\"\n      motif-acl-hidden=\"true\"\n      [rowIndex]=\"rowIndex\"\n      [columnIndex]=\"columnIndex\" \n      [column]=\"column\" \n      [value]=\"dataItem[column.field]\" \n      [dataItem]=\"dataItem\"\n      [commands]=\"commands\"\n        [alignMode]=\"'end'\"\n        (commandConfirm)=\"onCommandConfirm($event)\"\n        (commandClick)=\"onCommandClick($event)\"\n></wc-grid-editor-commands-group>\n    </ng-template>\n  </kendo-grid-column>\n\n  <div *kendoGridDetailTemplate=\"let dataItem\">\n                <wa-threshold-details [dataItem]=\"dataItem\"></wa-threshold-details>\n  </div>\n    \n\n</kendo-grid>\n",
                    styles: [".badge{border-radius:4px;display:inline-block;padding:1px 7px}.badge-status{cursor:pointer;text-decoration:none;font-size:.63rem;line-height:1.3;font-weight:700;padding:3px 7px;text-align:center;vertical-align:baseline;white-space:nowrap}.badge-enabled{background-color:green;color:#fff}.badge-disabled{background-color:gray;color:#454545}.counter-info-row-details{padding:0}.counter-info-row-details p{margin:0;padding:.1rem 0;color:#595959}.counter-info-row-details p a{color:#539653;margin-left:10px}"]
                }] }
    ];
    /** @nocollapse */
    ThresholdsComponent.ctorParameters = function () { return [
        { type: NGXLogger },
        { type: WCNotificationCenter },
        { type: CountersService }
    ]; };
    ThresholdsComponent.propDecorators = {
        selectionChange: [{ type: Output }],
        edit: [{ type: Output }],
        counterInfo: [{ type: Input }]
    };
    return ThresholdsComponent;
}());
export { ThresholdsComponent };
if (false) {
    /** @type {?} */
    ThresholdsComponent.prototype.loading;
    /**
     * @type {?}
     * @private
     */
    ThresholdsComponent.prototype._subHandler;
    /** @type {?} */
    ThresholdsComponent.prototype.tableModel;
    /** @type {?} */
    ThresholdsComponent.prototype.faEdit;
    /**
     * @type {?}
     * @private
     */
    ThresholdsComponent.prototype._counterInfo;
    /** @type {?} */
    ThresholdsComponent.prototype.selectedThreshold;
    /** @type {?} */
    ThresholdsComponent.prototype.selectionChange;
    /** @type {?} */
    ThresholdsComponent.prototype.edit;
    /** @type {?} */
    ThresholdsComponent.prototype.statusConfirmationTitleProvider;
    /** @type {?} */
    ThresholdsComponent.prototype.commands;
    /**
     * @type {?}
     * @private
     */
    ThresholdsComponent.prototype.logger;
    /**
     * @type {?}
     * @private
     */
    ThresholdsComponent.prototype.notificationCenter;
    /**
     * @type {?}
     * @private
     */
    ThresholdsComponent.prototype.countersService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZXNob2xkcy1jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9tb3RpZi13ZWItYWRtaW4tY29yZS8iLCJzb3VyY2VzIjpbImxpYi9zZWN0aW9ucy9Db3VudGVyc0FuZFRocmVzaG9sZHMvY29tcG9uZW50cy90aHJlc2hvbGRzL3RocmVzaG9sZHMtY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBdUIsTUFBTSxnREFBZ0QsQ0FBQztBQUN0RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztJQUVyRCxPQUFPLEdBQUcsdUJBQXVCOzs7O0FBRXZDLG9DQUdDOzs7SUFGRyx1Q0FBc0I7O0lBQ3RCLDhCQUFTOzs7O0lBSVQsUUFBUyxRQUFRO0lBQ2pCLE1BQU8sTUFBTTtJQUNiLGNBQWUsY0FBYzs7Ozs7O0FBR2pDLCtCQUdDOzs7SUFGRyw2QkFBa0I7O0lBQ2xCLDZCQUE4Qjs7QUFHbEM7SUE0Q0ksNkJBQ1ksTUFBaUIsRUFDakIsa0JBQXdDLEVBQ3hDLGVBQWdDO1FBRmhDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFzQjtRQUN4QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUF0QzVDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDUixnQkFBVyxHQUEwQixJQUFJ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QUFlOzs7a0NBdUNuQixNQUFNO3VCQUNOLE1BQU07OEJBc0ZOLEtBQUs7O0lBaURWLDBCQUFDO0NBQUEsQUF4SkQsSUF3SkM7U0FsSlksbUJBQW1COzs7SUFHNUIsc0NBQWdCOzs7OztJQUNoQiwwQ0FBeUU7O0lBQ3pFLHlDQUF3Qzs7SUFDeEMscUNBQWdCOzs7OztJQUNoQiwyQ0FBNkI7O0lBQzdCLGdEQUEwQjs7SUFFMUIsOENBQThFOztJQUM5RSxtQ0FBd0U7O0lBRXhFLDhEQVFDOztJQUVELHVDQWFFOzs7OztJQUdFLHFDQUF5Qjs7Ozs7SUFDekIsaURBQWdEOzs7OztJQUNoRCw4Q0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXQ0dyaWRFZGl0b3JDb21tYW5kc0NvbmZpZywgV0NHcmlkRWRpdG9yQ29tbWFuZENvbXBvbmVudEV2ZW50LCBXQ0NvbmZpcm1hdGlvblRpdGxlUHJvdmlkZXIgIH0gZnJvbSAnd2ViLWNvbnNvbGUtdWkta2l0JztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdYTG9nZ2VyfSBmcm9tICd3ZWItY29uc29sZS1jb3JlJztcbmltcG9ydCB7IFdDTm90aWZpY2F0aW9uQ2VudGVyLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnd2ViLWNvbnNvbGUtdWkta2l0JztcbmltcG9ydCB7IENvdW50ZXJzU2VydmljZSwgVGhyZXNob2xkSW5mb0VudGl0eSB9IGZyb20gJ0B3YS1tb3RpZi1vcGVuLWFwaS9jb3VudGVycy10aHJlc2hvbGRzLXNlcnZpY2UnO1xuaW1wb3J0IHsgV0NTdWJzY3JpcHRpb25IYW5kbGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tcG9uZW50cy9Db21tb25zL3djLXN1YnNjcmlwdGlvbi1oYW5kbGVyJztcbmltcG9ydCB7IFRocmVzaG9sZHNJbmZvc01vZGVsIH0gZnJvbSAnLi9kYXRhL21vZGVsJzsgXG5pbXBvcnQgeyBmYUVkaXQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuXG5jb25zdCBMT0dfVEFHID0gJ1tUaHJlc2hvbGRzQ29tcG9uZW50XSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uRXZlbnQge1xuICAgIHRocmVzaG9sZE5hbWU6IHN0cmluZztcbiAgICBkYXRhOiBhbnlcbn1cblxuZXhwb3J0IGVudW0gRWRpdFR5cGUge1xuICAgIERlbGV0ZSA9ICdEZWxldGUnLFxuICAgIEVkaXQgPSAnRWRpdCcsXG4gICAgU3RhdHVzQ2hhbmdlID0gJ1N0YXR1c0NoYW5nZSdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFZGl0RXZlbnQge1xuICAgIGVkaXRUeXBlOiBFZGl0VHlwZVxuICAgIGRhdGFJdGVtOiBUaHJlc2hvbGRJbmZvRW50aXR5O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICd3YS10aHJlc2hvbHMtY29tcG9uZW50JyxcbiAgICBzdHlsZVVybHM6IFsnLi90aHJlc2hvbGRzLWNvbXBvbmVudC5zY3NzJ10sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RocmVzaG9sZHMtY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRocmVzaG9sZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cblxuICAgIGxvYWRpbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9zdWJIYW5kbGVyOiBXQ1N1YnNjcmlwdGlvbkhhbmRsZXIgPSBuZXcgV0NTdWJzY3JpcHRpb25IYW5kbGVyKCk7XG4gICAgcHVibGljIHRhYmxlTW9kZWw6IFRocmVzaG9sZHNJbmZvc01vZGVsO1xuICAgIGZhRWRpdCA9IGZhRWRpdDtcbiAgICBwcml2YXRlIF9jb3VudGVySW5mbzogc3RyaW5nO1xuICAgIHNlbGVjdGVkVGhyZXNob2xkOiBzdHJpbmc7XG5cbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlIDogRXZlbnRFbWl0dGVyPFNlbGVjdGlvbkV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgZWRpdDogRXZlbnRFbWl0dGVyPEVkaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRFdmVudD4oKTtcblxuICAgIHN0YXR1c0NvbmZpcm1hdGlvblRpdGxlUHJvdmlkZXI6IFdDQ29uZmlybWF0aW9uVGl0bGVQcm92aWRlciA9IHtcbiAgICAgICAgZ2V0VGl0bGUocm93RGF0YSk6IHN0cmluZyB7XG4gICAgICAgICAgICBpZiAocm93RGF0YS5lbmFibGVkKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJEaXNhYmxlID9cIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiRW5hYmxlID9cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBjb21tYW5kczogV0NHcmlkRWRpdG9yQ29tbWFuZHNDb25maWcgPSBbXG4gICAgICAgIHsgXG4gICAgICAgICAgICBjb21tYW5kSWNvbjogJ3dhLWljby1lZGl0JyxcbiAgICAgICAgICAgIGNvbW1hbmRJZDogRWRpdFR5cGUuRWRpdCxcbiAgICAgICAgICAgIHRpdGxlOiAnRWRpdCdcbiAgICAgICAgfSxcbiAgICAgICAgeyBcbiAgICAgICAgICAgIGNvbW1hbmRJY29uOiAnd2EtaWNvLW5vJyxcbiAgICAgICAgICAgIGNvbW1hbmRJZDogRWRpdFR5cGUuRGVsZXRlLFxuICAgICAgICAgICAgdGl0bGU6ICdEZWxldGUnLFxuICAgICAgICAgICAgaGFzQ29uZmlybWF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlybWF0aW9uVGl0bGU6ICdEZWxldGUgPycgXG4gICAgICAgIH1cbiAgICBdO1xuICAgIFxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGxvZ2dlcjogTkdYTG9nZ2VyLFxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvbkNlbnRlcjogV0NOb3RpZmljYXRpb25DZW50ZXIsXG4gICAgICAgIHByaXZhdGUgY291bnRlcnNTZXJ2aWNlOiBDb3VudGVyc1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy50YWJsZU1vZGVsID0gbmV3IFRocmVzaG9sZHNJbmZvc01vZGVsKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucmVsb2FkRGF0YSgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHICwgJ25nT25EZXN0cm95ICcpO1xuICAgICAgICB0aGlzLmZyZWVNZW0oKTtcbiAgICB9XG5cbiAgICBmcmVlTWVtKCkge1xuICAgICAgICB0aGlzLnRhYmxlTW9kZWwuY2xvc2UoKTtcbiAgICB9XG5cbiAgICByZWxvYWREYXRhKCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAncmVsb2FkRGF0YSBjYWxsZWQnKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuX2NvdW50ZXJJbmZvKXtcbiAgICAgICAgICAgIHRoaXMuX3N1YkhhbmRsZXIuYWRkKHRoaXMuY291bnRlcnNTZXJ2aWNlLmdldFRocmVzaG9sZEluZm9MaXN0KHRoaXMuX2NvdW50ZXJJbmZvKS5zdWJzY3JpYmUoIChkYXRhOiBBcnJheTxUaHJlc2hvbGRJbmZvRW50aXR5PikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdnZXRUaHJlc2hvbGRJbmZvTGlzdCBkb25lOiAnLCBkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlTW9kZWwubG9hZERhdGEoZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoTE9HX1RBRywgJ2dldFRocmVzaG9sZEluZm9MaXN0IGVycm9yOiAnLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DZW50ZXIucG9zdCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdHZXRUaHJlc2hvbGRzTGlzdEVycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdHZXQgVGhyZXNob2xkcyBMaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Vycm9yIGdldHRpbmcgdGhyZXNob2xkcyBsaXN0OicsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICAgICAgY2xvc2FibGU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlTW9kZWwuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyU2VsZWN0aW9uKCl7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaHJlc2hvbGQgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHRocmVzaG9sZE5hbWU6IHRoaXMuc2VsZWN0ZWRUaHJlc2hvbGQsXG4gICAgICAgICAgICBkYXRhOiBudWxsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHB1YmxpYyBzZXQgY291bnRlckluZm8oY291bnRlckluZm86IHN0cmluZykge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnc2V0IGNvdW50ZXJJbmZvOicsIGNvdW50ZXJJbmZvKTtcbiAgICAgICAgdGhpcy5fY291bnRlckluZm8gPSBjb3VudGVySW5mbztcbiAgICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb3VudGVySW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY291bnRlckluZm87XG4gICAgfVxuXG4gICAgb25TdGF0dXNUb2dnbGVQcmVzc2VkKGRhdGFJdGVtKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdvblN0YXR1c1RvZ2dsZVByZXNzZWQgZGF0YUl0ZW06ICcsIGRhdGFJdGVtKTtcbiAgICAgICAgdGhpcy5lZGl0LmVtaXQoe1xuICAgICAgICAgICAgZWRpdFR5cGU6IEVkaXRUeXBlLlN0YXR1c0NoYW5nZSxcbiAgICAgICAgICAgIGRhdGFJdGVtOiBkYXRhSXRlbVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIG9uQ29tbWFuZENvbmZpcm0oZXZlbnQ6IFdDR3JpZEVkaXRvckNvbW1hbmRDb21wb25lbnRFdmVudCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnb25Db21tYW5kQ29uZmlybSBldmVudDogJywgZXZlbnQpO1xuICAgICAgICB0aGlzLmVkaXQuZW1pdCh7XG4gICAgICAgICAgICBlZGl0VHlwZTogRWRpdFR5cGVbZXZlbnQuaWRdLFxuICAgICAgICAgICAgZGF0YUl0ZW06IGV2ZW50LnJvd0RhdGEuZGF0YUl0ZW1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBvbkNvbW1hbmRDbGljayhldmVudDogV0NHcmlkRWRpdG9yQ29tbWFuZENvbXBvbmVudEV2ZW50KXtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ29uQ29tbWFuZENsaWNrIGV2ZW50OiAnLCBldmVudCk7XG4gICAgICAgIHRoaXMuZWRpdC5lbWl0KHtcbiAgICAgICAgICAgIGVkaXRUeXBlOiBFZGl0VHlwZVtldmVudC5pZF0sXG4gICAgICAgICAgICBkYXRhSXRlbTogZXZlbnQucm93RGF0YS5kYXRhSXRlbVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIG9uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdvblNlbGVjdGlvbkNoYW5nZSBldmVudDogJywgZXZlbnQpO1xuICAgICAgICBsZXQgZGF0YSA9IG51bGw7XG4gICAgICAgIGlmIChldmVudC5zZWxlY3RlZFJvd3MubGVuZ3RoPjApe1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRocmVzaG9sZCA9IGV2ZW50LnNlbGVjdGVkUm93c1swXS5kYXRhSXRlbS5uYW1lO1xuICAgICAgICAgICAgZGF0YSA9IGV2ZW50LnNlbGVjdGVkUm93c1swXS5kYXRhSXRlbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaHJlc2hvbGQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgdGhyZXNob2xkTmFtZTogdGhpcy5zZWxlY3RlZFRocmVzaG9sZCxcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSk7XG4gICAgfVxuXG59XG4iXX0=