UNPKG

@kre-form/ant

Version:

524 lines 38.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, Output, EventEmitter } from "@angular/core"; /** * @record */ export function ITableQuery() { } if (false) { /** @type {?} */ ITableQuery.prototype.total; /** @type {?} */ ITableQuery.prototype.pageIndex; /** @type {?} */ ITableQuery.prototype.pageSize; /** @type {?|undefined} */ ITableQuery.prototype.sortName; /** @type {?|undefined} */ ITableQuery.prototype.sortValue; /** @type {?|undefined} */ ITableQuery.prototype.parameter; /** @type {?} */ ITableQuery.prototype.keyWord; } /** * @record */ export function ITableHeader() { } if (false) { /** @type {?|undefined} */ ITableHeader.prototype.key; /** @type {?|undefined} */ ITableHeader.prototype.name; /** @type {?|undefined} */ ITableHeader.prototype.width; /** @type {?|undefined} */ ITableHeader.prototype.minWidth; /** @type {?|undefined} */ ITableHeader.prototype.filterList; /** @type {?|undefined} */ ITableHeader.prototype.checkboxable; /** @type {?} */ ITableHeader.prototype.sortable; /** @type {?|undefined} */ ITableHeader.prototype.hiden; /** @type {?|undefined} */ ITableHeader.prototype.action; /* Skipping unhandled member: [additionalProperties: string]: any;*/ } /** * @record */ export function ITableButton() { } if (false) { /** @type {?|undefined} */ ITableButton.prototype.type; /** @type {?|undefined} */ ITableButton.prototype.text; } var KreFormPrivateTable = /** @class */ (function () { function KreFormPrivateTable() { //tableId this.id = ""; //是否要多选 this.check = false; //是否有操作列0 没有操作列;1 多个操作按钮 2 选择 this.action = 0; //按钮列表 this.buttonlist = []; //选中事件 this.checkChangeEvent = new EventEmitter(); //翻页事件 this.pageIndexEvent = new EventEmitter(); //排序事件 this.orderChangeEvent = new EventEmitter(); //过滤事件 this.filterChangeEvent = new EventEmitter(); //操作事件 this.buttonAction = new EventEmitter(); this.checkIds = []; this._headerData = []; this.isAllChecked = false; this.isIndeterminate = false; this.listData = []; this.listDataCheckedId = {}; this.listDataSelectedList = []; this.query = { total: 0, pageIndex: 1, pageSize: 15, sortName: "", sortValue: "", keyWord: "" }; this.tableScroll = { y: '332px' }; } Object.defineProperty(KreFormPrivateTable.prototype, "tableIndex", { get: /** * @return {?} */ function () { return this.query.pageIndex; }, set: /** * @param {?} value * @return {?} */ function (value) { this.query.pageIndex = value; }, enumerable: true, configurable: true }); Object.defineProperty(KreFormPrivateTable.prototype, "tableSize", { get: /** * @return {?} */ function () { return this.query.pageSize; }, set: /** * @param {?} value * @return {?} */ function (value) { this.query.pageSize = value; }, enumerable: true, configurable: true }); Object.defineProperty(KreFormPrivateTable.prototype, "tableTotal", { get: /** * @return {?} */ function () { return this.query.total; }, set: /** * @param {?} value * @return {?} */ function (value) { this.query.total = value; }, enumerable: true, configurable: true }); Object.defineProperty(KreFormPrivateTable.prototype, "header", { get: /** * @return {?} */ function () { return this._headerData; }, //table 头部信息 set: //table 头部信息 /** * @param {?} value * @return {?} */ function (value) { var _this = this; if (value != null && value.length > 0) { value.forEach((/** * @param {?} item * @return {?} */ function (item) { item.prop = item.key; if (item.checkboxable) { item.name = ""; item.width = 50; item.canAutoResize = false; item.resizeable = false; item.frozenLeft = true; item.checkboxable = true; item.headerCheckboxable = true; } if (item.action) { item.frozenRight = true; item.canAutoResize = false; item.resizeable = false; } _this._headerData.push(item); })); } }, enumerable: true, configurable: true }); Object.defineProperty(KreFormPrivateTable.prototype, "body", { //table 行数据 set: //table 行数据 /** * @param {?} value * @return {?} */ function (value) { this.listData = value; if (this.listData == null || this.listData.length == 0) { this.tableScroll.y = "0px"; } else { this.tableScroll.y = "332px"; } }, enumerable: true, configurable: true }); Object.defineProperty(KreFormPrivateTable.prototype, "checkid", { //默认选中Id set: //默认选中Id /** * @param {?} value * @return {?} */ function (value) { var _this = this; this.listDataSelectedList = []; if (value != null && value.length > 0) { value.forEach((/** * @param {?} item * @return {?} */ function (item) { _this.listDataCheckedId[item.id] = true; _this.listDataSelectedList.push(item); })); } }, enumerable: true, configurable: true }); /** * @param {?} changes * @return {?} */ KreFormPrivateTable.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { }; /** * @return {?} */ KreFormPrivateTable.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @return {?} */ KreFormPrivateTable.prototype.ngOnDestroy = /** * @return {?} */ function () { }; //全选|全不选 //全选|全不选 /** * @param {?} value * @return {?} */ KreFormPrivateTable.prototype.setCheckAll = //全选|全不选 /** * @param {?} value * @return {?} */ function (value) { var _this = this; this.listData.forEach((/** * @param {?} item * @return {?} */ function (item) { return (_this.listDataCheckedId[item.id] = value); })); this.setCheckStatus(); }; //设置某个选择|取消选中 //设置某个选择|取消选中 /** * @return {?} */ KreFormPrivateTable.prototype.setCheckStatus = //设置某个选择|取消选中 /** * @return {?} */ function () { var _this = this; this.isAllChecked = this.listData.every((/** * @param {?} item * @return {?} */ function (item) { return _this.listDataCheckedId[item.id]; })); this.isIndeterminate = this.listData.some((/** * @param {?} item * @return {?} */ function (item) { return _this.listDataCheckedId[item.id]; })) && !this.isAllChecked; this.saveSelected(); }; //点击查询 //点击查询 /** * @return {?} */ KreFormPrivateTable.prototype.queryChange = //点击查询 /** * @return {?} */ function () { this.pageIndexEvent.emit(this.query); }; //点击翻页 //点击翻页 /** * @param {?} e * @return {?} */ KreFormPrivateTable.prototype.pageIndexChange = //点击翻页 /** * @param {?} e * @return {?} */ function (e) { this.query.pageIndex = e; this.pageIndexEvent.emit(this.query); }; //点击排序 //点击排序 /** * @param {?} sort * @return {?} */ KreFormPrivateTable.prototype.tableSort = //点击排序 /** * @param {?} sort * @return {?} */ function (sort) { this.query.sortName = sort.key; this.query.sortValue = sort.value; this.orderChangeEvent.emit(this.query); }; //单击选中 //单击选中 /** * @param {?} event * @return {?} */ KreFormPrivateTable.prototype.itemSelectChange = //单击选中 /** * @param {?} event * @return {?} */ function (event) { this.listDataSelectedList.shift(); this.listDataSelectedList.push({ "id": event.id, "name": event.name }); this.checkChangeEvent.emit(this.listDataSelectedList); }; //保存选中 //保存选中 /** * @return {?} */ KreFormPrivateTable.prototype.saveSelected = //保存选中 /** * @return {?} */ function () { var _this = this; Object.keys(this.listDataCheckedId).forEach((/** * @param {?} id * @return {?} */ function (id) { /** @type {?} */ var value = _this.listDataCheckedId[id]; if (value) { if (!_this.listDataSelectedList.some((/** * @param {?} item * @return {?} */ function (item) { return item.id == id; }))) { _this.listData.forEach((/** * @param {?} item * @param {?} index * @param {?} object * @return {?} */ function (item, index, object) { if (item.id == id) { _this.listDataSelectedList.push({ id: item.id, name: item.name }); } })); } } else { _this.listDataSelectedList.forEach((/** * @param {?} item * @param {?} index * @param {?} object * @return {?} */ function (item, index, object) { if (item.id == id) { object.splice(index, 1); } })); } })); this.checkChangeEvent.emit(this.listDataSelectedList); }; /** * @return {?} */ KreFormPrivateTable.prototype.selectAllClear = /** * @return {?} */ function () { this.isAllChecked = false; this.isIndeterminate = false; this.listDataCheckedId = {}; this.listDataSelectedList = []; }; /** * @param {?} id * @return {?} */ KreFormPrivateTable.prototype.selectClearById = /** * @param {?} id * @return {?} */ function (id) { this.listDataCheckedId[id] = false; this.setCheckStatus(); }; KreFormPrivateTable.decorators = [ { type: Component, args: [{ selector: "kreform-private-table", template: "<div class=\"kre-form-table\">\n <div class=\"kre-form-table-header\">\n <div class=\"header-button\">\n <nz-input-group nzSearch [nzAddOnAfter]=\"suffixIconButton\">\n <input type=\"text\" nz-input placeholder=\"\u8BF7\u8F93\u5165\u5173\u952E\u5B57\u641C\u7D22\" maxlength=\"50\" [(ngModel)]=\"query.keyWord\" />\n </nz-input-group>\n <ng-template #suffixIconButton>\n <button nz-button nzType=\"primary\" nzSearch (click)=\"queryChange()\"><i nz-icon nzType=\"search\"></i></button>\n </ng-template>\n <ng-content></ng-content>\n </div>\n <div class=\"header-pagination\">\n <nz-pagination [nzTotal]=\"query.total\" [nzPageIndex]=\"query.pageIndex\" [nzPageSize]=\"query.pageSize\" [nzSize]=\"'small'\" (nzPageIndexChange)=\"pageIndexChange($event)\"></nz-pagination>\n </div>\n </div>\n <div class=\"kre-form-table-content\">\n <nz-table [nzFrontPagination]=\"false\" nzShowPagination nzShowSizeChanger #rowSelectionTable [nzData]=\"listData\" [nzScroll]=\"tableScroll\">\n <thead>\n <tr>\n <ng-container *ngIf=\"check\">\n <th nzWidth=\"50px\" nzLeft=\"0px\" nzShowCheckbox [(nzChecked)]=\"isAllChecked\" [nzIndeterminate]=\"isIndeterminate\" (nzCheckedChange)=\"setCheckAll($event)\"></th>\n </ng-container>\n <ng-container *ngFor=\"let item of header\">\n <ng-container *ngIf=\"item.hiden!=true && item.action!=true\">\n <th [nzWidth]=\"item.width+'px'\">{{item.name}}</th>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"action!=0\">\n <th nzRight=\"0px\" [nzWidth]=\"'100px'\">\u64CD\u4F5C</th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let data of rowSelectionTable.data\">\n <ng-container *ngIf=\"check\">\n <td nzShowCheckbox [(nzChecked)]=\"listDataCheckedId[data.id]\" (nzCheckedChange)=\"setCheckStatus()\"></td>\n </ng-container>\n <ng-container *ngFor=\"let item of header\">\n <ng-container *ngIf=\"item.hiden!=true && item.action!=true\">\n <td>{{data[item.key]}}</td>\n </ng-container> \n </ng-container>\n <ng-container *ngIf=\"action==2\">\n <td><span class=\"itemSelect\" (click)=\"itemSelectChange(data)\">\u9009\u62E9</span></td>\n </ng-container>\n\n </tr>\n </tbody>\n </nz-table>\n </div>\n <div class=\"kre-form-table-footer\">\n <div class=\"tag-header\">\n <label>\u5DF2\u9009<span>{{listDataSelectedList.length}}</span></label>\n <label (click)=\"selectAllClear()\">\u6E05\u7A7A</label>\n </div>\n <div class=\"tag-content kreform-scrollbar \"> \n <ng-container *ngFor=\"let item of listDataSelectedList\">\n <nz-tag nzMode=\"closeable\" (nzOnClose)=\"selectClearById(item.id)\">{{item.name}}</nz-tag>\n </ng-container>\n </div>\n </div>\n</div>", styles: [":host ::ng-deep{width:100%}:host ::ng-deep .kre-form-table{background:#fff;display:flex;flex:1;flex-direction:column}:host ::ng-deep .kre-form-table-header{display:flex;flex-direction:row;padding:10px}:host ::ng-deep .kre-form-table-header .header-button{flex:1}:host ::ng-deep .kre-form-table-header .header-button nz-input-group{width:260px;margin-right:10px}:host ::ng-deep .kre-form-table-header .header-button .ant-input{font-size:12px}:host ::ng-deep .kre-form-table-header .hader-pagination{width:300px}:host ::ng-deep .kre-form-table-content{display:flex;flex-direction:row;flex:1;padding:0 10px}:host ::ng-deep .kre-form-table-content nz-table{flex:1}:host ::ng-deep .kre-form-table-content .ant-table{font-size:12px}:host ::ng-deep .kre-form-table-content .ant-table .ant-table-placeholder{border-bottom:0}:host ::ng-deep .kre-form-table-content .ant-table .ant-empty-normal{margin:115px 0}:host ::ng-deep .kre-form-table-content .ant-table-body{height:332px}:host ::ng-deep .kre-form-table-content .itemSelect{cursor:pointer}:host ::ng-deep .kre-form-table-footer{height:78px;margin:0 10px;padding:10px;background-color:#f6f7fb;display:flex;flex-direction:row}:host ::ng-deep .kre-form-table-footer .tag-header{font-size:12px;font-weight:700;color:#777d93;padding:0 0 20px}:host ::ng-deep .kre-form-table-footer .tag-header span{display:inline-block;padding:0 3px;color:#ff986b;font-weight:400}:host ::ng-deep .kre-form-table-footer .tag-header label:nth-child(1){display:inline-block;width:100%}:host ::ng-deep .kre-form-table-footer .tag-header label:nth-child(2){display:inline-block;width:100%;font-weight:400;color:#6375da;cursor:pointer;margin-top:5px}:host ::ng-deep .kre-form-table-footer .tag-content{flex:1}:host ::ng-deep .kre-form-table-footer .tag-content .ant-tag{color:#6375da;border:0;padding:3px 8px;margin:0 10px 10px 0;background:#fff}:host ::ng-deep .kre-form-table-footer .tag-content .ant-tag i{color:#6375da;font-weight:700}:host ::ng-deep .kre-form-table .ant-table-wrapper{border:1px solid #e8e8e8}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-thead tr th{padding:6px 10px;background-color:#fff;border-right:1px solid #e8e8e8}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-thead tr th:nth-last-child(1){border-right:0!important}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-thead tr th.ant-table-column-has-actions.ant-table-column-has-sorters:hover{background:#fff}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-tbody tr td{border:0;padding:6px 10px}:host ::ng-deep .kre-form-table .ant-table-wrapper .ant-table-tbody tr:nth-child(odd){background-color:#f6f8fd}:host ::ng-deep .kre-form-table .ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body{scrollbar-color:transparent!important;overflow-y:overlay!important}:host ::ng-deep .kre-form-table .ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body::-webkit-scrollbar{width:6px;height:6px}:host ::ng-deep .kre-form-table .ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body::-webkit-scrollbar-track{box-shadow:inset 0 0 6px transparent}:host ::ng-deep .kre-form-table .ant-table-fixed-header>.ant-table-content>.ant-table-scroll>.ant-table-body::-webkit-scrollbar-thumb{background-color:#999;border-radius:6px;outline:#333 solid 1px}:host ::ng-deep .kre-form-table .ant-table-header{background:#fff;margin-bottom:0!important;overflow:hidden!important}:host ::ng-deep .kre-form-table .table-action{background:red;padding:3px 8px;border-radius:12px;color:#fff;font-size:12px;cursor:pointer}"] }] } ]; /** @nocollapse */ KreFormPrivateTable.ctorParameters = function () { return []; }; KreFormPrivateTable.propDecorators = { tableIndex: [{ type: Input }], tableSize: [{ type: Input }], tableTotal: [{ type: Input }], id: [{ type: Input }], check: [{ type: Input }], action: [{ type: Input }], header: [{ type: Input }], body: [{ type: Input }], buttonlist: [{ type: Input }], checkid: [{ type: Input }], checkChangeEvent: [{ type: Output }], pageIndexEvent: [{ type: Output }], orderChangeEvent: [{ type: Output }], filterChangeEvent: [{ type: Output }], buttonAction: [{ type: Output }] }; return KreFormPrivateTable; }()); export { KreFormPrivateTable }; if (false) { /** @type {?} */ KreFormPrivateTable.prototype.id; /** @type {?} */ KreFormPrivateTable.prototype.check; /** @type {?} */ KreFormPrivateTable.prototype.action; /** @type {?} */ KreFormPrivateTable.prototype.buttonlist; /** @type {?} */ KreFormPrivateTable.prototype.checkChangeEvent; /** @type {?} */ KreFormPrivateTable.prototype.pageIndexEvent; /** @type {?} */ KreFormPrivateTable.prototype.orderChangeEvent; /** @type {?} */ KreFormPrivateTable.prototype.filterChangeEvent; /** @type {?} */ KreFormPrivateTable.prototype.buttonAction; /** @type {?} */ KreFormPrivateTable.prototype.checkIds; /** @type {?} */ KreFormPrivateTable.prototype._headerData; /** @type {?} */ KreFormPrivateTable.prototype.isAllChecked; /** @type {?} */ KreFormPrivateTable.prototype.isIndeterminate; /** @type {?} */ KreFormPrivateTable.prototype.listData; /** @type {?} */ KreFormPrivateTable.prototype.listDataCheckedId; /** @type {?} */ KreFormPrivateTable.prototype.listDataSelectedList; /** @type {?} */ KreFormPrivateTable.prototype.query; /** @type {?} */ KreFormPrivateTable.prototype.tableScroll; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGtyZS1mb3JtL2FudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3ByaXZhdGUvdGFibGUvaW5kZXguY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQU1iLE1BQU0sZUFBZSxDQUFDOzs7O0FBRXZCLGlDQVFDOzs7SUFQQyw0QkFBYzs7SUFDZCxnQ0FBa0I7O0lBQ2xCLCtCQUFpQjs7SUFDakIsK0JBQWtCOztJQUNsQixnQ0FBbUI7O0lBQ25CLGdDQUFnQjs7SUFDaEIsOEJBQWU7Ozs7O0FBRWpCLGtDQVlDOzs7SUFYQywyQkFBVTs7SUFDViw0QkFBYzs7SUFFZCw2QkFBZTs7SUFDZixnQ0FBa0I7O0lBQ2xCLGtDQUFpQjs7SUFDakIsb0NBQXVCOztJQUN2QixnQ0FBa0I7O0lBQ2xCLDZCQUFnQjs7SUFDaEIsOEJBQWlCOzs7Ozs7QUFJbkIsa0NBR0M7OztJQUZDLDRCQUFjOztJQUNkLDRCQUFjOztBQUtoQjtJQTZIRTs7UUFoR1MsT0FBRSxHQUFTLEVBQUUsQ0FBQzs7UUFHZCxVQUFLLEdBQUcsS0FBSyxDQUFDOztRQUdkLFdBQU0sR0FBRyxDQUFDLENBQUM7O1FBMENYLGVBQVUsR0FBbUIsRUFBRSxDQUFDOztRQWUvQixxQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7UUFFekQsbUJBQWMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7UUFFdkQscUJBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7O1FBRXpELHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDOztRQUUxRCxpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRy9ELGFBQVEsR0FBYSxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBUyxFQUFFLENBQUM7UUFFdkIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFeEIsYUFBUSxHQUFVLEVBQUUsQ0FBQztRQUNyQixzQkFBaUIsR0FBK0IsRUFBRSxDQUFDO1FBQ25ELHlCQUFvQixHQUFVLEVBQUUsQ0FBQztRQUVqQyxVQUFLLEdBQWdCO1lBQ25CLEtBQUssRUFBRSxDQUFDO1lBQ1IsU0FBUyxFQUFDLENBQUM7WUFDWCxRQUFRLEVBQUUsRUFBRTtZQUNaLFFBQVEsRUFBRSxFQUFFO1lBQ1osU0FBUyxFQUFFLEVBQUU7WUFDYixPQUFPLEVBQUMsRUFBRTtTQUNYLENBQUE7UUFDRCxnQkFBVyxHQUFHO1lBQ1osQ0FBQyxFQUFFLE9BQU87U0FDWCxDQUFDO0lBRWEsQ0FBQztJQXRIaEIsc0JBQWEsMkNBQVU7Ozs7UUFHdkI7WUFDRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQzlCLENBQUM7Ozs7O1FBTEQsVUFBd0IsS0FBWTtZQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBQyxLQUFLLENBQUM7UUFDN0IsQ0FBQzs7O09BQUE7SUFLRCxzQkFBYSwwQ0FBUzs7OztRQUd0QjtZQUNFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDN0IsQ0FBQzs7Ozs7UUFMRCxVQUF1QixLQUFZO1lBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFDLEtBQUssQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUtELHNCQUFhLDJDQUFVOzs7O1FBR3ZCO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMxQixDQUFDOzs7OztRQUxELFVBQXdCLEtBQVk7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUMsS0FBSyxDQUFDO1FBQ3pCLENBQUM7OztPQUFBO0lBZUQsc0JBQ0ksdUNBQU07Ozs7UUFzQlY7WUFDRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUIsQ0FBQztRQTFCRCxZQUFZOzs7Ozs7O1FBQ1osVUFDVyxLQUFxQjtZQURoQyxpQkFzQkM7WUFwQkMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQyxLQUFLLENBQUMsT0FBTzs7OztnQkFBQyxVQUFBLElBQUk7b0JBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztvQkFDckIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO3dCQUNyQixJQUFJLENBQUMsSUFBSSxHQUFDLEVBQUUsQ0FBQzt3QkFDYixJQUFJLENBQUMsS0FBSyxHQUFDLEVBQUUsQ0FBQzt3QkFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3dCQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzt3QkFDekIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztxQkFDaEM7b0JBQ0QsSUFBRyxJQUFJLENBQUMsTUFBTSxFQUFDO3dCQUNiLElBQUksQ0FBQyxXQUFXLEdBQUMsSUFBSSxDQUFDO3dCQUN0QixJQUFJLENBQUMsYUFBYSxHQUFDLEtBQUssQ0FBQzt3QkFDekIsSUFBSSxDQUFDLFVBQVUsR0FBQyxLQUFLLENBQUM7cUJBQ3ZCO29CQUNELEtBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5QixDQUFDLEVBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQzs7O09BQUE7SUFNRCxzQkFDSSxxQ0FBSTtRQUZSLFdBQVc7Ozs7Ozs7UUFDWCxVQUNTLEtBQVk7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBRyxJQUFJLENBQUMsUUFBUSxJQUFFLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBRSxDQUFDLEVBQUM7Z0JBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFDLEtBQUssQ0FBQzthQUMxQjtpQkFBSTtnQkFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBQyxPQUFPLENBQUM7YUFDNUI7UUFDSCxDQUFDOzs7T0FBQTtJQU1ELHNCQUNJLHdDQUFPO1FBRlgsUUFBUTs7Ozs7OztRQUNSLFVBQ1ksS0FBWTtZQUR4QixpQkFTQztZQVBDLElBQUksQ0FBQyxvQkFBb0IsR0FBQyxFQUFFLENBQUM7WUFDN0IsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQyxLQUFLLENBQUMsT0FBTzs7OztnQkFBQyxVQUFBLElBQUk7b0JBQ2hCLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUN2QyxLQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxDQUFDLEVBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQzs7O09BQUE7Ozs7O0lBdUNELHlDQUFXOzs7O0lBQVgsVUFBWSxPQUFzQixJQUFHLENBQUM7Ozs7SUFHdEMsc0NBQVE7OztJQUFSO0lBRUEsQ0FBQzs7OztJQUVELHlDQUFXOzs7SUFBWDtJQUVBLENBQUM7SUFFRCxRQUFROzs7Ozs7SUFDUix5Q0FBVzs7Ozs7O0lBQVgsVUFBWSxLQUFjO1FBQTFCLGlCQUdDO1FBRkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxDQUFDLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQXpDLENBQXlDLEVBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGFBQWE7Ozs7O0lBQ2IsNENBQWM7Ozs7O0lBQWQ7UUFBQSxpQkFJQztRQUhDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLOzs7O1FBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxLQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUEvQixDQUErQixFQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7Ozs7UUFBQyxVQUFBLElBQUksSUFBSSxPQUFBLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQS9CLENBQStCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDekcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFHRCxNQUFNOzs7OztJQUNOLHlDQUFXOzs7OztJQUFYO1FBRUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxNQUFNOzs7Ozs7SUFDTiw2Q0FBZTs7Ozs7O0lBQWYsVUFBZ0IsQ0FBUTtRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxNQUFNOzs7Ozs7SUFDTix1Q0FBUzs7Ozs7O0lBQVQsVUFBVSxJQUFvQztRQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELE1BQU07Ozs7OztJQUNOLDhDQUFnQjs7Ozs7O0lBQWhCLFVBQWlCLEtBQVM7UUFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7WUFDN0IsSUFBSSxFQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2IsTUFBTSxFQUFDLEtBQUssQ0FBQyxJQUFJO1NBQ2xCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELE1BQU07Ozs7O0lBQ04sMENBQVk7Ozs7O0lBQVo7UUFBQSxpQkF5QkM7UUF4QkMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQSxFQUFFOztnQkFDeEMsS0FBSyxHQUFHLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBRyxLQUFLLEVBQUM7Z0JBQ1IsSUFBRyxDQUFDLEtBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJOzs7O2dCQUFDLFVBQUEsSUFBSSxJQUFHLE9BQU8sSUFBSSxDQUFDLEVBQUUsSUFBRSxFQUFFLENBQUEsQ0FBQSxDQUFDLEVBQUMsRUFBQztvQkFDOUQsS0FBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPOzs7Ozs7b0JBQUMsVUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLE1BQU07d0JBQ3RDLElBQUcsSUFBSSxDQUFDLEVBQUUsSUFBRSxFQUFFLEVBQUM7NEJBQ2IsS0FBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztnQ0FDN0IsRUFBRSxFQUFDLElBQUksQ0FBQyxFQUFFO2dDQUNWLElBQUksRUFBQyxJQUFJLENBQUMsSUFBSTs2QkFDZixDQUFDLENBQUM7eUJBQ0o7b0JBQ0gsQ0FBQyxFQUFDLENBQUM7aUJBQ0g7YUFDRDtpQkFDRztnQkFDRixLQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTzs7Ozs7O2dCQUFDLFVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxNQUFNO29CQUNsRCxJQUFHLElBQUksQ0FBQyxFQUFFLElBQUUsRUFBRSxFQUFDO3dCQUNiLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN4QjtnQkFDSCxDQUFDLEVBQUMsQ0FBQzthQUNKO1FBQ0wsQ0FBQyxFQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3hELENBQUM7Ozs7SUFFRCw0Q0FBYzs7O0lBQWQ7UUFDRSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUMsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxvQkFBb0IsR0FBQyxFQUFFLENBQUM7SUFDL0IsQ0FBQzs7Ozs7SUFFRCw2Q0FBZTs7OztJQUFmLFVBQWdCLEVBQU07UUFDcEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxHQUFDLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7Z0JBNU5GLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyx5MkdBQXFDOztpQkFFdEM7Ozs7OzZCQUdFLEtBQUs7NEJBT0wsS0FBSzs2QkFPTCxLQUFLO3FCQVFMLEtBQUs7d0JBR0wsS0FBSzt5QkFHTCxLQUFLO3lCQUdMLEtBQUs7dUJBNEJMLEtBQUs7NkJBV0wsS0FBSzswQkFHTCxLQUFLO21DQVlMLE1BQU07aUNBRU4sTUFBTTttQ0FFTixNQUFNO29DQUVOLE1BQU07K0JBRU4sTUFBTTs7SUF5SFQsMEJBQUM7Q0FBQSxBQTdORCxJQTZOQztTQXhOWSxtQkFBbUI7OztJQXdCOUIsaUNBQXVCOztJQUd2QixvQ0FBdUI7O0lBR3ZCLHFDQUFvQjs7SUEwQ3BCLHlDQUF5Qzs7SUFlekMsK0NBQW1FOztJQUVuRSw2Q0FBaUU7O0lBRWpFLCtDQUFtRTs7SUFFbkUsZ0RBQW9FOztJQUVwRSwyQ0FBK0Q7O0lBRy9ELHVDQUF3Qjs7SUFDeEIsMENBQXVCOztJQUV2QiwyQ0FBcUI7O0lBQ3JCLDhDQUF3Qjs7SUFFeEIsdUNBQXFCOztJQUNyQixnREFBbUQ7O0lBQ25ELG1EQUFpQzs7SUFFakMsb0NBT0M7O0lBQ0QsMENBRUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZVF1ZXJ5IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFnZUluZGV4OiBudW1iZXI7XG4gIHBhZ2VTaXplOiBudW1iZXI7XG4gIHNvcnROYW1lPzogc3RyaW5nO1xuICBzb3J0VmFsdWU/OiBzdHJpbmc7XG4gIHBhcmFtZXRlcj86IGFueTtcbiAga2V5V29yZDpzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUhlYWRlciB7XG4gIGtleT86IGFueTtcbiAgbmFtZT86IHN0cmluZztcbiAgLy9wb3A/OiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBtaW5XaWR0aD86IG51bWJlcjtcbiAgZmlsdGVyTGlzdD86IGFueTtcbiAgY2hlY2tib3hhYmxlPzogYm9vbGVhbjtcbiAgc29ydGFibGU6IGJvb2xlYW47XG4gIGhpZGVuPzogYm9vbGVhbixcbiAgYWN0aW9uPzogYm9vbGVhbjtcbiAgW2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlQnV0dG9uIHtcbiAgdHlwZT86IHN0cmluZztcbiAgdGV4dD86IHN0cmluZztcbn1cblxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJrcmVmb3JtLXByaXZhdGUtdGFibGVcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9pbmRleC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vaW5kZXguY29tcG9uZW50Lmxlc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgS3JlRm9ybVByaXZhdGVUYWJsZSAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgIFxuICBASW5wdXQoKSBzZXQgdGFibGVJbmRleCh2YWx1ZTpudW1iZXIpe1xuICAgIHRoaXMucXVlcnkucGFnZUluZGV4PXZhbHVlO1xuICB9XG4gIGdldCB0YWJsZUluZGV4KCl7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkucGFnZUluZGV4O1xuICB9XG4gIFxuICBASW5wdXQoKSBzZXQgdGFibGVTaXplKHZhbHVlOm51bWJlcil7XG4gICAgdGhpcy5xdWVyeS5wYWdlU2l6ZT12YWx1ZTtcbiAgfVxuICBnZXQgdGFibGVTaXplKCl7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkucGFnZVNpemU7XG4gIH1cbiAgXG4gIEBJbnB1dCgpIHNldCB0YWJsZVRvdGFsKHZhbHVlOm51bWJlcil7XG4gICAgdGhpcy5xdWVyeS50b3RhbD12YWx1ZTtcbiAgfVxuICBnZXQgdGFibGVUb3RhbCgpe1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5LnRvdGFsO1xuICB9XG5cbiAgLy90YWJsZUlkXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc9XCJcIjtcblxuICAvL+aYr+WQpuimgeWkmumAiVxuICBASW5wdXQoKSBjaGVjayA9IGZhbHNlO1xuXG4gIC8v5piv5ZCm5pyJ5pON5L2c5YiXMCDmsqHmnInmk43kvZzliJfvvJsxIOWkmuS4quaTjeS9nOaMiemSriAyIOmAieaLqVxuICBASW5wdXQoKSBhY3Rpb24gPSAwO1xuXG4gIC8vdGFibGUg5aS06YOo5L+h5oGvXG4gIEBJbnB1dCgpXG4gIHNldCBoZWFkZXIodmFsdWU6IElUYWJsZUhlYWRlcltdKSB7XG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgdmFsdWUuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5wcm9wID0gaXRlbS5rZXk7XG4gICAgICAgIGlmIChpdGVtLmNoZWNrYm94YWJsZSkge1xuICAgICAgICAgIGl0ZW0ubmFtZT1cIlwiO1xuICAgICAgICAgIGl0ZW0ud2lkdGg9NTA7XG4gICAgICAgICAgaXRlbS5jYW5BdXRvUmVzaXplID0gZmFsc2U7XG4gICAgICAgICAgaXRlbS5yZXNpemVhYmxlID0gZmFsc2U7XG4gICAgICAgICAgaXRlbS5mcm96ZW5MZWZ0ID0gdHJ1ZTtcbiAgICAgICAgICBpdGVtLmNoZWNrYm94YWJsZSA9IHRydWU7XG4gICAgICAgICAgaXRlbS5oZWFkZXJDaGVja2JveGFibGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmKGl0ZW0uYWN0aW9uKXsgXG4gICAgICAgICAgaXRlbS5mcm96ZW5SaWdodD10cnVlO1xuICAgICAgICAgIGl0ZW0uY2FuQXV0b1Jlc2l6ZT1mYWxzZTtcbiAgICAgICAgICBpdGVtLnJlc2l6ZWFibGU9ZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faGVhZGVyRGF0YS5wdXNoKGl0ZW0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGdldCBoZWFkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hlYWRlckRhdGE7XG4gIH1cblxuICAvL3RhYmxlIOihjOaVsOaNrlxuICBASW5wdXQoKVxuICBzZXQgYm9keSh2YWx1ZTogYW55W10pIHtcbiAgICB0aGlzLmxpc3REYXRhID0gdmFsdWU7XG4gICAgaWYodGhpcy5saXN0RGF0YT09bnVsbCB8fCB0aGlzLmxpc3REYXRhLmxlbmd0aD09MCl7XG4gICAgICB0aGlzLnRhYmxlU2Nyb2xsLnk9XCIwcHhcIjtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMudGFibGVTY3JvbGwueT1cIjMzMnB4XCI7XG4gICAgfVxuICB9XG5cbiAgLy/mjInpkq7liJfooahcbiAgQElucHV0KCkgYnV0dG9ubGlzdDogSVRhYmxlQnV0dG9uW10gPSBbXTtcblxuICAvL+m7mOiupOmAieS4rUlkXG4gIEBJbnB1dCgpXG4gIHNldCBjaGVja2lkKHZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMubGlzdERhdGFTZWxlY3RlZExpc3Q9W107XG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgdmFsdWUuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgdGhpcy5saXN0RGF0YUNoZWNrZWRJZFtpdGVtLmlkXSA9IHRydWU7XG4gICAgICAgIHRoaXMubGlzdERhdGFTZWxlY3RlZExpc3QucHVzaChpdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8v6YCJ5Lit5LqL5Lu2XG4gIEBPdXRwdXQoKSBjaGVja0NoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy/nv7vpobXkuovku7ZcbiAgQE91dHB1dCgpIHBhZ2VJbmRleEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy/mjpLluo/kuovku7ZcbiAgQE91dHB1dCgpIG9yZGVyQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvL+i/h+a7pOS6i+S7tlxuICBAT3V0cHV0KCkgZmlsdGVyQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvL+aTjeS9nOS6i+S7tlxuICBAT3V0cHV0KCkgYnV0dG9uQWN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXG4gIGNoZWNrSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBfaGVhZGVyRGF0YTphbnlbXSA9IFtdO1xuXG4gIGlzQWxsQ2hlY2tlZCA9IGZhbHNlO1xuICBpc0luZGV0ZXJtaW5hdGUgPSBmYWxzZTsgXG5cbiAgbGlzdERhdGE6IGFueVtdID0gW107XG4gIGxpc3REYXRhQ2hlY2tlZElkOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICBsaXN0RGF0YVNlbGVjdGVkTGlzdDogYW55W10gPSBbXTtcblxuICBxdWVyeTogSVRhYmxlUXVlcnkgPSB7XG4gICAgdG90YWw6IDAsXG4gICAgcGFnZUluZGV4OjEsXG4gICAgcGFnZVNpemU6IDE1LFxuICAgIHNvcnROYW1lOiBcIlwiLFxuICAgIHNvcnRWYWx1ZTogXCJcIixcbiAgICBrZXlXb3JkOlwiXCJcbiAgfVxuICB0YWJsZVNjcm9sbCA9IHtcbiAgICB5OiAnMzMycHgnXG4gIH07XG4gXG4gIGNvbnN0cnVjdG9yKCkge31cbiBcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7fVxuIFxuXG4gIG5nT25Jbml0KCkge1xuXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcblxuICB9XG5cbiAgLy/lhajpgIl85YWo5LiN6YCJXG4gIHNldENoZWNrQWxsKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5saXN0RGF0YS5mb3JFYWNoKGl0ZW0gPT4gKHRoaXMubGlzdERhdGFDaGVja2VkSWRbaXRlbS5pZF0gPSB2YWx1ZSkpO1xuICAgIHRoaXMuc2V0Q2hlY2tTdGF0dXMoKTtcbiAgfVxuXG4gIC8v6K6+572u5p+Q5Liq6YCJ5oupfOWPlua2iOmAieS4rVxuICBzZXRDaGVja1N0YXR1cygpOiB2b2lkIHsgXG4gICAgdGhpcy5pc0FsbENoZWNrZWQgPSB0aGlzLmxpc3REYXRhLmV2ZXJ5KGl0ZW0gPT4gdGhpcy5saXN0RGF0YUNoZWNrZWRJZFtpdGVtLmlkXSk7XG4gICAgdGhpcy5pc0luZGV0ZXJtaW5hdGUgPSB0aGlzLmxpc3REYXRhLnNvbWUoaXRlbSA9PiB0aGlzLmxpc3REYXRhQ2hlY2tlZElkW2l0ZW0uaWRdKSAmJiAhdGhpcy5pc0FsbENoZWNrZWQ7XG4gICAgdGhpcy5zYXZlU2VsZWN0ZWQoKTtcbiAgfVxuICBcbiBcbiAgLy/ngrnlh7vmn6Xor6JcbiAgcXVlcnlDaGFuZ2UoKVxuICB7XG4gICAgdGhpcy5wYWdlSW5kZXhFdmVudC5lbWl0KHRoaXMucXVlcnkpOyAgXG4gIH1cblxuICAvL+eCueWHu+e/u+mhtVxuICBwYWdlSW5kZXhDaGFuZ2UoZTpudW1iZXIpIHtcbiAgICB0aGlzLnF1ZXJ5LnBhZ2VJbmRleCA9IGU7XG4gICAgdGhpcy5wYWdlSW5kZXhFdmVudC5lbWl0KHRoaXMucXVlcnkpO1xuICB9XG5cbiAgLy/ngrnlh7vmjpLluo9cbiAgdGFibGVTb3J0KHNvcnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIHRoaXMucXVlcnkuc29ydE5hbWUgPSBzb3J0LmtleTtcbiAgICB0aGlzLnF1ZXJ5LnNvcnRWYWx1ZSA9IHNvcnQudmFsdWU7XG4gICAgdGhpcy5vcmRlckNoYW5nZUV2ZW50LmVtaXQodGhpcy5xdWVyeSk7XG4gIH0gXG5cbiAgLy/ljZXlh7vpgInkuK1cbiAgaXRlbVNlbGVjdENoYW5nZShldmVudDphbnkpe1xuICAgIHRoaXMubGlzdERhdGFTZWxlY3RlZExpc3Quc2hpZnQoKTtcbiAgICB0aGlzLmxpc3REYXRhU2VsZWN0ZWRMaXN0LnB1c2goe1xuICAgICAgXCJpZFwiOmV2ZW50LmlkLFxuICAgICAgXCJuYW1lXCI6ZXZlbnQubmFtZVxuICAgIH0pO1xuICAgIHRoaXMuY2hlY2tDaGFuZ2VFdmVudC5lbWl0KHRoaXMubGlzdERhdGFTZWxlY3RlZExpc3QpO1xuICB9XG4gXG4gIC8v5L+d5a2Y6YCJ5LitXG4gIHNhdmVTZWxlY3RlZCgpeyBcbiAgICBPYmplY3Qua2V5cyh0aGlzLmxpc3REYXRhQ2hlY2tlZElkKS5mb3JFYWNoKGlkID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMubGlzdERhdGFDaGVja2VkSWRbaWRdO1xuICAgICAgICBpZih2YWx1ZSl7XG4gICAgICAgICBpZighdGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdC5zb21lKGl0ZW09PntyZXR1cm4gaXRlbS5pZD09aWR9KSl7XG4gICAgICAgICAgdGhpcy5saXN0RGF0YS5mb3JFYWNoKChpdGVtLGluZGV4LG9iamVjdCk9PntcbiAgICAgICAgICAgIGlmKGl0ZW0uaWQ9PWlkKXtcbiAgICAgICAgICAgICAgdGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDppdGVtLmlkLFxuICAgICAgICAgICAgICAgIG5hbWU6aXRlbS5uYW1lXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG4gICAgICAgICAgdGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdC5mb3JFYWNoKChpdGVtLGluZGV4LG9iamVjdCk9PntcbiAgICAgICAgICAgIGlmKGl0ZW0uaWQ9PWlkKXtcbiAgICAgICAgICAgICAgb2JqZWN0LnNwbGljZShpbmRleCwxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuY2hlY2tDaGFuZ2VFdmVudC5lbWl0KHRoaXMubGlzdERhdGFTZWxlY3RlZExpc3QpOyBcbiAgfVxuICBcbiAgc2VsZWN0QWxsQ2xlYXIoKXtcbiAgICB0aGlzLmlzQWxsQ2hlY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNJbmRldGVybWluYXRlID0gZmFsc2U7IFxuICAgIHRoaXMubGlzdERhdGFDaGVja2VkSWQ9e307XG4gICAgdGhpcy5saXN0RGF0YVNlbGVjdGVkTGlzdD1bXTsgXG4gIH1cblxuICBzZWxlY3RDbGVhckJ5SWQoaWQ6YW55KXtcbiAgICB0aGlzLmxpc3REYXRhQ2hlY2tlZElkW2lkXT1mYWxzZTtcbiAgICB0aGlzLnNldENoZWNrU3RhdHVzKCk7XG4gIH1cbn1cbiJdfQ==