UNPKG

dbweb-common

Version:

用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上

480 lines 34.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { HttpErrorResponse } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { MatSnackBar } from '@angular/material'; import { IsDuplicatePKError } from 'dbweb-core'; import { of, Subject } from 'rxjs'; import { catchError, map, tap } from 'rxjs/operators'; import { Label } from '../../../services/eleview/types/label'; import { NodeTypeEnum } from '../../../services/eleview/types/model'; import { Node } from '../../../services/eleview/types/node'; var EditLabel = /** @class */ (function () { function EditLabel(svr, snackBar) { this.svr = svr; this.snackBar = snackBar; this.titleInput = true; this.isAdd = true; this.modify = false; } /** * @param {?} categoryID * @return {?} */ EditLabel.prototype.add = /** * @param {?} categoryID * @return {?} */ function (categoryID) { this.isAdd = true; this.titleInput = true; this.CategoryID = categoryID; this.Name = '新的标签'; this.title = this.Name; this.Conts = Node.fromInterface({ NodeType: NodeTypeEnum.unknow }); }; /** * @return {?} */ EditLabel.prototype.done = /** * @return {?} */ function () { if (!this.title || this.title.length === 0) { alert('不能输入空的名称'); return false; } if (!this.isAdd && this.title !== this.Name) { this.modify = true; } this.Name = this.title; this.titleInput = false; return true; }; /** * @return {?} */ EditLabel.prototype.edit = /** * @return {?} */ function () { this.title = this.Name; this.titleInput = true; }; /** * @return {?} */ EditLabel.prototype.editCancel = /** * @return {?} */ function () { this.titleInput = false; }; /** * @private * @param {?} whereString * @return {?} */ EditLabel.prototype.processSave = /** * @private * @param {?} whereString * @return {?} */ function (whereString) { var _this = this; if (this.isAdd) { return this.svr.backface .addLabel({ CategoryID: this.CategoryID, Name: this.Name, Conts: whereString, PlainText: this.PlainText }) .pipe(map((/** * @param {?} lbl * @return {?} */ function (lbl) { /** @type {?} */ var rev = Label.fromInterface(lbl); /** @type {?} */ var category = _this.svr.categorys.find((/** * @param {?} v * @return {?} */ function (v) { return v.ID === lbl.CategoryID; })); if (!category.Labels) { category.Labels = []; } category.Labels.push(rev); return true; })), catchError((/** * @param {?} err * @param {?} caught * @return {?} */ function (err, caught) { if (err instanceof HttpErrorResponse) { /** @type {?} */ var derr = IsDuplicatePKError(err.error); if (derr.Yes) { _this.snackBar.open('名称重复', '关闭', { duration: 5000 }); } else { _this.snackBar.open(err.error, '关闭', { duration: 5000 }); } } else { _this.snackBar.open(err, '关闭', { duration: 5000 }); } return of(false); }))); } else { return this.svr.backface .updateLabel({ CategoryID: this.CategoryID, ID: this.LabelID, Name: this.Name, Conts: whereString, PlainText: this.PlainText }) .pipe(map((/** * @param {?} lbl * @return {?} */ function (lbl) { /** @type {?} */ var rev = _this.svr.categorys .find((/** * @param {?} v * @return {?} */ function (v) { return v.ID === lbl.CategoryID; })) .Labels.find((/** * @param {?} vv * @return {?} */ function (vv) { return vv.ID === lbl.ID; })); rev.Name = lbl.Name; return true; }))); } }; /** * @return {?} */ EditLabel.prototype.save = /** * @return {?} */ function () { var _this = this; // 如果正在修改名称,则自动进行确认,如果确认失败,则退出处理 if (this.titleInput) { if (!this.done()) { return of(false); } } /** @type {?} */ var rev = new Subject(); // 转换node-->string if (this.Conts && this.Conts.NodeType !== NodeTypeEnum.unknow) { this.svr.backface.nodeToString(this.Conts.toInterface()).subscribe((/** * @param {?} whereString * @return {?} */ function (whereString) { _this.processSave(whereString).subscribe((/** * @param {?} v * @return {?} */ function (v) { rev.next(v); })); })); } else { return this.processSave(''); } return rev; }; return EditLabel; }()); export { EditLabel }; if (false) { /** @type {?} */ EditLabel.prototype.CategoryID; /** @type {?} */ EditLabel.prototype.LabelID; /** @type {?} */ EditLabel.prototype.Name; /** @type {?} */ EditLabel.prototype.Conts; /** @type {?} */ EditLabel.prototype.PlainText; /** @type {?} */ EditLabel.prototype.titleInput; /** @type {?} */ EditLabel.prototype.isAdd; /** @type {?} */ EditLabel.prototype.title; /** @type {?} */ EditLabel.prototype.readonly; /** @type {?} */ EditLabel.prototype.modify; /** * @type {?} * @private */ EditLabel.prototype.svr; /** * @type {?} * @private */ EditLabel.prototype.snackBar; } var LabelManagerService = /** @class */ (function () { function LabelManagerService(snackBar) { this.snackBar = snackBar; this.editLabel = new EditLabel(this, this.snackBar); } /** * @param {?} CategoryID * @param {?} LabelID * @return {?} */ LabelManagerService.prototype.removeLabel = /** * @param {?} CategoryID * @param {?} LabelID * @return {?} */ function (CategoryID, LabelID) { var _this = this; return this.backface.removeLabel({ CategoryID: CategoryID, ID: LabelID }).pipe(tap((/** * @param {?} v * @return {?} */ function (v) { if (v) { /** @type {?} */ var labels = _this.categorys.find((/** * @param {?} vv * @return {?} */ function (vv) { return vv.ID === CategoryID; })).Labels; labels.splice(labels.findIndex((/** * @param {?} vv * @return {?} */ function (vv) { return vv.ID === LabelID; })), 1); } }))); }; /** * @param {?} id * @return {?} */ LabelManagerService.prototype.removeCategory = /** * @param {?} id * @return {?} */ function (id) { var _this = this; return this.backface.removeCategory(id).pipe(tap((/** * @param {?} v * @return {?} */ function (v) { if (v) { _this.categorys.splice(_this.categorys.findIndex((/** * @param {?} vv * @return {?} */ function (vv) { return vv.ID === id; })), 1); _this.categorys.forEach((/** * @param {?} vv * @param {?} idx * @return {?} */ function (vv, idx) { return (vv.Position = idx + 1); })); } }))); }; /** * @param {?} param * @return {?} */ LabelManagerService.prototype.addCategory = /** * @param {?} param * @return {?} */ function (param) { var _this = this; return this.backface .addCategory({ EleName: this.eleName, Name: param.name, OwnerBy: this.ownerBy, BeforeAtID: param.beforeAtID }) .pipe(tap((/** * @param {?} v * @return {?} */ function (v) { // 调整位置并插入 if (param.beforeAtID) { /** @type {?} */ var idx = _this.categorys.findIndex((/** * @param {?} vv * @return {?} */ function (vv) { return vv.ID === param.beforeAtID; })); _this.categorys.splice(idx, 0, v); } else { _this.categorys.push(v); } _this.categorys.forEach((/** * @param {?} vv * @param {?} idx * @return {?} */ function (vv, idx) { return (vv.Position = idx + 1); })); }))); }; /** * @param {?} param * @return {?} */ LabelManagerService.prototype.editCategory = /** * @param {?} param * @return {?} */ function (param) { var _this = this; return this.backface .updateCategory({ ID: param.id, Name: param.name, OwnerBy: this.ownerBy }) .pipe(tap((/** * @param {?} v * @return {?} */ function (v) { _this.categorys.find((/** * @param {?} vv * @return {?} */ function (vv) { return vv.ID === param.id; })).Name = param.name; }))); }; /** * @return {?} */ LabelManagerService.prototype.fetchCategoryLabelHis = /** * @return {?} */ function () { return this.backface.fetchCategoryLabelHis({ EleName: this.eleName, OwnerBy: this.ownerBy, Owner: [this.owner] }); }; /** * @return {?} */ LabelManagerService.prototype.fetchCategories = /** * @return {?} */ function () { var _this = this; this.backface .fetchCategories({ EleName: this.eleName, OwnerBy: this.ownerBy, Owner: this.owner }) .subscribe((/** * @param {?} v * @return {?} */ function (v) { _this.categorys = v; })); }; /** * @param {?} cate * @param {?} idx * @return {?} */ LabelManagerService.prototype.setCategoryPosition = /** * @param {?} cate * @param {?} idx * @return {?} */ function (cate, idx) { var _this = this; this.backface.setCategoryPosition({ ID: cate.ID, Position: idx }).subscribe((/** * @param {?} v * @return {?} */ function (v) { // 先赋值position v.forEach((/** * @param {?} vv * @return {?} */ function (vv) { /** @type {?} */ var findc = _this.categorys.find((/** * @param {?} c * @return {?} */ function (c) { return c.ID === vv.ID; })); if (findc) { findc.Position = vv.Position; } })); // 再排序 _this.categorys.sort((/** * @param {?} a * @param {?} b * @return {?} */ function (a, b) { return a.Position - b.Position; })); })); }; LabelManagerService.decorators = [ { type: Injectable } ]; /** @nocollapse */ LabelManagerService.ctorParameters = function () { return [ { type: MatSnackBar } ]; }; return LabelManagerService; }()); export { LabelManagerService }; if (false) { /** @type {?} */ LabelManagerService.prototype.eleName; /** @type {?} */ LabelManagerService.prototype.ownerBy; /** @type {?} */ LabelManagerService.prototype.owner; /** @type {?} */ LabelManagerService.prototype.categorys; /** @type {?} */ LabelManagerService.prototype.editLabel; /** @type {?} */ LabelManagerService.prototype.allColumnsWithLetter; /** @type {?} */ LabelManagerService.prototype.backface; /** * @type {?} * @private */ LabelManagerService.prototype.snackBar; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvbGFiZWwtbWFuYWdlci9zZXJ2aWNlL2xhYmVsLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBdUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUQsT0FBTyxFQUFxQixZQUFZLEVBQWUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHNUQ7SUFZQyxtQkFBb0IsR0FBd0IsRUFBVSxRQUFxQjtRQUF2RCxRQUFHLEdBQUgsR0FBRyxDQUFxQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQWE7UUFMM0UsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixVQUFLLEdBQUcsSUFBSSxDQUFDO1FBR2IsV0FBTSxHQUFHLEtBQUssQ0FBQztJQUMrRCxDQUFDOzs7OztJQUMvRSx1QkFBRzs7OztJQUFILFVBQUksVUFBa0I7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVB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O1lBQzVFLGNBQWM7WUFDZCxDQUFDLENBQUMsT0FBTzs7OztZQUFDLFVBQUEsRUFBRTs7b0JBQ0wsS0FBSyxHQUFHLEtBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTs7OztnQkFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBZCxDQUFjLEVBQUM7Z0JBQ3RELElBQUksS0FBSyxFQUFFO29CQUNWLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztpQkFDN0I7WUFDRixDQUFDLEVBQUMsQ0FBQztZQUNILE1BQU07WUFDTixLQUFJLENBQUMsU0FBUyxDQUFDLElBQUk7Ozs7O1lBQUMsVUFBQyxDQUFDLEVBQUUsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUF2QixDQUF1QixFQUFDLENBQUM7UUFDeEQsQ0FBQyxFQUFDLENBQUM7SUFDSixDQUFDOztnQkE1RkQsVUFBVTs7OztnQkE5SEYsV0FBVzs7SUEyTnBCLDBCQUFDO0NBQUEsQUE3RkQsSUE2RkM7U0E1RlksbUJBQW1COzs7SUFFL0Isc0NBQWdCOztJQUNoQixzQ0FBcUI7O0lBQ3JCLG9DQUFjOztJQUVkLHdDQUFzQjs7SUFDdEIsd0NBQStDOztJQUMvQyxtREFBd0M7O0lBQ3hDLHVDQUFtQjs7Ozs7SUFDUCx1Q0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcclxuaW1wb3J0IHsgSXNEdXBsaWNhdGVQS0Vycm9yIH0gZnJvbSAnZGJ3ZWItY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwLCBjb25jYXRNYXAsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDYXRlZ29yeSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvY2F0ZWdvcnknO1xyXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvbGFiZWwnO1xyXG5pbXBvcnQgeyBDb2x1bW5zV2l0aExldHRlciwgTm9kZVR5cGVFbnVtLCBPd25lckJ5RW51bSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvbW9kZWwnO1xyXG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZWxldmlldy90eXBlcy9ub2RlJztcclxuaW1wb3J0IHsgQmFja0ZhY2UgfSBmcm9tICcuL2JhY2tmYWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFZGl0TGFiZWwge1xyXG5cdENhdGVnb3J5SUQ6IHN0cmluZztcclxuXHRMYWJlbElEOiBzdHJpbmc7XHJcblx0TmFtZTogc3RyaW5nO1xyXG5cdENvbnRzPzogTm9kZTtcclxuXHRQbGFpblRleHQ/OiBzdHJpbmc7XHJcblxyXG5cdHRpdGxlSW5wdXQgPSB0cnVlO1xyXG5cdGlzQWRkID0gdHJ1ZTtcclxuXHR0aXRsZT86IHN0cmluZztcclxuXHRyZWFkb25seT86IGJvb2xlYW47XHJcblx0bW9kaWZ5ID0gZmFsc2U7XHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBzdnI6IExhYmVsTWFuYWdlclNlcnZpY2UsIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyKSB7fVxyXG5cdGFkZChjYXRlZ29yeUlEOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuaXNBZGQgPSB0cnVlO1xyXG5cdFx0dGhpcy50aXRsZUlucHV0ID0gdHJ1ZTtcclxuXHRcdHRoaXMuQ2F0ZWdvcnlJRCA9IGNhdGVnb3J5SUQ7XHJcblx0XHR0aGlzLk5hbWUgPSAn5paw55qE5qCH562+JztcclxuXHRcdHRoaXMudGl0bGUgPSB0aGlzLk5hbWU7XHJcblx0XHR0aGlzLkNvbnRzID0gTm9kZS5mcm9tSW50ZXJmYWNlKHsgTm9kZVR5cGU6IE5vZGVUeXBlRW51bS51bmtub3cgfSk7XHJcblx0fVxyXG5cdGRvbmUoKSB7XHJcblx0XHRpZiAoIXRoaXMudGl0bGUgfHwgdGhpcy50aXRsZS5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0YWxlcnQoJ+S4jeiDvei+k+WFpeepuueahOWQjeensCcpO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRpZiAoIXRoaXMuaXNBZGQgJiYgdGhpcy50aXRsZSAhPT0gdGhpcy5OYW1lKSB7XHJcblx0XHRcdHRoaXMubW9kaWZ5ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHRoaXMuTmFtZSA9IHRoaXMudGl0bGU7XHJcblx0XHR0aGlzLnRpdGxlSW5wdXQgPSBmYWxzZTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHRlZGl0KCkge1xyXG5cdFx0dGhpcy50aXRsZSA9IHRoaXMuTmFtZTtcclxuXHRcdHRoaXMudGl0bGVJbnB1dCA9IHRydWU7XHJcblx0fVxyXG5cdGVkaXRDYW5jZWwoKSB7XHJcblx0XHR0aGlzLnRpdGxlSW5wdXQgPSBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc1NhdmUod2hlcmVTdHJpbmc6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG5cdFx0aWYgKHRoaXMuaXNBZGQpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuc3ZyLmJhY2tmYWNlXHJcblx0XHRcdFx0LmFkZExhYmVsKHtcclxuXHRcdFx0XHRcdENhdGVnb3J5SUQ6IHRoaXMuQ2F0ZWdvcnlJRCxcclxuXHRcdFx0XHRcdE5hbWU6IHRoaXMuTmFtZSxcclxuXHRcdFx0XHRcdENvbnRzOiB3aGVyZVN0cmluZyxcclxuXHRcdFx0XHRcdFBsYWluVGV4dDogdGhpcy5QbGFpblRleHRcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdFx0bWFwKGxibCA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldiA9IExhYmVsLmZyb21JbnRlcmZhY2UobGJsKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgY2F0ZWdvcnkgPSB0aGlzLnN2ci5jYXRlZ29yeXMuZmluZCh2ID0+IHYuSUQgPT09IGxibC5DYXRlZ29yeUlEKTtcclxuXHRcdFx0XHRcdFx0aWYgKCFjYXRlZ29yeS5MYWJlbHMpIHtcclxuXHRcdFx0XHRcdFx0XHRjYXRlZ29yeS5MYWJlbHMgPSBbXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjYXRlZ29yeS5MYWJlbHMucHVzaChyZXYpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH0pLFxyXG5cdFx0XHRcdFx0Y2F0Y2hFcnJvcigoZXJyLCBjYXVnaHQpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKGVyciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgZGVyciA9IElzRHVwbGljYXRlUEtFcnJvcihlcnIuZXJyb3IpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChkZXJyLlllcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zbmFja0Jhci5vcGVuKCflkI3np7Dph43lpI0nLCAn5YWz6ZetJywgeyBkdXJhdGlvbjogNTAwMCB9KTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zbmFja0Jhci5vcGVuKGVyci5lcnJvciwgJ+WFs+mXrScsIHsgZHVyYXRpb246IDUwMDAgfSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc25hY2tCYXIub3BlbihlcnIsICflhbPpl60nLCB7IGR1cmF0aW9uOiA1MDAwIH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHJldHVybiBvZihmYWxzZSk7XHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5zdnIuYmFja2ZhY2VcclxuXHRcdFx0XHQudXBkYXRlTGFiZWwoe1xyXG5cdFx0XHRcdFx0Q2F0ZWdvcnlJRDogdGhpcy5DYXRlZ29yeUlELFxyXG5cdFx0XHRcdFx0SUQ6IHRoaXMuTGFiZWxJRCxcclxuXHRcdFx0XHRcdE5hbWU6IHRoaXMuTmFtZSxcclxuXHRcdFx0XHRcdENvbnRzOiB3aGVyZVN0cmluZyxcclxuXHRcdFx0XHRcdFBsYWluVGV4dDogdGhpcy5QbGFpblRleHRcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdFx0bWFwKGxibCA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldiA9IHRoaXMuc3ZyLmNhdGVnb3J5c1xyXG5cdFx0XHRcdFx0XHRcdC5maW5kKHYgPT4gdi5JRCA9PT0gbGJsLkNhdGVnb3J5SUQpXHJcblx0XHRcdFx0XHRcdFx0LkxhYmVscy5maW5kKHZ2ID0+IHZ2LklEID09PSBsYmwuSUQpO1xyXG5cdFx0XHRcdFx0XHRyZXYuTmFtZSA9IGxibC5OYW1lO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblx0c2F2ZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuXHRcdC8vIOWmguaenOato+WcqOS/ruaUueWQjeensO+8jOWImeiHquWKqOi/m+ihjOehruiupO+8jOWmguaenOehruiupOWksei0pe+8jOWImemAgOWHuuWkhOeQhlxyXG5cdFx0aWYgKHRoaXMudGl0bGVJbnB1dCkge1xyXG5cdFx0XHRpZiAoIXRoaXMuZG9uZSgpKSB7XHJcblx0XHRcdFx0cmV0dXJuIG9mKGZhbHNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Y29uc3QgcmV2ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcblx0XHQvLyDovazmjaJub2RlLS0+c3RyaW5nXHJcblx0XHRpZiAodGhpcy5Db250cyAmJiB0aGlzLkNvbnRzLk5vZGVUeXBlICE9PSBOb2RlVHlwZUVudW0udW5rbm93KSB7XHJcblx0XHRcdHRoaXMuc3ZyLmJhY2tmYWNlLm5vZGVUb1N0cmluZyh0aGlzLkNvbnRzLnRvSW50ZXJmYWNlKCkpLnN1YnNjcmliZSh3aGVyZVN0cmluZyA9PiB7XHJcblx0XHRcdFx0dGhpcy5wcm9jZXNzU2F2ZSh3aGVyZVN0cmluZykuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHRcdFx0cmV2Lm5leHQodik7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1NhdmUoJycpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJldjtcclxuXHR9XHJcbn1cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTGFiZWxNYW5hZ2VyU2VydmljZSB7XHJcblx0Ly8g5Yid5aeL5YyW5pe26K6+572uXHJcblx0ZWxlTmFtZTogc3RyaW5nO1xyXG5cdG93bmVyQnk6IE93bmVyQnlFbnVtO1xyXG5cdG93bmVyOiBzdHJpbmc7XHJcblx0Ly8g5omA5pyJ55qE5qCH562+5pWw5o2uXHJcblx0Y2F0ZWdvcnlzOiBDYXRlZ29yeVtdO1xyXG5cdGVkaXRMYWJlbCA9IG5ldyBFZGl0TGFiZWwodGhpcywgdGhpcy5zbmFja0Jhcik7XHJcblx0YWxsQ29sdW1uc1dpdGhMZXR0ZXI6IENvbHVtbnNXaXRoTGV0dGVyO1xyXG5cdGJhY2tmYWNlOiBCYWNrRmFjZTtcclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0Jhcikge31cclxuXHRyZW1vdmVMYWJlbChDYXRlZ29yeUlEOiBzdHJpbmcsIExhYmVsSUQ6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UucmVtb3ZlTGFiZWwoeyBDYXRlZ29yeUlEOiBDYXRlZ29yeUlELCBJRDogTGFiZWxJRCB9KS5waXBlKFxyXG5cdFx0XHR0YXAodiA9PiB7XHJcblx0XHRcdFx0aWYgKHYpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGxhYmVscyA9IHRoaXMuY2F0ZWdvcnlzLmZpbmQodnYgPT4gdnYuSUQgPT09IENhdGVnb3J5SUQpLkxhYmVscztcclxuXHRcdFx0XHRcdGxhYmVscy5zcGxpY2UobGFiZWxzLmZpbmRJbmRleCh2diA9PiB2di5JRCA9PT0gTGFiZWxJRCksIDEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0fVxyXG5cdHJlbW92ZUNhdGVnb3J5KGlkOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLmJhY2tmYWNlLnJlbW92ZUNhdGVnb3J5KGlkKS5waXBlKFxyXG5cdFx0XHR0YXAodiA9PiB7XHJcblx0XHRcdFx0aWYgKHYpIHtcclxuXHRcdFx0XHRcdHRoaXMuY2F0ZWdvcnlzLnNwbGljZSh0aGlzLmNhdGVnb3J5cy5maW5kSW5kZXgodnYgPT4gdnYuSUQgPT09IGlkKSwgMSk7XHJcblx0XHRcdFx0XHR0aGlzLmNhdGVnb3J5cy5mb3JFYWNoKCh2diwgaWR4KSA9PiAodnYuUG9zaXRpb24gPSBpZHggKyAxKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHR9XHJcblx0YWRkQ2F0ZWdvcnkocGFyYW06IHsgbmFtZTogc3RyaW5nOyBiZWZvcmVBdElEPzogc3RyaW5nIH0pIHtcclxuXHRcdHJldHVybiB0aGlzLmJhY2tmYWNlXHJcblx0XHRcdC5hZGRDYXRlZ29yeSh7XHJcblx0XHRcdFx0RWxlTmFtZTogdGhpcy5lbGVOYW1lLFxyXG5cdFx0XHRcdE5hbWU6IHBhcmFtLm5hbWUsXHJcblx0XHRcdFx0T3duZXJCeTogdGhpcy5vd25lckJ5LFxyXG5cdFx0XHRcdEJlZm9yZUF0SUQ6IHBhcmFtLmJlZm9yZUF0SURcclxuXHRcdFx0fSlcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0dGFwKHYgPT4ge1xyXG5cdFx0XHRcdFx0Ly8g6LCD5pW05L2N572u5bm25o+S5YWlXHJcblx0XHRcdFx0XHRpZiAocGFyYW0uYmVmb3JlQXRJRCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBpZHggPSB0aGlzLmNhdGVnb3J5cy5maW5kSW5kZXgodnYgPT4gdnYuSUQgPT09IHBhcmFtLmJlZm9yZUF0SUQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNhdGVnb3J5cy5zcGxpY2UoaWR4LCAwLCB2KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY2F0ZWdvcnlzLnB1c2godik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLmNhdGVnb3J5cy5mb3JFYWNoKCh2diwgaWR4KSA9PiAodnYuUG9zaXRpb24gPSBpZHggKyAxKSk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHR9XHJcblx0ZWRpdENhdGVnb3J5KHBhcmFtOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5iYWNrZmFjZVxyXG5cdFx0XHQudXBkYXRlQ2F0ZWdvcnkoe1xyXG5cdFx0XHRcdElEOiBwYXJhbS5pZCxcclxuXHRcdFx0XHROYW1lOiBwYXJhbS5uYW1lLFxyXG5cdFx0XHRcdE93bmVyQnk6IHRoaXMub3duZXJCeVxyXG5cdFx0XHR9KVxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHR0YXAodiA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmNhdGVnb3J5cy5maW5kKHZ2ID0+IHZ2LklEID09PSBwYXJhbS5pZCkuTmFtZSA9IHBhcmFtLm5hbWU7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHR9XHJcblx0ZmV0Y2hDYXRlZ29yeUxhYmVsSGlzKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hDYXRlZ29yeUxhYmVsSGlzKHtcclxuXHRcdFx0RWxlTmFtZTogdGhpcy5lbGVOYW1lLFxyXG5cdFx0XHRPd25lckJ5OiB0aGlzLm93bmVyQnksXHJcblx0XHRcdE93bmVyOiBbdGhpcy5vd25lcl1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHRmZXRjaENhdGVnb3JpZXMoKSB7XHJcblx0XHR0aGlzLmJhY2tmYWNlXHJcblx0XHRcdC5mZXRjaENhdGVnb3JpZXMoeyBFbGVOYW1lOiB0aGlzLmVsZU5hbWUsIE93bmVyQnk6IHRoaXMub3duZXJCeSwgT3duZXI6IHRoaXMub3duZXIgfSlcclxuXHRcdFx0LnN1YnNjcmliZSh2ID0+IHtcclxuXHRcdFx0XHR0aGlzLmNhdGVnb3J5cyA9IHY7XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHRzZXRDYXRlZ29yeVBvc2l0aW9uKGNhdGU6IENhdGVnb3J5LCBpZHg6IG51bWJlcikge1xyXG5cdFx0dGhpcy5iYWNrZmFjZS5zZXRDYXRlZ29yeVBvc2l0aW9uKHsgSUQ6IGNhdGUuSUQsIFBvc2l0aW9uOiBpZHggfSkuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHQvLyDlhYjotYvlgLxwb3NpdGlvblxyXG5cdFx0XHR2LmZvckVhY2godnYgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGZpbmRjID0gdGhpcy5jYXRlZ29yeXMuZmluZChjID0+IGMuSUQgPT09IHZ2LklEKTtcclxuXHRcdFx0XHRpZiAoZmluZGMpIHtcclxuXHRcdFx0XHRcdGZpbmRjLlBvc2l0aW9uID0gdnYuUG9zaXRpb247XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0Ly8g5YaN5o6S5bqPXHJcblx0XHRcdHRoaXMuY2F0ZWdvcnlzLnNvcnQoKGEsIGIpID0+IGEuUG9zaXRpb24gLSBiLlBvc2l0aW9uKTtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG4iXX0=