UNPKG

react-image-markup

Version:
239 lines (197 loc) 27.2 kB
"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=