dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
426 lines • 32 kB
JavaScript
/**
* @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';
export class EditLabel {
/**
* @param {?} svr
* @param {?} snackBar
*/
constructor(svr, snackBar) {
this.svr = svr;
this.snackBar = snackBar;
this.titleInput = true;
this.isAdd = true;
this.modify = false;
}
/**
* @param {?} categoryID
* @return {?}
*/
add(categoryID) {
this.isAdd = true;
this.titleInput = true;
this.CategoryID = categoryID;
this.Name = '新的标签';
this.title = this.Name;
this.Conts = Node.fromInterface({ NodeType: NodeTypeEnum.unknow });
}
/**
* @return {?}
*/
done() {
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 {?}
*/
edit() {
this.title = this.Name;
this.titleInput = true;
}
/**
* @return {?}
*/
editCancel() {
this.titleInput = false;
}
/**
* @private
* @param {?} whereString
* @return {?}
*/
processSave(whereString) {
if (this.isAdd) {
return this.svr.backface
.addLabel({
CategoryID: this.CategoryID,
Name: this.Name,
Conts: whereString,
PlainText: this.PlainText
})
.pipe(map((/**
* @param {?} lbl
* @return {?}
*/
lbl => {
/** @type {?} */
const rev = Label.fromInterface(lbl);
/** @type {?} */
const category = this.svr.categorys.find((/**
* @param {?} v
* @return {?}
*/
v => v.ID === lbl.CategoryID));
if (!category.Labels) {
category.Labels = [];
}
category.Labels.push(rev);
return true;
})), catchError((/**
* @param {?} err
* @param {?} caught
* @return {?}
*/
(err, caught) => {
if (err instanceof HttpErrorResponse) {
/** @type {?} */
const 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 {?}
*/
lbl => {
/** @type {?} */
const rev = this.svr.categorys
.find((/**
* @param {?} v
* @return {?}
*/
v => v.ID === lbl.CategoryID))
.Labels.find((/**
* @param {?} vv
* @return {?}
*/
vv => vv.ID === lbl.ID));
rev.Name = lbl.Name;
return true;
})));
}
}
/**
* @return {?}
*/
save() {
// 如果正在修改名称,则自动进行确认,如果确认失败,则退出处理
if (this.titleInput) {
if (!this.done()) {
return of(false);
}
}
/** @type {?} */
const rev = new Subject();
// 转换node-->string
if (this.Conts && this.Conts.NodeType !== NodeTypeEnum.unknow) {
this.svr.backface.nodeToString(this.Conts.toInterface()).subscribe((/**
* @param {?} whereString
* @return {?}
*/
whereString => {
this.processSave(whereString).subscribe((/**
* @param {?} v
* @return {?}
*/
v => {
rev.next(v);
}));
}));
}
else {
return this.processSave('');
}
return rev;
}
}
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;
}
export class LabelManagerService {
/**
* @param {?} snackBar
*/
constructor(snackBar) {
this.snackBar = snackBar;
this.editLabel = new EditLabel(this, this.snackBar);
}
/**
* @param {?} CategoryID
* @param {?} LabelID
* @return {?}
*/
removeLabel(CategoryID, LabelID) {
return this.backface.removeLabel({ CategoryID: CategoryID, ID: LabelID }).pipe(tap((/**
* @param {?} v
* @return {?}
*/
v => {
if (v) {
/** @type {?} */
const labels = this.categorys.find((/**
* @param {?} vv
* @return {?}
*/
vv => vv.ID === CategoryID)).Labels;
labels.splice(labels.findIndex((/**
* @param {?} vv
* @return {?}
*/
vv => vv.ID === LabelID)), 1);
}
})));
}
/**
* @param {?} id
* @return {?}
*/
removeCategory(id) {
return this.backface.removeCategory(id).pipe(tap((/**
* @param {?} v
* @return {?}
*/
v => {
if (v) {
this.categorys.splice(this.categorys.findIndex((/**
* @param {?} vv
* @return {?}
*/
vv => vv.ID === id)), 1);
this.categorys.forEach((/**
* @param {?} vv
* @param {?} idx
* @return {?}
*/
(vv, idx) => (vv.Position = idx + 1)));
}
})));
}
/**
* @param {?} param
* @return {?}
*/
addCategory(param) {
return this.backface
.addCategory({
EleName: this.eleName,
Name: param.name,
OwnerBy: this.ownerBy,
BeforeAtID: param.beforeAtID
})
.pipe(tap((/**
* @param {?} v
* @return {?}
*/
v => {
// 调整位置并插入
if (param.beforeAtID) {
/** @type {?} */
const idx = this.categorys.findIndex((/**
* @param {?} vv
* @return {?}
*/
vv => vv.ID === param.beforeAtID));
this.categorys.splice(idx, 0, v);
}
else {
this.categorys.push(v);
}
this.categorys.forEach((/**
* @param {?} vv
* @param {?} idx
* @return {?}
*/
(vv, idx) => (vv.Position = idx + 1)));
})));
}
/**
* @param {?} param
* @return {?}
*/
editCategory(param) {
return this.backface
.updateCategory({
ID: param.id,
Name: param.name,
OwnerBy: this.ownerBy
})
.pipe(tap((/**
* @param {?} v
* @return {?}
*/
v => {
this.categorys.find((/**
* @param {?} vv
* @return {?}
*/
vv => vv.ID === param.id)).Name = param.name;
})));
}
/**
* @return {?}
*/
fetchCategoryLabelHis() {
return this.backface.fetchCategoryLabelHis({
EleName: this.eleName,
OwnerBy: this.ownerBy,
Owner: [this.owner]
});
}
/**
* @return {?}
*/
fetchCategories() {
this.backface
.fetchCategories({ EleName: this.eleName, OwnerBy: this.ownerBy, Owner: this.owner })
.subscribe((/**
* @param {?} v
* @return {?}
*/
v => {
this.categorys = v;
}));
}
/**
* @param {?} cate
* @param {?} idx
* @return {?}
*/
setCategoryPosition(cate, idx) {
this.backface.setCategoryPosition({ ID: cate.ID, Position: idx }).subscribe((/**
* @param {?} v
* @return {?}
*/
v => {
// 先赋值position
v.forEach((/**
* @param {?} vv
* @return {?}
*/
vv => {
/** @type {?} */
const findc = this.categorys.find((/**
* @param {?} c
* @return {?}
*/
c => c.ID === vv.ID));
if (findc) {
findc.Position = vv.Position;
}
}));
// 再排序
this.categorys.sort((/**
* @param {?} a
* @param {?} b
* @return {?}
*/
(a, b) => a.Position - b.Position));
}));
}
}
LabelManagerService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
LabelManagerService.ctorParameters = () => [
{ type: MatSnackBar }
];
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvbGFiZWwtbWFuYWdlci9zZXJ2aWNlL2xhYmVsLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBdUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUQsT0FBTyxFQUFxQixZQUFZLEVBQWUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHNUQsTUFBTSxPQUFPLFNBQVM7Ozs7O0lBWXJCLFlBQW9CLEdBQXdCLEVBQVUsUUFBcUI7UUFBdkQsUUFBRyxHQUFILEdBQUcsQ0FBcUI7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBTDNFLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsVUFBSyxHQUFHLElBQUksQ0FBQztRQUdiLFdBQU0sR0FBRyxLQUFLLENBQUM7SUFDK0QsQ0FBQzs7Ozs7SUFDL0UsR0FBRyxDQUFDLFVBQWtCO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElB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QUMsRUFBQyxDQUFDO1lBQ0gsTUFBTTtZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTs7Ozs7WUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBQyxDQUFDO1FBQ3hELENBQUMsRUFBQyxDQUFDO0lBQ0osQ0FBQzs7O1lBNUZELFVBQVU7Ozs7WUE5SEYsV0FBVzs7OztJQWlJbkIsc0NBQWdCOztJQUNoQixzQ0FBcUI7O0lBQ3JCLG9DQUFjOztJQUVkLHdDQUFzQjs7SUFDdEIsd0NBQStDOztJQUMvQyxtREFBd0M7O0lBQ3hDLHVDQUFtQjs7Ozs7SUFDUCx1Q0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcclxuaW1wb3J0IHsgSXNEdXBsaWNhdGVQS0Vycm9yIH0gZnJvbSAnZGJ3ZWItY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwLCBjb25jYXRNYXAsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDYXRlZ29yeSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvY2F0ZWdvcnknO1xyXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvbGFiZWwnO1xyXG5pbXBvcnQgeyBDb2x1bW5zV2l0aExldHRlciwgTm9kZVR5cGVFbnVtLCBPd25lckJ5RW51bSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvbW9kZWwnO1xyXG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZWxldmlldy90eXBlcy9ub2RlJztcclxuaW1wb3J0IHsgQmFja0ZhY2UgfSBmcm9tICcuL2JhY2tmYWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFZGl0TGFiZWwge1xyXG5cdENhdGVnb3J5SUQ6IHN0cmluZztcclxuXHRMYWJlbElEOiBzdHJpbmc7XHJcblx0TmFtZTogc3RyaW5nO1xyXG5cdENvbnRzPzogTm9kZTtcclxuXHRQbGFpblRleHQ/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=