UNPKG

dbweb-common

Version:

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

451 lines 34.2 kB
/** * @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtbW9jay1iYWNrZmFjZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2VsZW1lbnQvc2VydmljZS9sYWJlbC1tb2NrLWJhY2tmYWNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQWUsTUFBTSxZQUFZLENBQUM7QUFDekQsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUdOLHNCQUFzQixFQVV0QixNQUFNLHlDQUF5QyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRSxPQUFPLEVBUU4sWUFBWSxFQUNaLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBSXJDLFNBQVMsS0FBSzs7UUFDUCxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDOztRQUN2QixXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDOztRQUNqQyxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU07Ozs7O0lBQUMsVUFBQyxJQUFJLEVBQUUsSUFBSTtRQUNqRCxPQUFPLElBQUksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUMsR0FBRSxFQUFFLENBQUM7O1FBQ0EsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDdEMsT0FBTyxZQUFZLENBQUM7QUFDckIsQ0FBQztBQUNEO0lB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QUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN4QixHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDaEMsR0FBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7Ozs7O0lBQ0QsNkNBQVU7Ozs7SUFBVixVQUFXLEtBQWdCO1FBQzFCLE9BQU8sRUFBRSxDQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUk7Ozs7UUFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLFVBQVUsRUFBekIsQ0FBeUIsRUFBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQWpCLENBQWlCLEVBQUMsQ0FDNUcsQ0FBQztJQUNILENBQUM7O2dCQXBLRCxVQUFVOzs7O2dCQW5DVixzQkFBc0I7Z0JBTmQsY0FBYzs7SUE4TXZCLCtCQUFDO0NBQUEsQUFyS0QsSUFxS0M7U0FwS1ksd0JBQXdCOzs7SUFDcEMseUNBQWU7O0lBQ2Ysa0RBQXNDOzs7OztJQUMxQiw0Q0FBd0M7Ozs7O0lBQUUsd0NBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ3VycmVudFNlcnZpY2UsIEJpbGxPcGVyYXRlIH0gZnJvbSAnZGJ3ZWItY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7XHJcblx0QWRkQ2F0ZWdvcnlQYXJhbSxcclxuXHRBZGRMYWJlbFBhcmFtLFxyXG5cdEVsZVZpZXdCYWNrRmFjZVNlcnZpY2UsXHJcblx0RmV0Y2hMYWJlbFJlc3VsdCxcclxuXHRNb2RlbEVsZW1lbnRDYXRlZ29yeSxcclxuXHRNb2RlbEVsZW1lbnRMYWJlbCxcclxuXHRTZXRDYXRlZ29yeVBvc2l0aW9uUGFyYW0sXHJcblx0U2V0Q2F0ZWdvcnlQb3NpdGlvblJlc3VsdCxcclxuXHRTZXRMYWJlbFBvc2l0aW9uUGFyYW0sXHJcblx0U2V0TGFiZWxQb3NpdGlvblJlc3VsdCxcclxuXHRVcGRhdGVDYXRlZ29yeVBhcmFtLFxyXG5cdFVwZGF0ZUxhYmVsUGFyYW1cclxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbGV2aWV3L2VsZXZpZXctYmFja2ZhY2UnO1xyXG5pbXBvcnQgeyBDYXRlZ29yeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvY2F0ZWdvcnknO1xyXG5pbXBvcnQge1xyXG5cdElFbGVtZW50SGlzLFxyXG5cdElMYWJlbCxcclxuXHRJTGFiZWxIaXNJdGVtLFxyXG5cdElMYWJlbEhpc0tleSxcclxuXHRJTGFiZWxLZXksXHJcblx0SU5vZGUsXHJcblx0T3duZXJCeUVudW0sXHJcblx0b3duZXJFbGVtZW50XHJcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxldmlldy90eXBlcy9tb2RlbCc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRWxlbWVudERhdGFSZWNvcmRWaWV3IH0gZnJvbSAnLi9lbGVtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYWNrRmFjZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbGFiZWwtbWFuYWdlci9zZXJ2aWNlL2JhY2tmYWNlJztcclxuXHJcbmZ1bmN0aW9uIG5ld0lEKCkge1xyXG5cdGNvbnN0IGJ1ZiA9IHV1aWQudjEobnVsbCwgW10pO1xyXG5cdGNvbnN0IFRZUEVEX0FSUkFZID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTtcclxuXHRjb25zdCBTVFJJTkdfQ0hBUiA9IFRZUEVEX0FSUkFZLnJlZHVjZSgoZGF0YSwgYnl0ZSkgPT4ge1xyXG5cdFx0cmV0dXJuIGRhdGEgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGUpO1xyXG5cdH0sICcnKTtcclxuXHRjb25zdCBiYXNlNjRTdHJpbmcgPSBidG9hKFNUUklOR19DSEFSKTtcclxuXHRyZXR1cm4gYmFzZTY0U3RyaW5nO1xyXG59XHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIExhYmVsTW9ja0JhY2tmYWNlU2VydmljZSBpbXBsZW1lbnRzIEJhY2tGYWNlIHtcclxuXHRpc0FkZDogYm9vbGVhbjtcclxuXHRyZWNvcmRWaWV3RGF0YTogRWxlbWVudERhdGFSZWNvcmRWaWV3O1xyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYmFja2ZhY2U6IEVsZVZpZXdCYWNrRmFjZVNlcnZpY2UsIHByaXZhdGUgY3VycjogQ3VycmVudFNlcnZpY2UpIHt9XHJcblx0YWRkQ2F0ZWdvcnkocGFyYW06IEFkZENhdGVnb3J5UGFyYW0pOiBPYnNlcnZhYmxlPENhdGVnb3J5PiB7XHJcblx0XHRpZiAoIXBhcmFtLk5hbWUpIHtcclxuXHRcdFx0cmV0dXJuIHRocm93RXJyb3IoJ+WQjeensOS4uuepuicpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmQodiA9PiB2Lk5hbWUgPT09IHBhcmFtLk5hbWUpKSB7XHJcblx0XHRcdHJldHVybiB0aHJvd0Vycm9yKCflkI3np7Dph43lpI0nKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IG5ld0NhdGUgPSB7XHJcblx0XHRcdElEOiBuZXdJRCgpLFxyXG5cdFx0XHRFbGVOYW1lOiBwYXJhbS5FbGVOYW1lLFxyXG5cdFx0XHRPd25lckJ5OiBwYXJhbS5Pd25lckJ5LFxyXG5cdFx0XHRPd25lcjogb3duZXJFbGVtZW50LFxyXG5cdFx0XHROYW1lOiBwYXJhbS5OYW1lXHJcblx0XHR9IGFzIE1vZGVsRWxlbWVudENhdGVnb3J5O1xyXG5cdFx0aWYgKHBhcmFtLkJlZm9yZUF0SUQpIHtcclxuXHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMuc3BsaWNlKFxyXG5cdFx0XHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmRJbmRleCh2ID0+IHYuSUQgPT09IHBhcmFtLkJlZm9yZUF0SUQpLFxyXG5cdFx0XHRcdDAsXHJcblx0XHRcdFx0bmV3Q2F0ZVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMucHVzaChuZXdDYXRlKTtcclxuXHRcdH1cclxuXHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZvckVhY2goKHYsIGkpID0+ICh2LlBvc2l0aW9uID0gaSArIDEpKTtcclxuXHRcdGNvbnN0IHJldiA9IG5ldyBDYXRlZ29yeSgpO1xyXG5cdFx0cmV2LklEID0gbmV3Q2F0ZS5JRDtcclxuXHRcdHJldi5OYW1lID0gbmV3Q2F0ZS5OYW1lO1xyXG5cdFx0cmV2Lk93bmVyID0gbmV3Q2F0ZS5Pd25lcjtcclxuXHRcdHJldi5Pd25lckJ5ID0gbmV3Q2F0ZS5Pd25lckJ5O1xyXG5cdFx0cmV2LlBvc2l0aW9uID0gbmV3Q2F0ZS5Qb3NpdGlvbjtcclxuXHRcdHJldHVybiBvZihyZXYpO1xyXG5cdH1cclxuXHRyZW1vdmVDYXRlZ29yeShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcblx0XHR0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllc1xyXG5cdFx0XHQuc3BsaWNlKHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmRJbmRleCh2ID0+IHYuSUQgPT09IGlkKSwgMSlcclxuXHRcdFx0LmZvckVhY2goKHYsIGkpID0+ICh2LlBvc2l0aW9uID0gaSArIDEpKTtcclxuXHRcdHJldHVybiBvZih0cnVlKTtcclxuXHR9XHJcblx0c2V0Q2F0ZWdvcnlQb3NpdGlvbihwYXJhbTogU2V0Q2F0ZWdvcnlQb3NpdGlvblBhcmFtKTogT2JzZXJ2YWJsZTxTZXRDYXRlZ29yeVBvc2l0aW9uUmVzdWx0W10+IHtcclxuXHRcdG1vdmVJdGVtSW5BcnJheShcclxuXHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMsXHJcblx0XHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmRJbmRleCh2ID0+IHYuSUQgPT09IHBhcmFtLklEKSxcclxuXHRcdFx0cGFyYW0uUG9zaXRpb24gLSAxXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMuZm9yRWFjaCgodiwgaSkgPT4gKHYuUG9zaXRpb24gPSBpICsgMSkpO1xyXG5cdFx0cmV0dXJuIG9mKHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLm1hcCh2ID0+ICh7IElEOiB2LklELCBQb3NpdGlvbjogdi5Qb3NpdGlvbiB9KSkpO1xyXG5cdH1cclxuXHR1cGRhdGVDYXRlZ29yeShwYXJhbTogVXBkYXRlQ2F0ZWdvcnlQYXJhbSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG5cdFx0Y29uc3QgYyA9IHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5JRCk7XHJcblx0XHRjLk5hbWUgPSBwYXJhbS5OYW1lO1xyXG5cdFx0cmV0dXJuIG9mKHRydWUpO1xyXG5cdH1cclxuXHRmZXRjaENhdGVnb3JpZXMocGFyYW06IHsgRWxlTmFtZTogc3RyaW5nOyBPd25lckJ5OiBPd25lckJ5RW51bTsgT3duZXI6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxDYXRlZ29yeVtdPiB7XHJcblx0XHQvLyDmlrDlop7nirbmgIHkuIvvvIzkuI3og73ljrvlj5bmlbDmja7vvIzlm6DkuLrmnInlj6/og73kvJrlj5bliLDlt7LlrZjlnKjnmoTorrDlvZXmlbDmja7vvIzpgKDmiJDms4Tlr4ZcclxuXHRcdGlmICh0aGlzLmlzQWRkKSB7XHJcblx0XHRcdHJldHVybiBvZihbXSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcy5iYWNrZmFjZVxyXG5cdFx0XHQuZmV0Y2hGdWxsQ2F0ZWdvcmllcyh7IEVsZU5hbWU6IHBhcmFtLkVsZU5hbWUsIE93bmVyQnk6IHBhcmFtLk93bmVyQnksIE93bmVyOiBwYXJhbS5Pd25lciB9KVxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHRtYXAoY2F0ZXMgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXMgPSBjYXRlcztcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5tYXAodiA9PiB7XHJcblx0XHRcdFx0XHRcdGxldCBsYmxzOiB7IElEOiBzdHJpbmc7IE5hbWU6IHN0cmluZyB9W107XHJcblx0XHRcdFx0XHRcdGlmICh2LkxhYmVscykge1xyXG5cdFx0XHRcdFx0XHRcdGxibHMgPSB2LkxhYmVscy5tYXAobGJsID0+ICh7XHJcblx0XHRcdFx0XHRcdFx0XHRJRDogbGJsLklELFxyXG5cdFx0XHRcdFx0XHRcdFx0TmFtZTogbGJsLk5hbWVcclxuXHRcdFx0XHRcdFx0XHR9KSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0cmV0dXJuIENhdGVnb3J5LmZyb21JbnRlcmZhY2Uoe1xyXG5cdFx0XHRcdFx0XHRcdElEOiB2LklELFxyXG5cdFx0XHRcdFx0XHRcdE5hbWU6IHYuTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRPd25lcjogdi5Pd25lcixcclxuXHRcdFx0XHRcdFx0XHRPd25lckJ5OiB2Lk93bmVyQnksXHJcblx0XHRcdFx0XHRcdFx0UG9zaXRpb246IHYuUG9zaXRpb24sXHJcblx0XHRcdFx0XHRcdFx0TGFiZWxzOiBsYmxzXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHR9XHJcblx0Ly8g6I635Y+W6I+c5Y2V6aG55omA5pyJ5qCH562+55qE5pel5b+XXHJcblx0ZmV0Y2hDYXRlZ29yeUxhYmVsSGlzKHBhcmFtOiB7XHJcblx0XHRFbGVOYW1lOiBzdHJpbmc7XHJcblx0XHRPd25lckJ5OiBPd25lckJ5RW51bTtcclxuXHRcdE93bmVyOiBzdHJpbmdbXTtcclxuXHR9KTogT2JzZXJ2YWJsZTxJRWxlbWVudEhpc1tdPiB7XHJcblx0XHRpZiAodGhpcy5pc0FkZCkge1xyXG5cdFx0XHRyZXR1cm4gb2YoW10pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hDYXRlZ29yeUxhYmVsSGlzKHBhcmFtKTtcclxuXHR9XHJcblx0Ly8g6I635Y+W5qCH562+55qE5pel5b+X5YiX6KGoXHJcblx0ZmV0Y2hMYWJlbEhpc0xpc3QocGFyYW06IElMYWJlbEtleSk6IE9ic2VydmFibGU8SUxhYmVsSGlzSXRlbVtdPiB7XHJcblx0XHRpZiAodGhpcy5pc0FkZCkge1xyXG5cdFx0XHRyZXR1cm4gb2YoW10pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hMYWJlbEhpc0xpc3QocGFyYW0pO1xyXG5cdH1cclxuXHQvLyDmoLnmja7ml7bpl7Tojrflj5ZsYWJlbOeahOWGheWuuVxyXG5cdGZldGNoTGFiZWxIaXMoXHJcblx0XHRwYXJhbTogSUxhYmVsSGlzS2V5XHJcblx0KTogT2JzZXJ2YWJsZTx7XHJcblx0XHRDb250czogc3RyaW5nO1xyXG5cdFx0UGxhaW5UZXh0OiBzdHJpbmc7XHJcblx0fT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hMYWJlbEhpcyhwYXJhbSk7XHJcblx0fVxyXG5cdGFkZExhYmVsKHBhcmFtOiBBZGRMYWJlbFBhcmFtKTogT2JzZXJ2YWJsZTxJTGFiZWw+IHtcclxuXHRcdGNvbnN0IGMgPSB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5maW5kKHYgPT4gdi5JRCA9PT0gcGFyYW0uQ2F0ZWdvcnlJRCk7XHJcblx0XHRjLkxhYmVscyA9IGMuTGFiZWxzIHx8IFtdO1xyXG5cdFx0aWYgKGMuTGFiZWxzLmZpbmQodiA9PiB2Lk5hbWUgPT09IHBhcmFtLk5hbWUpKSB7XHJcblx0XHRcdHJldHVybiB0aHJvd0Vycm9yKCfph43lpI3nmoTlkI3np7AnKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGxibCA9IHtcclxuXHRcdFx0Q2F0ZWdvcnlJRDogcGFyYW0uQ2F0ZWdvcnlJRCxcclxuXHRcdFx0SUQ6IG5ld0lEKCksXHJcblx0XHRcdE5hbWU6IHBhcmFtLk5hbWUsXHJcblx0XHRcdExhc3RXcml0ZVRpbWU6IG5ldyBEYXRlKCksXHJcblx0XHRcdExhc3RXcml0ZVVzZXI6IHRoaXMuY3Vyci5kYXRhLlVzZXJOYW1lLFxyXG5cdFx0XHRDb250czogcGFyYW0uQ29udHMsXHJcblx0XHRcdFBsYWluVGV4dDogcGFyYW0uUGxhaW5UZXh0XHJcblx0XHR9IGFzIE1vZGVsRWxlbWVudExhYmVsO1xyXG5cdFx0Yy5MYWJlbHMucHVzaChsYmwpO1xyXG5cdFx0Yy5MYWJlbHMuZm9yRWFjaCgodiwgaSkgPT4gKHYuUG9zaXRpb24gPSBpICsgMSkpO1xyXG5cdFx0cmV0dXJuIG9mKGxibCk7XHJcblx0fVxyXG5cdHJlbW92ZUxhYmVsKHBhcmFtOiBJTGFiZWxLZXkpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuXHRcdGNvbnN0IGxibHMgPSB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5maW5kKHYgPT4gdi5JRCA9PT0gcGFyYW0uQ2F0ZWdvcnlJRCkuTGFiZWxzO1xyXG5cdFx0bGJscy5zcGxpY2UobGJscy5maW5kSW5kZXgodiA9PiB2LklEID09PSBwYXJhbS5JRCksIDEpO1xyXG5cdFx0cmV0dXJuIG9mKHRydWUpO1xyXG5cdH1cclxuXHRub2RlVG9TdHJpbmcocGFyYW06IElOb2RlKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuXHRcdHJldHVybiB0aGlzLmJhY2tmYWNlLm5vZGVUb1N0cmluZyhwYXJhbSk7XHJcblx0fVxyXG5cdHN0cmluZ1RvTm9kZShwYXJhbTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJTm9kZT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2Uuc3RyaW5nVG9Ob2RlKHBhcmFtKTtcclxuXHR9XHJcblx0c2V0TGFiZWxQb3NpdGlvbihwYXJhbTogU2V0TGFiZWxQb3NpdGlvblBhcmFtKTogT2JzZXJ2YWJsZTxTZXRMYWJlbFBvc2l0aW9uUmVzdWx0W10+IHtcclxuXHRcdGNvbnN0IGxibHMgPSB0aGlzLnJlY29yZFZpZXdEYXRhLmxhYmVsQ2F0ZWdvcmllcy5maW5kKHYgPT4gdi5JRCA9PT0gcGFyYW0uQ2F0ZWdvcnlJRCkuTGFiZWxzO1xyXG5cdFx0bW92ZUl0ZW1JbkFycmF5KGxibHMsIGxibHMuZmluZEluZGV4KHYgPT4gdi5JRCA9PT0gcGFyYW0uSUQpLCBwYXJhbS5Qb3NpdGlvbiAtIDEpO1xyXG5cdFx0bGJscy5mb3JFYWNoKCh2LCBpKSA9PiAodi5Qb3NpdGlvbiA9IGkgKyAxKSk7XHJcblx0XHRyZXR1cm4gb2YobGJscy5tYXAodiA9PiAoeyBJRDogdi5JRCwgUG9zaXRpb246IHYuUG9zaXRpb24gfSkpKTtcclxuXHR9XHJcblx0dXBkYXRlTGFiZWwocGFyYW06IFVwZGF0ZUxhYmVsUGFyYW0pOiBPYnNlcnZhYmxlPElMYWJlbD4ge1xyXG5cdFx0Y29uc3QgbGJsID0gdGhpcy5yZWNvcmRWaWV3RGF0YS5sYWJlbENhdGVnb3JpZXNcclxuXHRcdFx0LmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5DYXRlZ29yeUlEKVxyXG5cdFx0XHQuTGFiZWxzLmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5JRCk7XHJcblx0XHRsYmwuTmFtZSA9IHBhcmFtLk5hbWU7XHJcblx0XHRsYmwuQ29udHMgPSBwYXJhbS5Db250cztcclxuXHRcdGxibC5QbGFpblRleHQgPSBwYXJhbS5QbGFpblRleHQ7XHJcblx0XHRsYmwuTGFzdFdyaXRlVGltZSA9IG5ldyBEYXRlKCk7XHJcblx0XHRyZXR1cm4gb2YobGJsKTtcclxuXHR9XHJcblx0ZmV0Y2hMYWJlbChwYXJhbTogSUxhYmVsS2V5KTogT2JzZXJ2YWJsZTxGZXRjaExhYmVsUmVzdWx0PiB7XHJcblx0XHRyZXR1cm4gb2YoXHJcblx0XHRcdHRoaXMucmVjb3JkVmlld0RhdGEubGFiZWxDYXRlZ29yaWVzLmZpbmQodiA9PiB2LklEID09PSBwYXJhbS5DYXRlZ29yeUlEKS5MYWJlbHMuZmluZCh2ID0+IHYuSUQgPT09IHBhcmFtLklEKVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIl19