dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
451 lines • 34.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { moveItemInArray } from '@angular/cdk/drag-drop';
import { Injectable } from '@angular/core';
import { CurrentService } from 'dbweb-core';
import { of, throwError } from 'rxjs';
import * as uuid from 'uuid';
import { EleViewBackFaceService } from '../../services/eleview/eleview-backface';
import { Category } from '../../services/eleview/types/category';
import { ownerElement } from '../../services/eleview/types/model';
import { map } from 'rxjs/operators';
/**
* @return {?}
*/
function newID() {
/** @type {?} */
var buf = uuid.v1(null, []);
/** @type {?} */
var TYPED_ARRAY = new Uint8Array(buf);
/** @type {?} */
var STRING_CHAR = TYPED_ARRAY.reduce((/**
* @param {?} data
* @param {?} byte
* @return {?}
*/
function (data, byte) {
return data + String.fromCharCode(byte);
}), '');
/** @type {?} */
var base64String = btoa(STRING_CHAR);
return base64String;
}
var LabelMockBackfaceService = /** @class */ (function () {
function LabelMockBackfaceService(backface, curr) {
this.backface = backface;
this.curr = curr;
}
/**
* @param {?} param
* @return {?}
*/
LabelMockBackfaceService.prototype.addCategory = /**
* @param {?} param
* @return {?}
*/
function (param) {
if (!param.Name) {
return throwError('名称为空');
}
if (this.recordViewData.labelCategories.find((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.Name === param.Name; }))) {
return throwError('名称重复');
}
/** @type {?} */
var newCate = (/** @type {?} */ ({
ID: newID(),
EleName: param.EleName,
OwnerBy: param.OwnerBy,
Owner: ownerElement,
Name: param.Name
}));
if (param.BeforeAtID) {
this.recordViewData.labelCategories.splice(this.recordViewData.labelCategories.findIndex((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === param.BeforeAtID; })), 0, newCate);
}
else {
this.recordViewData.labelCategories.push(newCate);
}
this.recordViewData.labelCategories.forEach((/**
* @param {?} v
* @param {?} i
* @return {?}
*/
function (v, i) { return (v.Position = i + 1); }));
/** @type {?} */
var rev = new Category();
rev.ID = newCate.ID;
rev.Name = newCate.Name;
rev.Owner = newCate.Owner;
rev.OwnerBy = newCate.OwnerBy;
rev.Position = newCate.Position;
return of(rev);
};
/**
* @param {?} id
* @return {?}
*/
LabelMockBackfaceService.prototype.removeCategory = /**
* @param {?} id
* @return {?}
*/
function (id) {
this.recordViewData.labelCategories
.splice(this.recordViewData.labelCategories.findIndex((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === id; })), 1)
.forEach((/**
* @param {?} v
* @param {?} i
* @return {?}
*/
function (v, i) { return (v.Position = i + 1); }));
return of(true);
};
/**
* @param {?} param
* @return {?}
*/
LabelMockBackfaceService.prototype.setCategoryPosition = /**
* @param {?} param
* @return {?}
*/
function (param) {
moveItemInArray(this.recordViewData.labelCategories, this.recordViewData.labelCategories.findIndex((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === param.ID; })), param.Position - 1);
this.recordViewData.labelCategories.forEach((/**
* @param {?} v
* @param {?} i
* @return {?}
*/
function (v, i) { return (v.Position = i + 1); }));
return of(this.recordViewData.labelCategories.map((/**
* @param {?} v
* @return {?}
*/
function (v) { return ({ ID: v.ID, Position: v.Position }); })));
};
/**
* @param {?} param
* @return {?}
*/
LabelMockBackfaceService.prototype.updateCategory = /**
* @param {?} param
* @return {?}
*/
function (param) {
/** @type {?} */
var c = this.recordViewData.labelCategories.find((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === param.ID; }));
c.Name = param.Name;
return of(true);
};
/**
* @param {?} param
* @return {?}
*/
LabelMockBackfaceService.prototype.fetchCategories = /**
* @param {?} param
* @return {?}
*/
function (param) {
var _this = this;
// 新增状态下,不能去取数据,因为有可能会取到已存在的记录数据,造成泄密
if (this.isAdd) {
return of([]);
}
return this.backface
.fetchFullCategories({ EleName: param.EleName, OwnerBy: param.OwnerBy, Owner: param.Owner })
.pipe(map((/**
* @param {?} cates
* @return {?}
*/
function (cates) {
_this.recordViewData.labelCategories = cates;
return _this.recordViewData.labelCategories.map((/**
* @param {?} v
* @return {?}
*/
function (v) {
/** @type {?} */
var lbls;
if (v.Labels) {
lbls = v.Labels.map((/**
* @param {?} lbl
* @return {?}
*/
function (lbl) { return ({
ID: lbl.ID,
Name: lbl.Name
}); }));
}
return Category.fromInterface({
ID: v.ID,
Name: v.Name,
Owner: v.Owner,
OwnerBy: v.OwnerBy,
Position: v.Position,
Labels: lbls
});
}));
})));
};
// 获取菜单项所有标签的日志
// 获取菜单项所有标签的日志
/**
* @param {?} param
* @return {?}
*/
LabelMockBackfaceService.prototype.fetchCategoryLabelHis =
// 获取菜单项所有标签的日志
/**
* @param {?} param
* @return {?}
*/
function (param) {
if (this.isAdd) {
return of([]);
}
return this.backface.fetchCategoryLabelHis(param);
};
// 获取标签的日志列表
// 获取标签的日志列表
/**
* @param {?} param
* @return {?}
*/
LabelMockBackfaceService.prototype.fetchLabelHisList =
// 获取标签的日志列表
/**
* @param {?} param
* @return {?}
*/
function (param) {
if (this.isAdd) {
return of([]);
}
return this.backface.fetchLabelHisList(param);
};
// 根据时间获取label的内容
// 根据时间获取label的内容
/**
* @param {?} param
* @return {?}
*/
LabelMockBackfaceService.prototype.fetchLabelHis =
// 根据时间获取label的内容
/**
* @param {?} param
* @return {?}
*/
function (param) {
return this.backface.fetchLabelHis(param);
};
/**
* @param {?} param
* @return {?}
*/
LabelMockBackfaceService.prototype.addLabel = /**
* @param {?} param
* @return {?}
*/
function (param) {
/** @type {?} */
var c = this.recordViewData.labelCategories.find((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === param.CategoryID; }));
c.Labels = c.Labels || [];
if (c.Labels.find((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.Name === param.Name; }))) {
return throwError('重复的名称');
}
/** @type {?} */
var lbl = (/** @type {?} */ ({
CategoryID: param.CategoryID,
ID: newID(),
Name: param.Name,
LastWriteTime: new Date(),
LastWriteUser: this.curr.data.UserName,
Conts: param.Conts,
PlainText: param.PlainText
}));
c.Labels.push(lbl);
c.Labels.forEach((/**
* @param {?} v
* @param {?} i
* @return {?}
*/
function (v, i) { return (v.Position = i + 1); }));
return of(lbl);
};
/**
* @param {?} param
* @return {?}
*/
LabelMockBackfaceService.prototype.removeLabel = /**
* @param {?} param
* @return {?}
*/
function (param) {
/** @type {?} */
var lbls = this.recordViewData.labelCategories.find((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === param.CategoryID; })).Labels;
lbls.splice(lbls.findIndex((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === param.ID; })), 1);
return of(true);
};
/**
* @param {?} param
* @return {?}
*/
LabelMockBackfaceService.prototype.nodeToString = /**
* @param {?} param
* @return {?}
*/
function (param) {
return this.backface.nodeToString(param);
};
/**
* @param {?} param
* @return {?}
*/
LabelMockBackfaceService.prototype.stringToNode = /**
* @param {?} param
* @return {?}
*/
function (param) {
return this.backface.stringToNode(param);
};
/**
* @param {?} param
* @return {?}
*/
LabelMockBackfaceService.prototype.setLabelPosition = /**
* @param {?} param
* @return {?}
*/
function (param) {
/** @type {?} */
var lbls = this.recordViewData.labelCategories.find((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === param.CategoryID; })).Labels;
moveItemInArray(lbls, lbls.findIndex((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === param.ID; })), param.Position - 1);
lbls.forEach((/**
* @param {?} v
* @param {?} i
* @return {?}
*/
function (v, i) { return (v.Position = i + 1); }));
return of(lbls.map((/**
* @param {?} v
* @return {?}
*/
function (v) { return ({ ID: v.ID, Position: v.Position }); })));
};
/**
* @param {?} param
* @return {?}
*/
LabelMockBackfaceService.prototype.updateLabel = /**
* @param {?} param
* @return {?}
*/
function (param) {
/** @type {?} */
var lbl = this.recordViewData.labelCategories
.find((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === param.CategoryID; }))
.Labels.find((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === param.ID; }));
lbl.Name = param.Name;
lbl.Conts = param.Conts;
lbl.PlainText = param.PlainText;
lbl.LastWriteTime = new Date();
return of(lbl);
};
/**
* @param {?} param
* @return {?}
*/
LabelMockBackfaceService.prototype.fetchLabel = /**
* @param {?} param
* @return {?}
*/
function (param) {
return of(this.recordViewData.labelCategories.find((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === param.CategoryID; })).Labels.find((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === param.ID; })));
};
LabelMockBackfaceService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
LabelMockBackfaceService.ctorParameters = function () { return [
{ type: EleViewBackFaceService },
{ type: CurrentService }
]; };
return LabelMockBackfaceService;
}());
export { LabelMockBackfaceService };
if (false) {
/** @type {?} */
LabelMockBackfaceService.prototype.isAdd;
/** @type {?} */
LabelMockBackfaceService.prototype.recordViewData;
/**
* @type {?}
* @private
*/
LabelMockBackfaceService.prototype.backface;
/**
* @type {?}
* @private
*/
LabelMockBackfaceService.prototype.curr;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtbW9jay1iYWNrZmFjZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2VsZW1lbnQvc2VydmljZS9sYWJlbC1tb2NrLWJhY2tmYWNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQWUsTUFBTSxZQUFZLENBQUM7QUFDekQsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUdOLHNCQUFzQixFQVV0QixNQUFNLHlDQUF5QyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRSxPQUFPLEVBUU4sWUFBWSxFQUNaLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBSXJDLFNBQVMsS0FBSzs7UUFDUCxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDOztRQUN2QixXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDOztRQUNqQyxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU07Ozs7O0lBQUMsVUFBQyxJQUFJLEVBQUUsSUFBSTtRQUNqRCxPQUFPLElBQUksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUMsR0FBRSxFQUFFLENBQUM7O1FBQ0EsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDdEMsT0FBTyxZQUFZLENBQUM7QUFDckIsQ0FBQztBQUNEO0lBSUMsa0NBQW9CLFFBQWdDLEVBQVUsSUFBb0I7UUFBOUQsYUFBUSxHQUFSLFFBQVEsQ0FBd0I7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFnQjtJQUFHLENBQUM7Ozs7O0lBQ3RGLDhDQUFXOzs7O0lBQVgsVUFBWSxLQUF1QjtRQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNoQixPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxQjtRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSTs7OztRQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFyQixDQUFxQixFQUFDLEVBQUU7WUFDekUsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDMUI7O1lBQ0ssT0FBTyxHQUFHLG1CQUFBO1lBQ2YsRUFBRSxFQUFFLEtBQUssRUFBRTtZQUNYLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsS0FBSyxFQUFFLFlBQVk7WUFDbkIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2hCLEVBQXdCO1FBQ3pCLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFNBQVM7Ozs7WUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLFVBQVUsRUFBekIsQ0FBeUIsRUFBQyxFQUM3RSxDQUFDLEVBQ0QsT0FBTyxDQUNQLENBQUM7U0FDRjthQUFNO1lBQ04sSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsT0FBTzs7Ozs7UUFBQyxVQUFDLENBQUMsRUFBRSxDQUFDLElBQUssT0FBQSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFwQixDQUFvQixFQUFDLENBQUM7O1lBQ3RFLEdBQUcsR0FBRyxJQUFJLFFBQVEsRUFBRTtRQUMxQixHQUFHLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDcEIsR0FBRyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUMxQixHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDOUIsR0FBRyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ2hDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7Ozs7O0lBQ0QsaURBQWM7Ozs7SUFBZCxVQUFlLEVBQVU7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlO2FBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxTQUFTOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBWCxDQUFXLEVBQUMsRUFBRSxDQUFDLENBQUM7YUFDMUUsT0FBTzs7Ozs7UUFBQyxVQUFDLENBQUMsRUFBRSxDQUFDLElBQUssT0FBQSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFwQixDQUFvQixFQUFDLENBQUM7UUFDMUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsQ0FBQzs7Ozs7SUFDRCxzREFBbUI7Ozs7SUFBbkIsVUFBb0IsS0FBK0I7UUFDbEQsZUFBZSxDQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxTQUFTOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQWpCLENBQWlCLEVBQUMsRUFDckUsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQ2xCLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxPQUFPOzs7OztRQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQXBCLENBQW9CLEVBQUMsQ0FBQztRQUM1RSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxHQUFHOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFwQyxDQUFvQyxFQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDOzs7OztJQUNELGlEQUFjOzs7O0lBQWQsVUFBZSxLQUEwQjs7WUFDbEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUk7Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBakIsQ0FBaUIsRUFBQztRQUMxRSxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDcEIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsQ0FBQzs7Ozs7SUFDRCxrREFBZTs7OztJQUFmLFVBQWdCLEtBQStEO1FBQS9FLGlCQTZCQztRQTVCQSxxQ0FBcUM7UUFDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2YsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDZDtRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVE7YUFDbEIsbUJBQW1CLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzNGLElBQUksQ0FDSixHQUFHOzs7O1FBQUMsVUFBQSxLQUFLO1lBQ1IsS0FBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzVDLE9BQU8sS0FBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsR0FBRzs7OztZQUFDLFVBQUEsQ0FBQzs7b0JBQzNDLElBQW9DO2dCQUN4QyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ2IsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRzs7OztvQkFBQyxVQUFBLEdBQUcsSUFBSSxPQUFBLENBQUM7d0JBQzNCLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTt3QkFDVixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7cUJBQ2QsQ0FBQyxFQUh5QixDQUd6QixFQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsT0FBTyxRQUFRLENBQUMsYUFBYSxDQUFDO29CQUM3QixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7b0JBQ1IsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO29CQUNaLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztvQkFDZCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87b0JBQ2xCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtvQkFDcEIsTUFBTSxFQUFFLElBQUk7aUJBQ1osQ0FBQyxDQUFDO1lBQ0osQ0FBQyxFQUFDLENBQUM7UUFDSixDQUFDLEVBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUNELGVBQWU7Ozs7OztJQUNmLHdEQUFxQjs7Ozs7O0lBQXJCLFVBQXNCLEtBSXJCO1FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2YsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDZDtRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsWUFBWTs7Ozs7O0lBQ1osb0RBQWlCOzs7Ozs7SUFBakIsVUFBa0IsS0FBZ0I7UUFDakMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2YsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDZDtRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsaUJBQWlCOzs7Ozs7SUFDakIsZ0RBQWE7Ozs7OztJQUFiLFVBQ0MsS0FBbUI7UUFLbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDOzs7OztJQUNELDJDQUFROzs7O0lBQVIsVUFBUyxLQUFvQjs7WUFDdEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUk7Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLFVBQVUsRUFBekIsQ0FBeUIsRUFBQztRQUNsRixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQXJCLENBQXFCLEVBQUMsRUFBRTtZQUM5QyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMzQjs7WUFDSyxHQUFHLEdBQUcsbUJBQUE7WUFDWCxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsRUFBRSxFQUFFLEtBQUssRUFBRTtZQUNYLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDekIsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDdEMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2xCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztTQUMxQixFQUFxQjtRQUN0QixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU87Ozs7O1FBQUMsVUFBQyxDQUFDLEVBQUUsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBcEIsQ0FBb0IsRUFBQyxDQUFDO1FBQ2pELE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7Ozs7O0lBQ0QsOENBQVc7Ozs7SUFBWCxVQUFZLEtBQWdCOztZQUNyQixJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSTs7OztRQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsVUFBVSxFQUF6QixDQUF5QixFQUFDLENBQUMsTUFBTTtRQUM1RixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQWpCLENBQWlCLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixDQUFDOzs7OztJQUNELCtDQUFZOzs7O0lBQVosVUFBYSxLQUFZO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQzs7Ozs7SUFDRCwrQ0FBWTs7OztJQUFaLFVBQWEsS0FBYTtRQUN6QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7Ozs7O0lBQ0QsbURBQWdCOzs7O0lBQWhCLFVBQWlCLEtBQTRCOztZQUN0QyxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSTs7OztRQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsVUFBVSxFQUF6QixDQUF5QixFQUFDLENBQUMsTUFBTTtRQUM1RixlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQWpCLENBQWlCLEVBQUMsRUFBRSxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxPQUFPOzs7OztRQUFDLFVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQXBCLENBQW9CLEVBQUMsQ0FBQztRQUM3QyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRzs7OztRQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBcEMsQ0FBb0MsRUFBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQzs7Ozs7SUFDRCw4Q0FBVzs7OztJQUFYLFVBQVksS0FBdUI7O1lBQzVCLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWU7YUFDN0MsSUFBSTs7OztRQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsVUFBVSxFQUF6QixDQUF5QixFQUFDO2FBQ3BDLE1BQU0sQ0FBQyxJQUFJOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQWpCLENBQWlCLEVBQUM7UUFDckMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN4QixHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDaEMsR0FBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7Ozs7O0lBQ0QsNkNBQVU7Ozs7SUFBVixVQUFXLEtBQWdCO1FBQzFCLE9BQU8sRUFBRSxDQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUk7Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLFVBQVUsRUFBekIsQ0FBeUIsRUFBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQWpCLENBQWlCLEVBQUMsQ0FDNUcsQ0FBQztJQUNILENBQUM7O2dCQXBLRCxVQUFVOzs7O2dCQW5DVixzQkFBc0I7Z0JBTmQsY0FBYzs7SUE4TXZCLCtCQUFDO0NBQUEsQUFyS0QsSUFxS0M7U0FwS1ksd0JBQXdCOzs7SUFDcEMseUNBQWU7O0lBQ2Ysa0RBQXNDOzs7OztJQUMxQiw0Q0FBd0M7Ozs7O0lBQUUsd0NBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ3VycmVudFNlcnZpY2UsIEJpbGxPcGVyYXRlIH0gZnJvbSAnZGJ3ZWItY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7XHJcblx0QWRkQ2F0ZWdvcnlQYXJhbSxcclxuXHRBZGRMYWJlbFBhcmFtLFxyXG5cdEVsZVZpZXdCYWNrRmFjZVNlcnZpY2UsXHJcblx0RmV0Y2hMYWJlbFJlc3VsdCxcclxuXHRNb2RlbEVsZW1lbnRDYXRlZ29yeSxcclxuXHRNb2RlbEVsZW1lbnRMYWJlbCxcclxuXHRTZXRDYXRlZ29yeVBvc2l0aW9uUGFyYW0sXHJcblx0U2V0Q2F0ZWdvcnlQb3NpdGlvblJlc3VsdCxcclxuXHRTZXRMYWJlbFBvc2l0aW9uUGFyYW0sXHJcblx0U2V0TGFiZWxQb3NpdGlvblJlc3VsdCxcclxuXHRVcGRhdGVDYXRlZ29yeVBhcmFtLFxyXG5cdFVwZGF0ZUxhYmVsUGFyYW1cclxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbGV2aWV3L2VsZXZpZXctYmFja2ZhY2UnO1xyXG5pbXBvcnQgeyBDYXRlZ29yeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvY2F0ZWdvcnknO1xyXG5pbXBvcnQge1xyXG5cdElFbGVtZW50SGlzLFxyXG5cdElMYWJlbCxcclxuXHRJTGFiZWxIaXNJdGVtLFxyXG5cdElMYWJlbEhpc0tleSxcclxuXHRJTGFiZWxLZXksXHJcblx0SU5vZGUsXHJcblx0T3duZXJCeUVudW0sXHJcblx0b3duZXJFbGVtZW50XHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxldmlldy90eXBlcy9tb2RlbCc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRWxlbWVudERhdGFSZWNvcmRWaWV3IH0gZnJvbSAnLi9lbGVtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYWNrRmFjZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbGFiZWwtbWFuYWdlci9zZXJ2aWNlL2JhY2tmYWNlJztcclxuXHJcbmZ1bmN0aW9uIG5ld0lEKCkge1xyXG5cdGNvbnN0IGJ1ZiA9IHV1aWQudjEobnVsbCwgW10pO1xyXG5cdGNvbnN0IFRZUEVEX0FSUkFZID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTtcclxuXHRjb25zdCBTVFJJTkdfQ0hBUiA9IFRZUEVEX0FSUkFZLnJlZHVjZSgoZGF0YSwgYnl0ZSkgPT4ge1xyXG5cdFx0cmV0dXJuIGRhdGEgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGUpO1xyXG5cdH0sICcnKTtcclxuXHRjb25zdCBiYXNlNjRTdHJpbmcgPSBidG9hKFNUUklOR19DSEFSKTtcclxuXHRyZXR1cm4gYmFzZTY0U3RyaW5nO1xyXG59XHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIExhYmVsTW9ja0JhY2tmYWNlU2VydmljZSBpbXBsZW1lbnRzIEJhY2tGYWNlIHtcclxuXHRpc0FkZDogYm9vbGVhbjtcclxuXHRyZWNvcmRWaWV3RGF0YTogRWxlbWVudERhdGFSZWNvcmRWaWV3O1xyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYmFja2ZhY2U6IEVsZVZpZXdCYWNrRmFjZVNlcnZpY2UsIHByaXZhdGUgY3VycjogQ3VycmVudFNlcnZpY2UpIHt9XHJcblx0YWRkQ2F0ZWdvcnkocGFyYW06IEFkZENhdGVnb3J5UGFyYW0pOiBPYnNlcnZhYmxlPENhdGVnb3J5PiB7XHJcblx0XHRpZiAoIXBhcmFtLk5hbWUpIHtcclxuXHRcdFx0cmV0dXJuIHRocm93RXJyb3IoJ+WQjeensOS4uuepuicpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmQodiA9PiB2Lk5hbWUgPT09IHBhcmFtLk5hbWUpKSB7XHJcblx0XHRcdHJldHVybiB0aHJvd0Vycm9yKCflkI3np7Dph43lpI0nKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IG5ld0NhdGUgPSB7XHJcblx0XHRcdElEOiBuZXdJRCgpLFxyXG5cdFx0XHRFbGVOYW1lOiBwYXJhbS5FbGVOYW1lLFxyXG5cdFx0XHRPd25lckJ5OiBwYXJhbS5Pd25lckJ5LFxyXG5cdFx0XHRPd25lcjogb3duZXJFbGVtZW50LFxyXG5cdFx0XHROYW1lOiBwYXJhbS5OYW1lXHJcblx0XHR9IGFzIE1vZGVsRWxlbWVudENhdGVnb3J5O1xyXG5cdFx0aWYgKHBhcmFtLkJlZm9yZUF0SUQpIHtcclxuXHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMuc3BsaWNlKFxyXG5cdFx0XHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmRJbmRleCh2ID0+IHYuSUQgPT09IHBhcmFtLkJlZm9yZUF0SUQpLFxyXG5cdFx0XHRcdDAsXHJcblx0XHRcdFx0bmV3Q2F0ZVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMucHVzaChuZXdDYXRlKTtcclxuXHRcdH1cclxuXHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZvckVhY2goKHYsIGkpID0+ICh2LlBvc2l0aW9uID0gaSArIDEpKTtcclxuXHRcdGNvbnN0IHJldiA9IG5ldyBDYXRlZ29yeSgpO1xyXG5cdFx0cmV2LklEID0gbmV3Q2F0ZS5JRDtcclxuXHRcdHJldi5OYW1lID0gbmV3Q2F0ZS5OYW1lO1xyXG5cdFx0cmV2Lk93bmVyID0gbmV3Q2F0ZS5Pd25lcjtcclxuXHRcdHJldi5Pd25lckJ5ID0gbmV3Q2F0ZS5Pd25lckJ5O1xyXG5cdFx0cmV2LlBvc2l0aW9uID0gbmV3Q2F0ZS5Qb3NpdGlvbjtcclxuXHRcdHJldHVybiBvZihyZXYpO1xyXG5cdH1cclxuXHRyZW1vdmVDYXRlZ29yeShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcblx0XHR0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllc1xyXG5cdFx0XHQuc3BsaWNlKHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmRJbmRleCh2ID0+IHYuSUQgPT09IGlkKSwgMSlcclxuXHRcdFx0LmZvckVhY2goKHYsIGkpID0+ICh2LlBvc2l0aW9uID0gaSArIDEpKTtcclxuXHRcdHJldHVybiBvZih0cnVlKTtcclxuXHR9XHJcblx0c2V0Q2F0ZWdvcnlQb3NpdGlvbihwYXJhbTogU2V0Q2F0ZWdvcnlQb3NpdGlvblBhcmFtKTogT2JzZXJ2YWJsZTxTZXRDYXRlZ29yeVBvc2l0aW9uUmVzdWx0W10+IHtcclxuXHRcdG1vdmVJdGVtSW5BcnJheShcclxuXHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMsXHJcblx0XHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmRJbmRleCh2ID0+IHYuSUQgPT09IHBhcmFtLklEKSxcclxuXHRcdFx0cGFyYW0uUG9zaXRpb24gLSAxXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMuZm9yRWFjaCgodiwgaSkgPT4gKHYuUG9zaXRpb24gPSBpICsgMSkpO1xyXG5cdFx0cmV0dXJuIG9mKHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLm1hcCh2ID0+ICh7IElEOiB2LklELCBQb3NpdGlvbjogdi5Qb3NpdGlvbiB9KSkpO1xyXG5cdH1cclxuXHR1cGRhdGVDYXRlZ29yeShwYXJhbTogVXBkYXRlQ2F0ZWdvcnlQYXJhbSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG5cdFx0Y29uc3QgYyA9IHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5JRCk7XHJcblx0XHRjLk5hbWUgPSBwYXJhbS5OYW1lO1xyXG5cdFx0cmV0dXJuIG9mKHRydWUpO1xyXG5cdH1cclxuXHRmZXRjaENhdGVnb3JpZXMocGFyYW06IHsgRWxlTmFtZTogc3RyaW5nOyBPd25lckJ5OiBPd25lckJ5RW51bTsgT3duZXI6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxDYXRlZ29yeVtdPiB7XHJcblx0XHQvLyDmlrDlop7nirbmgIHkuIvvvIzkuI3og73ljrvlj5bmlbDmja7vvIzlm6DkuLrmnInlj6/og73kvJrlj5bliLDlt7LlrZjlnKjnmoTorrDlvZXmlbDmja7vvIzpgKDmiJDms4Tlr4ZcclxuXHRcdGlmICh0aGlzLmlzQWRkKSB7XHJcblx0XHRcdHJldHVybiBvZihbXSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcy5iYWNrZmFjZVxyXG5cdFx0XHQuZmV0Y2hGdWxsQ2F0ZWdvcmllcyh7IEVsZU5hbWU6IHBhcmFtLkVsZU5hbWUsIE93bmVyQnk6IHBhcmFtLk93bmVyQnksIE93bmVyOiBwYXJhbS5Pd25lciB9KVxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHRtYXAoY2F0ZXMgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMgPSBjYXRlcztcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5tYXAodiA9PiB7XHJcblx0XHRcdFx0XHRcdGxldCBsYmxzOiB7IElEOiBzdHJpbmc7IE5hbWU6IHN0cmluZyB9W107XHJcblx0XHRcdFx0XHRcdGlmICh2LkxhYmVscykge1xyXG5cdFx0XHRcdFx0XHRcdGxibHMgPSB2LkxhYmVscy5tYXAobGJsID0+ICh7XHJcblx0XHRcdFx0XHRcdFx0XHRJRDogbGJsLklELFxyXG5cdFx0XHRcdFx0XHRcdFx0TmFtZTogbGJsLk5hbWVcclxuXHRcdFx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuIENhdGVnb3J5LmZyb21JbnRlcmZhY2Uoe1xyXG5cdFx0XHRcdFx0XHRcdElEOiB2LklELFxyXG5cdFx0XHRcdFx0XHRcdE5hbWU6IHYuTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRPd25lcjogdi5Pd25lcixcclxuXHRcdFx0XHRcdFx0XHRPd25lckJ5OiB2Lk93bmVyQnksXHJcblx0XHRcdFx0XHRcdFx0UG9zaXRpb246IHYuUG9zaXRpb24sXHJcblx0XHRcdFx0XHRcdFx0TGFiZWxzOiBsYmxzXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHR9XHJcblx0Ly8g6I635Y+W6I+c5Y2V6aG55omA5pyJ5qCH562+55qE5pel5b+XXHJcblx0ZmV0Y2hDYXRlZ29yeUxhYmVsSGlzKHBhcmFtOiB7XHJcblx0XHRFbGVOYW1lOiBzdHJpbmc7XHJcblx0XHRPd25lckJ5OiBPd25lckJ5RW51bTtcclxuXHRcdE93bmVyOiBzdHJpbmdbXTtcclxuXHR9KTogT2JzZXJ2YWJsZTxJRWxlbWVudEhpc1tdPiB7XHJcblx0XHRpZiAodGhpcy5pc0FkZCkge1xyXG5cdFx0XHRyZXR1cm4gb2YoW10pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hDYXRlZ29yeUxhYmVsSGlzKHBhcmFtKTtcclxuXHR9XHJcblx0Ly8g6I635Y+W5qCH562+55qE5pel5b+X5YiX6KGoXHJcblx0ZmV0Y2hMYWJlbEhpc0xpc3QocGFyYW06IElMYWJlbEtleSk6IE9ic2VydmFibGU8SUxhYmVsSGlzSXRlbVtdPiB7XHJcblx0XHRpZiAodGhpcy5pc0FkZCkge1xyXG5cdFx0XHRyZXR1cm4gb2YoW10pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hMYWJlbEhpc0xpc3QocGFyYW0pO1xyXG5cdH1cclxuXHQvLyDmoLnmja7ml7bpl7Tojrflj5ZsYWJlbOeahOWGheWuuVxyXG5cdGZldGNoTGFiZWxIaXMoXHJcblx0XHRwYXJhbTogSUxhYmVsSGlzS2V5XHJcblx0KTogT2JzZXJ2YWJsZTx7XHJcblx0XHRDb250czogc3RyaW5nO1xyXG5cdFx0UGxhaW5UZXh0OiBzdHJpbmc7XHJcblx0fT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hMYWJlbEhpcyhwYXJhbSk7XHJcblx0fVxyXG5cdGFkZExhYmVsKHBhcmFtOiBBZGRMYWJlbFBhcmFtKTogT2JzZXJ2YWJsZTxJTGFiZWw+IHtcclxuXHRcdGNvbnN0IGMgPSB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5maW5kKHYgPT4gdi5JRCA9PT0gcGFyYW0uQ2F0ZWdvcnlJRCk7XHJcblx0XHRjLkxhYmVscyA9IGMuTGFiZWxzIHx8IFtdO1xyXG5cdFx0aWYgKGMuTGFiZWxzLmZpbmQodiA9PiB2Lk5hbWUgPT09IHBhcmFtLk5hbWUpKSB7XHJcblx0XHRcdHJldHVybiB0aHJvd0Vycm9yKCfph43lpI3nmoTlkI3np7AnKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGxibCA9IHtcclxuXHRcdFx0Q2F0ZWdvcnlJRDogcGFyYW0uQ2F0ZWdvcnlJRCxcclxuXHRcdFx0SUQ6IG5ld0lEKCksXHJcblx0XHRcdE5hbWU6IHBhcmFtLk5hbWUsXHJcblx0XHRcdExhc3RXcml0ZVRpbWU6IG5ldyBEYXRlKCksXHJcblx0XHRcdExhc3RXcml0ZVVzZXI6IHRoaXMuY3Vyci5kYXRhLlVzZXJOYW1lLFxyXG5cdFx0XHRDb250czogcGFyYW0uQ29udHMsXHJcblx0XHRcdFBsYWluVGV4dDogcGFyYW0uUGxhaW5UZXh0XHJcblx0XHR9IGFzIE1vZGVsRWxlbWVudExhYmVsO1xyXG5cdFx0Yy5MYWJlbHMucHVzaChsYmwpO1xyXG5cdFx0Yy5MYWJlbHMuZm9yRWFjaCgodiwgaSkgPT4gKHYuUG9zaXRpb24gPSBpICsgMSkpO1xyXG5cdFx0cmV0dXJuIG9mKGxibCk7XHJcblx0fVxyXG5cdHJlbW92ZUxhYmVsKHBhcmFtOiBJTGFiZWxLZXkpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuXHRcdGNvbnN0IGxibHMgPSB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5maW5kKHYgPT4gdi5JRCA9PT0gcGFyYW0uQ2F0ZWdvcnlJRCkuTGFiZWxzO1xyXG5cdFx0bGJscy5zcGxpY2UobGJscy5maW5kSW5kZXgodiA9PiB2LklEID09PSBwYXJhbS5JRCksIDEpO1xyXG5cdFx0cmV0dXJuIG9mKHRydWUpO1xyXG5cdH1cclxuXHRub2RlVG9TdHJpbmcocGFyYW06IElOb2RlKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuXHRcdHJldHVybiB0aGlzLmJhY2tmYWNlLm5vZGVUb1N0cmluZyhwYXJhbSk7XHJcblx0fVxyXG5cdHN0cmluZ1RvTm9kZShwYXJhbTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJTm9kZT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2Uuc3RyaW5nVG9Ob2RlKHBhcmFtKTtcclxuXHR9XHJcblx0c2V0TGFiZWxQb3NpdGlvbihwYXJhbTogU2V0TGFiZWxQb3NpdGlvblBhcmFtKTogT2JzZXJ2YWJsZTxTZXRMYWJlbFBvc2l0aW9uUmVzdWx0W10+IHtcclxuXHRcdGNvbnN0IGxibHMgPSB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5maW5kKHYgPT4gdi5JRCA9PT0gcGFyYW0uQ2F0ZWdvcnlJRCkuTGFiZWxzO1xyXG5cdFx0bW92ZUl0ZW1JbkFycmF5KGxibHMsIGxibHMuZmluZEluZGV4KHYgPT4gdi5JRCA9PT0gcGFyYW0uSUQpLCBwYXJhbS5Qb3NpdGlvbiAtIDEpO1xyXG5cdFx0bGJscy5mb3JFYWNoKCh2LCBpKSA9PiAodi5Qb3NpdGlvbiA9IGkgKyAxKSk7XHJcblx0XHRyZXR1cm4gb2YobGJscy5tYXAodiA9PiAoeyBJRDogdi5JRCwgUG9zaXRpb246IHYuUG9zaXRpb24gfSkpKTtcclxuXHR9XHJcblx0dXBkYXRlTGFiZWwocGFyYW06IFVwZGF0ZUxhYmVsUGFyYW0pOiBPYnNlcnZhYmxlPElMYWJlbD4ge1xyXG5cdFx0Y29uc3QgbGJsID0gdGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXNcclxuXHRcdFx0LmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5DYXRlZ29yeUlEKVxyXG5cdFx0XHQuTGFiZWxzLmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5JRCk7XHJcblx0XHRsYmwuTmFtZSA9IHBhcmFtLk5hbWU7XHJcblx0XHRsYmwuQ29udHMgPSBwYXJhbS5Db250cztcclxuXHRcdGxibC5QbGFpblRleHQgPSBwYXJhbS5QbGFpblRleHQ7XHJcblx0XHRsYmwuTGFzdFdyaXRlVGltZSA9IG5ldyBEYXRlKCk7XHJcblx0XHRyZXR1cm4gb2YobGJsKTtcclxuXHR9XHJcblx0ZmV0Y2hMYWJlbChwYXJhbTogSUxhYmVsS2V5KTogT2JzZXJ2YWJsZTxGZXRjaExhYmVsUmVzdWx0PiB7XHJcblx0XHRyZXR1cm4gb2YoXHJcblx0XHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5DYXRlZ29yeUlEKS5MYWJlbHMuZmluZCh2ID0+IHYuSUQgPT09IHBhcmFtLklEKVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIl19