@rybos/angular2gridster
Version:
[](https://badge.fury.io/js/angular2gridster)
298 lines • 38.4 kB
JavaScript
export class GridListItem {
get $element() {
return this.getItem().$element;
}
get x() {
const item = this.getItem();
const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
return this.getValueX(breakpoint);
}
set x(value) {
const item = this.getItem();
const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
this.setValueX(value, breakpoint);
}
get y() {
const item = this.getItem();
const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
return this.getValueY(breakpoint);
}
set y(value) {
const item = this.getItem();
const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
this.setValueY(value, breakpoint);
}
get w() {
const item = this.getItem();
const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
return this.getValueW(breakpoint);
}
set w(value) {
const item = this.getItem();
const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
this.setValueW(value, breakpoint);
}
get h() {
const item = this.getItem();
const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
return this.getValueH(breakpoint);
}
set h(value) {
const item = this.getItem();
const breakpoint = item.gridster ? item.gridster.options.breakpoint : null;
this.setValueH(value, breakpoint);
}
get autoSize() {
return this.getItem().autoSize;
}
set autoSize(value) {
this.getItem().autoSize = value;
}
get dragAndDrop() {
return !!this.getItem().dragAndDrop;
}
get resizable() {
return !!this.getItem().resizable;
}
get positionX() {
const item = this.itemComponent || this.itemPrototype;
if (!item) {
return null;
}
return item.positionX;
}
get positionY() {
const item = this.itemComponent || this.itemPrototype;
if (!item) {
return null;
}
return item.positionY;
}
setFromGridsterItem(item) {
if (this.isItemSet()) {
throw new Error('GridListItem is already set.');
}
this.itemComponent = item;
return this;
}
setFromGridsterItemPrototype(item) {
if (this.isItemSet()) {
throw new Error('GridListItem is already set.');
}
this.itemPrototype = item;
return this;
}
setFromObjectLiteral(item) {
if (this.isItemSet()) {
throw new Error('GridListItem is already set.');
}
this.itemObject = item;
return this;
}
copy() {
const itemCopy = new GridListItem();
return itemCopy.setFromObjectLiteral({
$element: this.$element,
x: this.x,
y: this.y,
w: this.w,
h: this.h,
autoSize: this.autoSize,
dragAndDrop: this.dragAndDrop,
resizable: this.resizable
});
}
copyForBreakpoint(breakpoint) {
const itemCopy = new GridListItem();
return itemCopy.setFromObjectLiteral({
$element: this.$element,
x: this.getValueX(breakpoint),
y: this.getValueY(breakpoint),
w: this.getValueW(breakpoint),
h: this.getValueH(breakpoint),
autoSize: this.autoSize,
dragAndDrop: this.dragAndDrop,
resizable: this.resizable
});
}
getValueX(breakpoint) {
const item = this.getItem();
return item[this.getXProperty(breakpoint)];
}
getValueY(breakpoint) {
const item = this.getItem();
return item[this.getYProperty(breakpoint)];
}
getValueW(breakpoint) {
const item = this.getItem();
return item[this.getWProperty(breakpoint)] || 1;
}
getValueH(breakpoint) {
const item = this.getItem();
return item[this.getHProperty(breakpoint)] || 1;
}
setValueX(value, breakpoint) {
const item = this.getItem();
item[this.getXProperty(breakpoint)] = value;
}
setValueY(value, breakpoint) {
const item = this.getItem();
item[this.getYProperty(breakpoint)] = value;
}
setValueW(value, breakpoint) {
const item = this.getItem();
item[this.getWProperty(breakpoint)] = value;
}
setValueH(value, breakpoint) {
const item = this.getItem();
item[this.getHProperty(breakpoint)] = value;
}
triggerChangeX(breakpoint) {
const item = this.itemComponent;
if (item) {
item[this.getXProperty(breakpoint) + 'Change'].emit(this.getValueX(breakpoint));
}
}
triggerChangeY(breakpoint) {
const item = this.itemComponent;
if (item) {
item[this.getYProperty(breakpoint) + 'Change'].emit(this.getValueY(breakpoint));
}
}
triggerChangeW(breakpoint) {
const item = this.itemComponent;
if (item) {
item[this.getWProperty(breakpoint) + 'Change'].emit(this.getValueW(breakpoint));
}
}
triggerChangeH(breakpoint) {
const item = this.itemComponent;
if (item) {
item[this.getHProperty(breakpoint) + 'Change'].emit(this.getValueH(breakpoint));
}
}
hasPositions(breakpoint) {
const x = this.getValueX(breakpoint);
const y = this.getValueY(breakpoint);
return (x || x === 0) && (y || y === 0);
}
applyPosition(gridster) {
const position = this.calculatePosition(gridster);
this.itemComponent.positionX = position.left;
this.itemComponent.positionY = position.top;
this.itemComponent.updateElemenetPosition();
}
calculatePosition(gridster) {
if (!gridster && !this.itemComponent) {
return { left: 0, top: 0 };
}
gridster = gridster || this.itemComponent.gridster;
return {
left: this.x * gridster.cellWidth,
top: this.y * gridster.cellHeight
};
}
applySize(gridster) {
const size = this.calculateSize(gridster);
this.$element.style.width = size.width + 'px';
this.$element.style.height = size.height + 'px';
}
calculateSize(gridster) {
if (!gridster && !this.itemComponent) {
return { width: 0, height: 0 };
}
gridster = gridster || this.itemComponent.gridster;
let width = this.getValueW(gridster.options.breakpoint);
let height = this.getValueH(gridster.options.breakpoint);
if (gridster.options.direction === 'vertical') {
width = Math.min(width, gridster.options.lanes);
}
if (gridster.options.direction === 'horizontal') {
height = Math.min(height, gridster.options.lanes);
}
return {
width: width * gridster.cellWidth,
height: height * gridster.cellHeight
};
}
getXProperty(breakpoint) {
if (breakpoint && this.itemComponent) {
return GridListItem.X_PROPERTY_MAP[breakpoint];
}
else {
return 'x';
}
}
getYProperty(breakpoint) {
if (breakpoint && this.itemComponent) {
return GridListItem.Y_PROPERTY_MAP[breakpoint];
}
else {
return 'y';
}
}
getWProperty(breakpoint) {
if (this.itemPrototype) {
return this.itemPrototype[GridListItem.W_PROPERTY_MAP[breakpoint]] ?
GridListItem.W_PROPERTY_MAP[breakpoint] : 'w';
}
const item = this.getItem();
const responsiveSizes = item.gridster && item.gridster.options.responsiveSizes;
if (breakpoint && responsiveSizes) {
return GridListItem.W_PROPERTY_MAP[breakpoint];
}
else {
return 'w';
}
}
getHProperty(breakpoint) {
if (this.itemPrototype) {
return this.itemPrototype[GridListItem.H_PROPERTY_MAP[breakpoint]] ?
GridListItem.H_PROPERTY_MAP[breakpoint] : 'h';
}
const item = this.getItem();
const responsiveSizes = item.gridster && item.gridster.options.responsiveSizes;
if (breakpoint && responsiveSizes) {
return GridListItem.H_PROPERTY_MAP[breakpoint];
}
else {
return 'h';
}
}
getItem() {
const item = this.itemComponent || this.itemPrototype || this.itemObject;
if (!item) {
throw new Error('GridListItem is not set.');
}
return item;
}
isItemSet() {
return this.itemComponent || this.itemPrototype || this.itemObject;
}
}
GridListItem.BREAKPOINTS = ['sm', 'md', 'lg', 'xl'];
GridListItem.X_PROPERTY_MAP = {
sm: 'xSm',
md: 'xMd',
lg: 'xLg',
xl: 'xXl'
};
GridListItem.Y_PROPERTY_MAP = {
sm: 'ySm',
md: 'yMd',
lg: 'yLg',
xl: 'yXl'
};
GridListItem.W_PROPERTY_MAP = {
sm: 'wSm',
md: 'wMd',
lg: 'wLg',
xl: 'wXl'
};
GridListItem.H_PROPERTY_MAP = {
sm: 'hSm',
md: 'hMd',
lg: 'hLg',
xl: 'hXl'
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JpZExpc3RJdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhcjJncmlkc3Rlci9zcmMvbGliL2dyaWRMaXN0L0dyaWRMaXN0SXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLE9BQU8sWUFBWTtJQWtDckIsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFM0UsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxJQUFJLENBQUMsQ0FBRSxLQUFhO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUUzRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRTNFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsSUFBSSxDQUFDLENBQUUsS0FBYTtRQUNoQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFM0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUUzRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFFLEtBQWE7UUFDaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRTNFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEs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QVksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ25GO0lBQ0wsQ0FBQztJQUVNLGNBQWMsQ0FBQyxVQUFXO1FBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDaEMsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ25GO0lBQ0wsQ0FBQztJQUVNLGNBQWMsQ0FBQyxVQUFXO1FBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDaEMsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ25GO0lBQ0wsQ0FBQztJQUVNLGNBQWMsQ0FBQyxVQUFXO1FBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDaEMsSUFBSSxJQUFJLEVBQUU7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ25GO0lBQ0wsQ0FBQztJQUVNLFlBQVksQ0FBQyxVQUFXO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVyQyxPQUFPLENBQUMsQ0FBQyxJQUFJ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LENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmlkc3Rlckl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9ncmlkc3Rlci1pdGVtL2dyaWRzdGVyLWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3JpZHN0ZXJJdGVtUHJvdG90eXBlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3JpZHN0ZXItcHJvdG90eXBlL2dyaWRzdGVyLWl0ZW0tcHJvdG90eXBlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEdyaWRzdGVyU2VydmljZSB9IGZyb20gJy4uL2dyaWRzdGVyLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWRMaXN0SXRlbSB7XHJcbiAgICBzdGF0aWMgQlJFQUtQT0lOVFM6IEFycmF5PHN0cmluZz4gPSBbJ3NtJywgJ21kJywgJ2xnJywgJ3hsJ107XHJcbiAgICBzdGF0aWMgWF9QUk9QRVJUWV9NQVA6IGFueSA9IHtcclxuICAgICAgICBzbTogJ3hTbScsXHJcbiAgICAgICAgbWQ6ICd4TWQnLFxyXG4gICAgICAgIGxnOiAneExnJyxcclxuICAgICAgICB4bDogJ3hYbCdcclxuICAgIH07XHJcblxyXG4gICAgc3RhdGljIFlfUFJPUEVSVFlfTUFQOiBhbnkgPSB7XHJcbiAgICAgICAgc206ICd5U20nLFxyXG4gICAgICAgIG1kOiAneU1kJyxcclxuICAgICAgICBsZzogJ3lMZycsXHJcbiAgICAgICAgeGw6ICd5WGwnXHJcbiAgICB9O1xyXG5cclxuICAgIHN0YXRpYyBXX1BST1BFUlRZX01BUDogYW55ID0ge1xyXG4gICAgICAgIHNtOiAnd1NtJyxcclxuICAgICAgICBtZDogJ3dNZCcsXHJcbiAgICAgICAgbGc6ICd3TGcnLFxyXG4gICAgICAgIHhsOiAnd1hsJ1xyXG4gICAgfTtcclxuXHJcbiAgICBzdGF0aWMgSF9QUk9QRVJUWV9NQVA6IGFueSA9IHtcclxuICAgICAgICBzbTogJ2hTbScsXHJcbiAgICAgICAgbWQ6ICdoTWQnLFxyXG4gICAgICAgIGxnOiAnaExnJyxcclxuICAgICAgICB4bDogJ2hYbCdcclxuICAgIH07XHJcblxyXG4gICAgaXRlbUNvbXBvbmVudDogR3JpZHN0ZXJJdGVtQ29tcG9uZW50O1xyXG4gICAgaXRlbVByb3RvdHlwZTogR3JpZHN0ZXJJdGVtUHJvdG90eXBlRGlyZWN0aXZlO1xyXG4gICAgaXRlbU9iamVjdDogYW55O1xyXG5cclxuICAgIGdldCAkZWxlbWVudCAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbSgpLiRlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB4ICgpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XHJcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludCA9IGl0ZW0uZ3JpZHN0ZXIgPyBpdGVtLmdyaWRzdGVyLm9wdGlvbnMuYnJlYWtwb2ludCA6IG51bGw7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlWChicmVha3BvaW50KTtcclxuICAgIH1cclxuICAgIHNldCB4ICh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xyXG4gICAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSBpdGVtLmdyaWRzdGVyID8gaXRlbS5ncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQgOiBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnNldFZhbHVlWCh2YWx1ZSwgYnJlYWtwb2ludCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHkgKCkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcclxuICAgICAgICBjb25zdCBicmVha3BvaW50ID0gaXRlbS5ncmlkc3RlciA/IGl0ZW0uZ3JpZHN0ZXIub3B0aW9ucy5icmVha3BvaW50IDogbnVsbDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVZKGJyZWFrcG9pbnQpO1xyXG4gICAgfVxyXG4gICAgc2V0IHkgKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XHJcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludCA9IGl0ZW0uZ3JpZHN0ZXIgPyBpdGVtLmdyaWRzdGVyLm9wdGlvbnMuYnJlYWtwb2ludCA6IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWVZKHZhbHVlLCBicmVha3BvaW50KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdyAoKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xyXG4gICAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSBpdGVtLmdyaWRzdGVyID8gaXRlbS5ncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQgOiBudWxsO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZVcoYnJlYWtwb2ludCk7XHJcbiAgICB9XHJcbiAgICBzZXQgdyAodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcclxuICAgICAgICBjb25zdCBicmVha3BvaW50ID0gaXRlbS5ncmlkc3RlciA/IGl0ZW0uZ3JpZHN0ZXIub3B0aW9ucy5icmVha3BvaW50IDogbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZVcodmFsdWUsIGJyZWFrcG9pbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBoICgpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XHJcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludCA9IGl0ZW0uZ3JpZHN0ZXIgPyBpdGVtLmdyaWRzdGVyLm9wdGlvbnMuYnJlYWtwb2ludCA6IG51bGw7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlSChicmVha3BvaW50KTtcclxuICAgIH1cclxuICAgIHNldCBoICh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xyXG4gICAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSBpdGVtLmdyaWRzdGVyID8gaXRlbS5ncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQgOiBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnNldFZhbHVlSCh2YWx1ZSwgYnJlYWtwb2ludCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGF1dG9TaXplICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRJdGVtKCkuYXV0b1NpemU7XHJcbiAgICB9XHJcbiAgICBzZXQgYXV0b1NpemUgKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5nZXRJdGVtKCkuYXV0b1NpemUgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZHJhZ0FuZERyb3AoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRJdGVtKCkuZHJhZ0FuZERyb3A7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlc2l6YWJsZSgpIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLmdldEl0ZW0oKS5yZXNpemFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHBvc2l0aW9uWCgpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtQ29tcG9uZW50IHx8IHRoaXMuaXRlbVByb3RvdHlwZTtcclxuXHJcbiAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGl0ZW0ucG9zaXRpb25YO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwb3NpdGlvblkoKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbUNvbXBvbmVudCB8fCB0aGlzLml0ZW1Qcm90b3R5cGU7XHJcblxyXG4gICAgICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtLnBvc2l0aW9uWTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0RnJvbUdyaWRzdGVySXRlbSAoaXRlbTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50KTogR3JpZExpc3RJdGVtIHtcclxuICAgICAgICBpZiAodGhpcy5pc0l0ZW1TZXQoKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyaWRMaXN0SXRlbSBpcyBhbHJlYWR5IHNldC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pdGVtQ29tcG9uZW50ID0gaXRlbTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0RnJvbUdyaWRzdGVySXRlbVByb3RvdHlwZSAoaXRlbTogR3JpZHN0ZXJJdGVtUHJvdG90eXBlRGlyZWN0aXZlKTogR3JpZExpc3RJdGVtIHtcclxuICAgICAgICBpZiAodGhpcy5pc0l0ZW1TZXQoKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyaWRMaXN0SXRlbSBpcyBhbHJlYWR5IHNldC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pdGVtUHJvdG90eXBlID0gaXRlbTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0RnJvbU9iamVjdExpdGVyYWwgKGl0ZW06IE9iamVjdCk6IEdyaWRMaXN0SXRlbSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJdGVtU2V0KCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHcmlkTGlzdEl0ZW0gaXMgYWxyZWFkeSBzZXQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXRlbU9iamVjdCA9IGl0ZW07XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvcHkoKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbUNvcHkgPSBuZXcgR3JpZExpc3RJdGVtKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtQ29weS5zZXRGcm9tT2JqZWN0TGl0ZXJhbCh7XHJcbiAgICAgICAgICAgICRlbGVtZW50OiB0aGlzLiRlbGVtZW50LFxyXG4gICAgICAgICAgICB4OiB0aGlzLngsXHJcbiAgICAgICAgICAgIHk6IHRoaXMueSxcclxuICAgICAgICAgICAgdzogdGhpcy53LFxyXG4gICAgICAgICAgICBoOiB0aGlzLmgsXHJcbiAgICAgICAgICAgIGF1dG9TaXplOiB0aGlzLmF1dG9TaXplLFxyXG4gICAgICAgICAgICBkcmFnQW5kRHJvcDogdGhpcy5kcmFnQW5kRHJvcCxcclxuICAgICAgICAgICAgcmVzaXphYmxlOiB0aGlzLnJlc2l6YWJsZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb3B5Rm9yQnJlYWtwb2ludChicmVha3BvaW50Pykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1Db3B5ID0gbmV3IEdyaWRMaXN0SXRlbSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gaXRlbUNvcHkuc2V0RnJvbU9iamVjdExpdGVyYWwoe1xyXG4gICAgICAgICAgICAkZWxlbWVudDogdGhpcy4kZWxlbWVudCxcclxuICAgICAgICAgICAgeDogdGhpcy5nZXRWYWx1ZVgoYnJlYWtwb2ludCksXHJcbiAgICAgICAgICAgIHk6IHRoaXMuZ2V0VmFsdWVZKGJyZWFrcG9pbnQpLFxyXG4gICAgICAgICAgICB3OiB0aGlzLmdldFZhbHVlVyhicmVha3BvaW50KSxcclxuICAgICAgICAgICAgaDogdGhpcy5nZXRWYWx1ZUgoYnJlYWtwb2ludCksXHJcbiAgICAgICAgICAgIGF1dG9TaXplOiB0aGlzLmF1dG9TaXplLFxyXG4gICAgICAgICAgICBkcmFnQW5kRHJvcDogdGhpcy5kcmFnQW5kRHJvcCxcclxuICAgICAgICAgICAgcmVzaXphYmxlOiB0aGlzLnJlc2l6YWJsZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRWYWx1ZVgoYnJlYWtwb2ludD8pIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtW3RoaXMuZ2V0WFByb3BlcnR5KGJyZWFrcG9pbnQpXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VmFsdWVZKGJyZWFrcG9pbnQ/KSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gaXRlbVt0aGlzLmdldFlQcm9wZXJ0eShicmVha3BvaW50KV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFZhbHVlVyhicmVha3BvaW50Pykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy5nZXRXUHJvcGVydHkoYnJlYWtwb2ludCldIHx8IDE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFZhbHVlSChicmVha3BvaW50Pykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy5nZXRIUHJvcGVydHkoYnJlYWtwb2ludCldIHx8IDE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFZhbHVlWCh2YWx1ZTogbnVtYmVyLCBicmVha3BvaW50Pykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgaXRlbVt0aGlzLmdldFhQcm9wZXJ0eShicmVha3BvaW50KV0gPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0VmFsdWVZKHZhbHVlOiBudW1iZXIsIGJyZWFrcG9pbnQ/KSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xyXG5cclxuICAgICAgICBpdGVtW3RoaXMuZ2V0WVByb3BlcnR5KGJyZWFrcG9pbnQpXSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWYWx1ZVcodmFsdWU6IG51bWJlciwgYnJlYWtwb2ludD8pIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XHJcblxyXG4gICAgICAgIGl0ZW1bdGhpcy5nZXRXUHJvcGVydHkoYnJlYWtwb2ludCldID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFZhbHVlSCh2YWx1ZTogbnVtYmVyLCBicmVha3BvaW50Pykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0oKTtcclxuXHJcbiAgICAgICAgaXRlbVt0aGlzLmdldEhQcm9wZXJ0eShicmVha3BvaW50KV0gPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdHJpZ2dlckNoYW5nZVgoYnJlYWtwb2ludD8pIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtQ29tcG9uZW50O1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGl0ZW1bdGhpcy5nZXRYUHJvcGVydHkoYnJlYWtwb2ludCkgKyAnQ2hhbmdlJ10uZW1pdCh0aGlzLmdldFZhbHVlWChicmVha3BvaW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0cmlnZ2VyQ2hhbmdlWShicmVha3BvaW50Pykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1Db21wb25lbnQ7XHJcbiAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgaXRlbVt0aGlzLmdldFlQcm9wZXJ0eShicmVha3BvaW50KSArICdDaGFuZ2UnXS5lbWl0KHRoaXMuZ2V0VmFsdWVZKGJyZWFrcG9pbnQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRyaWdnZXJDaGFuZ2VXKGJyZWFrcG9pbnQ/KSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbUNvbXBvbmVudDtcclxuICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICBpdGVtW3RoaXMuZ2V0V1Byb3BlcnR5KGJyZWFrcG9pbnQpICsgJ0NoYW5nZSddLmVtaXQodGhpcy5nZXRWYWx1ZVcoYnJlYWtwb2ludCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdHJpZ2dlckNoYW5nZUgoYnJlYWtwb2ludD8pIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtQ29tcG9uZW50O1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGl0ZW1bdGhpcy5nZXRIUHJvcGVydHkoYnJlYWtwb2ludCkgKyAnQ2hhbmdlJ10uZW1pdCh0aGlzLmdldFZhbHVlSChicmVha3BvaW50KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYXNQb3NpdGlvbnMoYnJlYWtwb2ludD8pIHtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy5nZXRWYWx1ZVgoYnJlYWtwb2ludCk7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMuZ2V0VmFsdWVZKGJyZWFrcG9pbnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gKHggfHwgeCA9PT0gMCkgJiYgKHkgfHwgeSA9PT0gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcGx5UG9zaXRpb24oZ3JpZHN0ZXI/OiBHcmlkc3RlclNlcnZpY2UpIHtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuY2FsY3VsYXRlUG9zaXRpb24oZ3JpZHN0ZXIpO1xyXG5cclxuICAgICAgICB0aGlzLml0ZW1Db21wb25lbnQucG9zaXRpb25YID0gcG9zaXRpb24ubGVmdDtcclxuICAgICAgICB0aGlzLml0ZW1Db21wb25lbnQucG9zaXRpb25ZID0gcG9zaXRpb24udG9wO1xyXG4gICAgICAgIHRoaXMuaXRlbUNvbXBvbmVudC51cGRhdGVFbGVtZW5ldFBvc2l0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbGN1bGF0ZVBvc2l0aW9uKGdyaWRzdGVyPzogR3JpZHN0ZXJTZXJ2aWNlKToge2xlZnQ6IG51bWJlciwgdG9wOiBudW1iZXJ9IHtcclxuICAgICAgICBpZiAoIWdyaWRzdGVyICYmICF0aGlzLml0ZW1Db21wb25lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtsZWZ0OiAwLCB0b3A6IDB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBncmlkc3RlciA9IGdyaWRzdGVyIHx8IHRoaXMuaXRlbUNvbXBvbmVudC5ncmlkc3RlcjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbGVmdDogdGhpcy54ICogZ3JpZHN0ZXIuY2VsbFdpZHRoLFxyXG4gICAgICAgICAgICB0b3A6IHRoaXMueSAqIGdyaWRzdGVyLmNlbGxIZWlnaHRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhcHBseVNpemUoZ3JpZHN0ZXI/OiBHcmlkc3RlclNlcnZpY2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5jYWxjdWxhdGVTaXplKGdyaWRzdGVyKTtcclxuXHJcbiAgICAgICAgdGhpcy4kZWxlbWVudC5zdHlsZS53aWR0aCA9IHNpemUud2lkdGggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuJGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gc2l6ZS5oZWlnaHQgKyAncHgnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYWxjdWxhdGVTaXplKGdyaWRzdGVyPzogR3JpZHN0ZXJTZXJ2aWNlKToge3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyfSB7XHJcbiAgICAgICAgaWYgKCFncmlkc3RlciAmJiAhdGhpcy5pdGVtQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7d2lkdGg6IDAsIGhlaWdodDogMH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdyaWRzdGVyID0gZ3JpZHN0ZXIgfHwgdGhpcy5pdGVtQ29tcG9uZW50LmdyaWRzdGVyO1xyXG5cclxuICAgICAgICBsZXQgd2lkdGggPSB0aGlzLmdldFZhbHVlVyhncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQpO1xyXG4gICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLmdldFZhbHVlSChncmlkc3Rlci5vcHRpb25zLmJyZWFrcG9pbnQpO1xyXG5cclxuICAgICAgICBpZiAoZ3JpZHN0ZXIub3B0aW9ucy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcclxuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1pbih3aWR0aCwgZ3JpZHN0ZXIub3B0aW9ucy5sYW5lcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChncmlkc3Rlci5vcHRpb25zLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGgubWluKGhlaWdodCwgZ3JpZHN0ZXIub3B0aW9ucy5sYW5lcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB3aWR0aDogd2lkdGggKiBncmlkc3Rlci5jZWxsV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICogZ3JpZHN0ZXIuY2VsbEhlaWdodFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRYUHJvcGVydHkoYnJlYWtwb2ludD86IHN0cmluZykge1xyXG5cclxuICAgICAgICBpZiAoYnJlYWtwb2ludCAmJiB0aGlzLml0ZW1Db21wb25lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEdyaWRMaXN0SXRlbS5YX1BST1BFUlRZX01BUFticmVha3BvaW50XTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3gnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFlQcm9wZXJ0eShicmVha3BvaW50Pzogc3RyaW5nKSB7XHJcblxyXG4gICAgICAgIGlmIChicmVha3BvaW50ICYmIHRoaXMuaXRlbUNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gR3JpZExpc3RJdGVtLllfUFJPUEVSVFlfTUFQW2JyZWFrcG9pbnRdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAneSc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0V1Byb3BlcnR5KGJyZWFrcG9pbnQ/OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5pdGVtUHJvdG90eXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1Qcm90b3R5cGVbR3JpZExpc3RJdGVtLldfUFJPUEVSVFlfTUFQW2JyZWFrcG9pbnRdXSA/XHJcbiAgICAgICAgICAgICAgICBHcmlkTGlzdEl0ZW0uV19QUk9QRVJUWV9NQVBbYnJlYWtwb2ludF0gOiAndyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKCk7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2l2ZVNpemVzID0gaXRlbS5ncmlkc3RlciAmJiBpdGVtLmdyaWRzdGVyLm9wdGlvbnMucmVzcG9uc2l2ZVNpemVzO1xyXG5cclxuICAgICAgICBpZiAoYnJlYWtwb2ludCAmJiByZXNwb25zaXZlU2l6ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEdyaWRMaXN0SXRlbS5XX1BST1BFUlRZX01BUFticmVha3BvaW50XTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3cnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEhQcm9wZXJ0eShicmVha3BvaW50Pzogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbVByb3RvdHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtUHJvdG90eXBlW0dyaWRMaXN0SXRlbS5IX1BST1BFUlRZX01BUFticmVha3BvaW50XV0gP1xyXG4gICAgICAgICAgICAgICAgR3JpZExpc3RJdGVtLkhfUFJPUEVSVFlfTUFQW2JyZWFrcG9pbnRdIDogJ2gnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbSgpO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNpdmVTaXplcyA9IGl0ZW0uZ3JpZHN0ZXIgJiYgaXRlbS5ncmlkc3Rlci5vcHRpb25zLnJlc3BvbnNpdmVTaXplcztcclxuXHJcbiAgICAgICAgaWYgKGJyZWFrcG9pbnQgJiYgcmVzcG9uc2l2ZVNpemVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBHcmlkTGlzdEl0ZW0uSF9QUk9QRVJUWV9NQVBbYnJlYWtwb2ludF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICdoJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRJdGVtKCk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbUNvbXBvbmVudCB8fCB0aGlzLml0ZW1Qcm90b3R5cGUgfHwgdGhpcy5pdGVtT2JqZWN0O1xyXG5cclxuICAgICAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHcmlkTGlzdEl0ZW0gaXMgbm90IHNldC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0l0ZW1TZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbUNvbXBvbmVudCB8fCB0aGlzLml0ZW1Qcm90b3R5cGUgfHwgdGhpcy5pdGVtT2JqZWN0O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==