react-image-markup
Version:
Markup Image with ReactJS (customizable)
239 lines (197 loc) • 27.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _fabric = require("fabric");
var _canvasHistory = _interopRequireDefault(require("./canvasHistory"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
_fabric.fabric.LineArrow = _fabric.fabric.util.createClass(_fabric.fabric.Line, {
type: 'lineArrow',
initialize: function initialize(element, options) {
options || (options = {});
this.callSuper('initialize', element, options);
},
toObject: function toObject() {
return _fabric.fabric.util.object.extend(this.callSuper('toObject'));
},
_render: function _render(ctx) {
this.ctx = ctx;
this.callSuper('_render', ctx);
var p = this.calcLinePoints();
var xDiff = this.x2 - this.x1;
var yDiff = this.y2 - this.y1;
var angle = Math.atan2(yDiff, xDiff);
this.drawArrow(angle, p.x2, p.y2, this.heads[0]);
ctx.save();
xDiff = -this.x2 + this.x1;
yDiff = -this.y2 + this.y1;
angle = Math.atan2(yDiff, xDiff);
this.drawArrow(angle, p.x1, p.y1, this.heads[1]);
},
drawArrow: function drawArrow(angle, xPos, yPos, head) {
this.ctx.save();
if (head) {
this.ctx.translate(xPos, yPos);
this.ctx.rotate(angle);
this.ctx.beginPath();
this.ctx.moveTo(10, 0);
this.ctx.lineTo(-15, 15);
this.ctx.lineTo(-15, -15);
this.ctx.closePath();
}
this.ctx.fillStyle = this.stroke;
this.ctx.fill();
this.ctx.restore();
}
});
_fabric.fabric.LineArrow.fromObject = function (object, callback) {
callback && callback(new _fabric.fabric.LineArrow([object.x1, object.y1, object.x2, object.y2], object));
};
_fabric.fabric.LineArrow.async = true;
_fabric.fabric.LineArrow.fromObject = function (object, callback) {
callback && callback(new _fabric.fabric.LineArrow([object.x1, object.y1, object.x2, object.y2], object));
};
_fabric.fabric.LineArrow.async = true;
var _default = function () {
var drag;
var color;
var lineWidth;
var properties;
function Arrow(canvas) {
var draggable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var params = arguments.length > 2 ? arguments[2] : undefined;
if (!draggable) {
drag = false;
return Arrow;
}
if (color && color !== params.stroke) {
color = params.stroke;
new Arrow(canvas, draggable, params);
return Arrow;
}
properties = params;
if (properties) {
color = params.stroke;
lineWidth = params.strokeWidth;
}
this.canvas = canvas;
this.className = 'Arrow';
this.isDrawing = false;
this.bindEvents();
drag = draggable;
}
Arrow.prototype.bindEvents = function () {
var inst = this;
document.onkeydown = function (e) {
if (e.which === 46 || e.keycode === 46) {
inst.canvas.getActiveObjects().forEach(function (obj) {
inst.canvas.remove(obj);
});
}
inst.canvas.renderAll();
};
inst.selectable = true;
inst.canvas.off('mouse:down');
inst.canvas.on('mouse:down', function (o) {
inst.onMouseDown(o);
});
inst.canvas.on('mouse:move', function (o) {
inst.onMouseMove(o);
});
inst.canvas.on('mouse:up', function (o) {
inst.onMouseUp(o);
});
inst.canvas.on('object:moving', function () {
inst.disable();
});
};
Arrow.prototype.onMouseUp = function () {
var inst = this;
if (!inst.isEnable()) {
return;
}
if (drag) {
this.line.set({
dirty: true,
objectCaching: true
});
if (inst.canvas.getActiveObject()) {
inst.canvas.getActiveObject().hasControls = false;
inst.canvas.getActiveObject().hasBorders = false;
inst.canvas.getActiveObject().lockMovementX = true;
inst.canvas.getActiveObject().lockMovementY = true;
inst.canvas.getActiveObject().lockUniScaling = true;
}
inst.canvas.renderAll();
new _canvasHistory["default"](inst.canvas);
}
inst.disable();
};
Arrow.prototype.onMouseMove = function (o) {
var inst = this;
inst.canvas.selection = false;
if (!inst.isEnable()) {
return;
}
var pointer = inst.canvas.getPointer(o.e);
var activeObj = inst.canvas.getActiveObject();
activeObj.set({
x2: pointer.x,
y2: pointer.y
});
activeObj.setCoords();
inst.canvas.renderAll();
};
Arrow.prototype.onMouseDown = function (o) {
var inst = this;
if (!drag) {
if (inst.canvas.getActiveObject()) {
inst.canvas.getActiveObject().hasControls = true;
inst.canvas.getActiveObject().hasBorders = true;
inst.canvas.getActiveObject().lockMovementX = false;
inst.canvas.getActiveObject().lockMovementY = false;
inst.canvas.getActiveObject().lockUniScaling = false;
inst.canvas.renderAll();
}
inst.disable();
return;
}
inst.enable();
if (inst.canvas.getActiveObject()) {
inst.canvas.getActiveObject().hasControls = false;
inst.canvas.getActiveObject().hasBorders = false;
inst.canvas.getActiveObject().lockMovementX = true;
inst.canvas.getActiveObject().lockMovementY = true;
inst.canvas.getActiveObject().lockUniScaling = true;
inst.canvas.renderAll();
}
var pointer = inst.canvas.getPointer(o.e);
var points = [pointer.x, pointer.y, pointer.x, pointer.y];
this.line = new _fabric.fabric.LineArrow(points, {
strokeWidth: lineWidth,
fill: color,
stroke: color,
originX: 'center',
originY: 'center',
hasBorders: false,
hasControls: false,
objectCaching: false,
perPixelTargetFind: true,
heads: [1, 0]
});
inst.canvas.add(this.line).setActiveObject(this.line);
};
Arrow.prototype.isEnable = function () {
return this.isDrawing;
};
Arrow.prototype.enable = function () {
this.isDrawing = true;
};
Arrow.prototype.disable = function () {
this.isDrawing = false;
};
return Arrow;
}();
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hc3NldHMvanMvYXJyb3cuanMiXSwibmFtZXMiOlsiZmFicmljIiwiTGluZUFycm93IiwidXRpbCIsImNyZWF0ZUNsYXNzIiwiTGluZSIsInR5cGUiLCJpbml0aWFsaXplIiwiZWxlbWVudCIsIm9wdGlvbnMiLCJjYWxsU3VwZXIiLCJ0b09iamVjdCIsIm9iamVjdCIsImV4dGVuZCIsIl9yZW5kZXIiLCJjdHgiLCJwIiwiY2FsY0xpbmVQb2ludHMiLCJ4RGlmZiIsIngyIiwieDEiLCJ5RGlmZiIsInkyIiwieTEiLCJhbmdsZSIsIk1hdGgiLCJhdGFuMiIsImRyYXdBcnJvdyIsImhlYWRzIiwic2F2ZSIsInhQb3MiLCJ5UG9zIiwiaGVhZCIsInRyYW5zbGF0ZSIsInJvdGF0ZSIsImJlZ2luUGF0aCIsIm1vdmVUbyIsImxpbmVUbyIsImNsb3NlUGF0aCIsImZpbGxTdHlsZSIsInN0cm9rZSIsImZpbGwiLCJyZXN0b3JlIiwiZnJvbU9iamVjdCIsImNhbGxiYWNrIiwiYXN5bmMiLCJkcmFnIiwiY29sb3IiLCJsaW5lV2lkdGgiLCJwcm9wZXJ0aWVzIiwiQXJyb3ciLCJjYW52YXMiLCJkcmFnZ2FibGUiLCJwYXJhbXMiLCJzdHJva2VXaWR0aCIsImNsYXNzTmFtZSIsImlzRHJhd2luZyIsImJpbmRFdmVudHMiLCJwcm90b3R5cGUiLCJpbnN0IiwiZG9jdW1lbnQiLCJvbmtleWRvd24iLCJlIiwid2hpY2giLCJrZXljb2RlIiwiZ2V0QWN0aXZlT2JqZWN0cyIsImZvckVhY2giLCJvYmoiLCJyZW1vdmUiLCJyZW5kZXJBbGwiLCJzZWxlY3RhYmxlIiwib2ZmIiwib24iLCJvIiwib25Nb3VzZURvd24iLCJvbk1vdXNlTW92ZSIsIm9uTW91c2VVcCIsImRpc2FibGUiLCJpc0VuYWJsZSIsImxpbmUiLCJzZXQiLCJkaXJ0eSIsIm9iamVjdENhY2hpbmciLCJnZXRBY3RpdmVPYmplY3QiLCJoYXNDb250cm9scyIsImhhc0JvcmRlcnMiLCJsb2NrTW92ZW1lbnRYIiwibG9ja01vdmVtZW50WSIsImxvY2tVbmlTY2FsaW5nIiwiQ2FudmFzSGlzdG9yeSIsInNlbGVjdGlvbiIsInBvaW50ZXIiLCJnZXRQb2ludGVyIiwiYWN0aXZlT2JqIiwieCIsInkiLCJzZXRDb29yZHMiLCJlbmFibGUiLCJwb2ludHMiLCJvcmlnaW5YIiwib3JpZ2luWSIsInBlclBpeGVsVGFyZ2V0RmluZCIsImFkZCIsInNldEFjdGl2ZU9iamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOzs7O0FBQ0FBLGVBQU9DLFNBQVAsR0FBbUJELGVBQU9FLElBQVAsQ0FBWUMsV0FBWixDQUF3QkgsZUFBT0ksSUFBL0IsRUFBcUM7QUFFcERDLEVBQUFBLElBQUksRUFBRSxXQUY4QztBQUlwREMsRUFBQUEsVUFBVSxFQUFFLG9CQUFTQyxPQUFULEVBQWtCQyxPQUFsQixFQUEyQjtBQUNuQ0EsSUFBQUEsT0FBTyxLQUFLQSxPQUFPLEdBQUcsRUFBZixDQUFQO0FBQ0EsU0FBS0MsU0FBTCxDQUFlLFlBQWYsRUFBNkJGLE9BQTdCLEVBQXNDQyxPQUF0QztBQUNILEdBUG1EO0FBU3BERSxFQUFBQSxRQUFRLEVBQUUsb0JBQVc7QUFDakIsV0FBT1YsZUFBT0UsSUFBUCxDQUFZUyxNQUFaLENBQW1CQyxNQUFuQixDQUEwQixLQUFLSCxTQUFMLENBQWUsVUFBZixDQUExQixDQUFQO0FBQ0gsR0FYbUQ7QUFhcERJLEVBQUFBLE9BQU8sRUFBRSxpQkFBU0MsR0FBVCxFQUFjO0FBQ25CLFNBQUtBLEdBQUwsR0FBV0EsR0FBWDtBQUNBLFNBQUtMLFNBQUwsQ0FBZSxTQUFmLEVBQTBCSyxHQUExQjtBQUNBLFFBQUlDLENBQUMsR0FBRyxLQUFLQyxjQUFMLEVBQVI7QUFDQSxRQUFJQyxLQUFLLEdBQUcsS0FBS0MsRUFBTCxHQUFVLEtBQUtDLEVBQTNCO0FBQ0EsUUFBSUMsS0FBSyxHQUFHLEtBQUtDLEVBQUwsR0FBVSxLQUFLQyxFQUEzQjtBQUNBLFFBQUlDLEtBQUssR0FBR0MsSUFBSSxD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QUFBLElBQUksQ0FBQ1IsTUFBTCxDQUFZbUQsR0FBWixDQUFnQixLQUFLdkIsSUFBckIsRUFBMkJ3QixlQUEzQixDQUEyQyxLQUFLeEIsSUFBaEQ7QUFFSCxHQXpDRDs7QUEyQ0E3QixFQUFBQSxLQUFLLENBQUNRLFNBQU4sQ0FBZ0JvQixRQUFoQixHQUEyQixZQUFZO0FBQ25DLFdBQU8sS0FBS3RCLFNBQVo7QUFDSCxHQUZEOztBQUlBTixFQUFBQSxLQUFLLENBQUNRLFNBQU4sQ0FBZ0J1QyxNQUFoQixHQUF5QixZQUFZO0FBQ2pDLFNBQUt6QyxTQUFMLEdBQWlCLElBQWpCO0FBQ0gsR0FGRDs7QUFJQU4sRUFBQUEsS0FBSyxDQUFDUSxTQUFOLENBQWdCbUIsT0FBaEIsR0FBMEIsWUFBWTtBQUNsQyxTQUFLckIsU0FBTCxHQUFpQixLQUFqQjtBQUNILEdBRkQ7O0FBSUEsU0FBT04sS0FBUDtBQUNILENBeEplLEUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2ZhYnJpY30gZnJvbSAnZmFicmljJztcclxuaW1wb3J0IENhbnZhc0hpc3RvcnkgZnJvbSBcIi4vY2FudmFzSGlzdG9yeVwiO1xyXG5mYWJyaWMuTGluZUFycm93ID0gZmFicmljLnV0aWwuY3JlYXRlQ2xhc3MoZmFicmljLkxpbmUsIHtcclxuXHJcbiAgICB0eXBlOiAnbGluZUFycm93JyxcclxuXHJcbiAgICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKSB7XHJcbiAgICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcclxuICAgICAgICB0aGlzLmNhbGxTdXBlcignaW5pdGlhbGl6ZScsIGVsZW1lbnQsIG9wdGlvbnMpO1xyXG4gICAgfSxcclxuXHJcbiAgICB0b09iamVjdDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhYnJpYy51dGlsLm9iamVjdC5leHRlbmQodGhpcy5jYWxsU3VwZXIoJ3RvT2JqZWN0JykpO1xyXG4gICAgfSxcclxuXHJcbiAgICBfcmVuZGVyOiBmdW5jdGlvbihjdHgpIHtcclxuICAgICAgICB0aGlzLmN0eCA9IGN0eDtcclxuICAgICAgICB0aGlzLmNhbGxTdXBlcignX3JlbmRlcicsIGN0eCk7XHJcbiAgICAgICAgbGV0IHAgPSB0aGlzLmNhbGNMaW5lUG9pbnRzKCk7XHJcbiAgICAgICAgbGV0IHhEaWZmID0gdGhpcy54MiAtIHRoaXMueDE7XHJcbiAgICAgICAgbGV0IHlEaWZmID0gdGhpcy55MiAtIHRoaXMueTE7XHJcbiAgICAgICAgbGV0IGFuZ2xlID0gTWF0aC5hdGFuMih5RGlmZiwgeERpZmYpO1xyXG4gICAgICAgIHRoaXMuZHJhd0Fycm93KGFuZ2xlLCBwLngyLCBwLnkyLCB0aGlzLmhlYWRzWzBdKTtcclxuICAgICAgICBjdHguc2F2ZSgpO1xyXG4gICAgICAgIHhEaWZmID0gLXRoaXMueDIgKyB0aGlzLngxO1xyXG4gICAgICAgIHlEaWZmID0gLXRoaXMueTIgKyB0aGlzLnkxO1xyXG4gICAgICAgIGFuZ2xlID0gTWF0aC5hdGFuMih5RGlmZiwgeERpZmYpO1xyXG4gICAgICAgIHRoaXMuZHJhd0Fycm93KGFuZ2xlLCBwLngxLCBwLnkxLHRoaXMuaGVhZHNbMV0pO1xyXG4gICAgfSxcclxuXHJcbiAgICBkcmF3QXJyb3c6IGZ1bmN0aW9uKGFuZ2xlLCB4UG9zLCB5UG9zLCBoZWFkKSB7XHJcbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xyXG5cclxuICAgICAgICBpZiAoaGVhZCkge1xyXG4gICAgICAgICAgICB0aGlzLmN0eC50cmFuc2xhdGUoeFBvcywgeVBvcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LnJvdGF0ZShhbmdsZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgICAgICB0aGlzLmN0eC5tb3ZlVG8oMTAsIDApO1xyXG4gICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oLTE1LCAxNSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbygtMTUsIC0xNSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gdGhpcy5zdHJva2U7XHJcbiAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xyXG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5cclxuXHJcbmZhYnJpYy5MaW5lQXJyb3cuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdCwgY2FsbGJhY2spIHtcclxuICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKG5ldyBmYWJyaWMuTGluZUFycm93KFtvYmplY3QueDEsIG9iamVjdC55MSwgb2JqZWN0LngyLCBvYmplY3QueTJdLCBvYmplY3QpKTtcclxufTtcclxuZmFicmljLkxpbmVBcnJvdy5hc3luYyA9IHRydWU7XHJcbmZhYnJpYy5MaW5lQXJyb3cuZnJvbU9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdCwgY2FsbGJhY2spIHtcclxuICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKG5ldyBmYWJyaWMuTGluZUFycm93KFtvYmplY3QueDEsIG9iamVjdC55MSwgb2JqZWN0LngyLCBvYmplY3QueTJdLCBvYmplY3QpKTtcclxufTtcclxuZmFicmljLkxpbmVBcnJvdy5hc3luYyA9IHRydWU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IGRyYWc7XHJcbiAgICBsZXQgY29sb3I7XHJcbiAgICBsZXQgbGluZVdpZHRoO1xyXG4gICAgbGV0IHByb3BlcnRpZXM7XHJcbiAgICBmdW5jdGlvbiBBcnJvdyhjYW52YXMsZHJhZ2dhYmxlID0gZmFsc2UscGFyYW1zKSB7XHJcblxyXG4gICAgICAgIGlmKCFkcmFnZ2FibGUpe1xyXG4gICAgICAgICAgICBkcmFnID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBBcnJvdztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGNvbG9yICYmIGNvbG9yICE9PSBwYXJhbXMuc3Ryb2tlKXtcclxuICAgICAgICAgICAgY29sb3IgPSBwYXJhbXMuc3Ryb2tlO1xyXG4gICAgICAgICAgICBuZXcgQXJyb3coY2FudmFzLGRyYWdnYWJsZSxwYXJhbXMpXHJcbiAgICAgICAgICAgIHJldHVybiBBcnJvdztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHByb3BlcnRpZXMgPSBwYXJhbXM7XHJcbiAgICAgICAgaWYocHJvcGVydGllcyl7XHJcbiAgICAgICAgICAgIGNvbG9yID0gcGFyYW1zLnN0cm9rZTtcclxuICAgICAgICAgICAgbGluZVdpZHRoID0gcGFyYW1zLnN0cm9rZVdpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcclxuICAgICAgICB0aGlzLmNsYXNzTmFtZSA9ICdBcnJvdyc7XHJcbiAgICAgICAgdGhpcy5pc0RyYXdpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTtcclxuICAgICAgICBkcmFnID0gZHJhZ2dhYmxlO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIEFycm93LnByb3RvdHlwZS5iaW5kRXZlbnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBpbnN0ID0gdGhpcztcclxuICAgICAgICBkb2N1bWVudC5vbmtleWRvd249KGUpPT57XHJcbiAgICAgICAgICAgIGlmKGUud2hpY2ggPT09IDQ2IHx8IGUua2V5Y29kZSA9PT0gNDYpe1xyXG4gICAgICAgICAgICAgICAgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0cygpLmZvckVhY2goKG9iaikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLnJlbW92ZShvYmopXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbnN0LmNhbnZhcy5yZW5kZXJBbGwoKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaW5zdC5zZWxlY3RhYmxlID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgaW5zdC5jYW52YXMub2ZmKCdtb3VzZTpkb3duJyk7XHJcbiAgICAgICAgICAgIGluc3QuY2FudmFzLm9uKCdtb3VzZTpkb3duJywgZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICAgICAgICAgIGluc3Qub25Nb3VzZURvd24obyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpbnN0LmNhbnZhcy5vbignbW91c2U6bW92ZScsIGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0Lm9uTW91c2VNb3ZlKG8pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaW5zdC5jYW52YXMub24oJ21vdXNlOnVwJywgZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICAgICAgICAgIGluc3Qub25Nb3VzZVVwKG8pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpbnN0LmNhbnZhcy5vbignb2JqZWN0Om1vdmluZycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGluc3QuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBBcnJvdy5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBpbnN0ID0gdGhpcztcclxuICAgICAgICBpZiAoIWluc3QuaXNFbmFibGUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47ICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGRyYWcpe1xyXG4gICAgICAgICAgICB0aGlzLmxpbmUuc2V0KHtcclxuICAgICAgICAgICAgICAgIGRpcnR5OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgb2JqZWN0Q2FjaGluZzogdHJ1ZVxyXG4gICAgICAgICAgICB9KTsgICAgICAgICBcclxuICAgICAgICAgICAgaWYoaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkpe1xyXG4gICAgICAgICAgICAgICAgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkuaGFzQ29udHJvbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLmhhc0JvcmRlcnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLmxvY2tNb3ZlbWVudFggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkubG9ja01vdmVtZW50WSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKS5sb2NrVW5pU2NhbGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgXHJcbiAgICAgICAgICAgIGluc3QuY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gICAgICAgICAgICBuZXcgQ2FudmFzSGlzdG9yeShpbnN0LmNhbnZhcylcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5zdC5kaXNhYmxlKCk7XHJcbiAgICB9O1xyXG4gICAgQXJyb3cucHJvdG90eXBlLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICBsZXQgaW5zdCA9IHRoaXM7XHJcbiAgICAgICAgaW5zdC5jYW52YXMuc2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFpbnN0LmlzRW5hYmxlKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcG9pbnRlciA9IGluc3QuY2FudmFzLmdldFBvaW50ZXIoby5lKTtcclxuICAgICAgICBsZXQgYWN0aXZlT2JqID0gaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCk7XHJcbiAgICAgICAgYWN0aXZlT2JqLnNldCh7XHJcbiAgICAgICAgICAgIHgyOiBwb2ludGVyLngsXHJcbiAgICAgICAgICAgIHkyOiBwb2ludGVyLnlcclxuICAgICAgICB9KTtcclxuICAgICAgICBhY3RpdmVPYmouc2V0Q29vcmRzKCk7XHJcbiAgICAgICAgaW5zdC5jYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIEFycm93LnByb3RvdHlwZS5vbk1vdXNlRG93biA9IGZ1bmN0aW9uIChvKSB7XHJcblxyXG4gICAgICAgIGxldCBpbnN0ID0gdGhpcztcclxuICAgICAgICBpZighZHJhZyl7XHJcbiAgICAgICAgICAgIGlmKCBpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKSl7XHJcbiAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKS5oYXNDb250cm9scyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKS5oYXNCb3JkZXJzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLmxvY2tNb3ZlbWVudFggPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLmxvY2tNb3ZlbWVudFkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLmxvY2tVbmlTY2FsaW5nID0gZmFsc2U7ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbnN0LmRpc2FibGUoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbnN0LmVuYWJsZSgpO1xyXG4gICAgICAgIGlmKGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpKXtcclxuICAgICAgICAgICAgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkuaGFzQ29udHJvbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkuaGFzQm9yZGVycyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKS5sb2NrTW92ZW1lbnRYID0gdHJ1ZTtcclxuICAgICAgICAgICAgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkubG9ja01vdmVtZW50WSA9IHRydWU7XHJcbiAgICAgICAgICAgIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLmxvY2tVbmlTY2FsaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgaW5zdC5jYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwb2ludGVyID0gaW5zdC5jYW52YXMuZ2V0UG9pbnRlcihvLmUpO1xyXG4gICAgICAgIGxldCBwb2ludHMgPSBbcG9pbnRlci54LCBwb2ludGVyLnksIHBvaW50ZXIueCwgcG9pbnRlci55XTtcclxuICAgICAgICB0aGlzLmxpbmUgPSBuZXcgZmFicmljLkxpbmVBcnJvdyhwb2ludHMsIHtcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IGxpbmVXaWR0aCxcclxuICAgICAgICAgICAgZmlsbDogY29sb3IsXHJcbiAgICAgICAgICAgIHN0cm9rZTogY29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiAnY2VudGVyJyxcclxuICAgICAgICAgICAgaGFzQm9yZGVyczogZmFsc2UsXHJcbiAgICAgICAgICAgIGhhc0NvbnRyb2xzOiBmYWxzZSxcclxuICAgICAgICAgICAgb2JqZWN0Q2FjaGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHBlclBpeGVsVGFyZ2V0RmluZDogdHJ1ZSxcclxuICAgICAgICAgICAgaGVhZHM6IFsxLCAwXVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpbnN0LmNhbnZhcy5hZGQodGhpcy5saW5lKS5zZXRBY3RpdmVPYmplY3QodGhpcy5saW5lKTtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIEFycm93LnByb3RvdHlwZS5pc0VuYWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0RyYXdpbmc7XHJcbiAgICB9O1xyXG5cclxuICAgIEFycm93LnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5pc0RyYXdpbmcgPSB0cnVlO1xyXG4gICAgfTtcclxuXHJcbiAgICBBcnJvdy5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmlzRHJhd2luZyA9IGZhbHNlO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gQXJyb3c7XHJcbn0oKSk7XHJcblxyXG4iXX0=