UNPKG

react-image-markup

Version:
200 lines (175 loc) 24.6 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 }; } var _default = function () { var disabled = false; var object; var src; var drag; var clipRect, rect, rectRed; var overlay = {}; var properties; function CropImage(canvas) { var draggable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var apply = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var cancel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var params = arguments.length > 4 ? arguments[4] : undefined; this.canvas = canvas; if (cancel) { this.canvas.remove(clipRect); this.canvas.remove(rect); this.canvas.remove(rectRed); } if (!draggable) { drag = false; return CropImage; } drag = draggable; disabled = false; properties = params; canvas.backgroundColor = "#fff"; src = canvas.toDataURL('image/jpeg'); _fabric.fabric.util.loadImage(src, function (img) { object = new _fabric.fabric.Image(img); object.selectable = false; }); if (drag && apply) { canvas.clear(); var overlayCropped = overlay.toDataURL(); _fabric.fabric.util.loadImage(overlayCropped, function (img) { var clippedImage = new _fabric.fabric.Image(img); clippedImage.selectable = false; canvas.setBackgroundImage(clippedImage, canvas.renderAll.bind(canvas), { scaleX: canvas.width / clippedImage.width, scaleY: canvas.height / clippedImage.height }); }); drag = false; apply = false; var croppedImage = { json: canvas.toJSON(), croppedImage: overlayCropped }; new _canvasHistory["default"](this.canvas, croppedImage); return CropImage; } this.bindEvents(); this.canvas.selectable = false; this.canvas.renderAll(); var inst = this; new _fabric.fabric.Image.fromURL(src, function (oImg) { rect = new _fabric.fabric.Rect({ left: 0, top: 0, width: oImg.width, height: oImg.height, fill: properties.overlayColor, selectable: false, opacity: properties.overlayOpacity }); inst.canvas.add(rect); _fabric.fabric.Image.fromURL(src, function (oImg1) { rectRed = new _fabric.fabric.Rect({ left: (oImg1.width - properties.width) / 2, top: (oImg1.height - properties.height) / 2, width: properties.width, height: properties.height, fill: '', imageWidth: oImg1.width, imageHeight: oImg1.height, cornerSize: properties.cornerSize, hasControls: properties.hasControls, borderColor: properties.borderColor, cornerColor: properties.cornerColor, cornerStyle: properties.cornerStyle, transparentCorners: properties.transparentCorners, hasRotatingPoint: properties.hasRotatingPoint, lockUniScaling: true, noScaleCache: false, strokeUniform: true, clipTo: function clipTo(context) { context.translate(-this.width / 2, -this.height / 2); for (var x = 0; x <= this.width; x += this.width / 3) { context.moveTo(x, 0); context.lineTo(x, this.height); } for (var y = 0; y <= this.height; y += this.height / 3) { context.moveTo(0, y); context.lineTo(this.width, y); } context.strokeStyle = "rgba(0,0,0,0.4)"; context.stroke(); } }); clipRect = new _fabric.fabric.Rect({ left: -(properties.width / 2), top: -(properties.height / 2), width: properties.width, height: properties.height, fill: '', selectable: false }); oImg1.set({ clipPath: clipRect, selectable: false }); inst.canvas.add(oImg1); overlay = inst.canvas._objects[inst.canvas._objects.length - 1]; inst.canvas.add(rectRed); inst.canvas.bringToFront(rectRed); inst.canvas.setActiveObject(rectRed); }); }); this.canvas.renderAll(); } ; CropImage.prototype.bindEvents = function () { var inst = this; inst.canvas.on("mouse:down", function (o) { inst.onMouseDown(o); }); inst.canvas.on("object:scaling", function (e) { var target = e.target; clipRect = new _fabric.fabric.Rect({ left: target.left - overlay.width / 2, top: target.top - overlay.height / 2, width: target.width, height: target.height, fill: '', scaleX: target.scaleX, scaleY: target.scaleY }); overlay.set("clipPath", clipRect); inst.canvas.renderAll(); }); inst.canvas.on('object:moving', function (e) { var target = e.target; clipRect = new _fabric.fabric.Rect({ left: target.left - overlay.width / 2, top: target.top - overlay.height / 2, width: target.width, height: target.height, fill: '', scaleX: target.scaleX, scaleY: target.scaleY }); overlay.set("clipPath", clipRect); inst.canvas.renderAll(); }); CropImage.prototype.onMouseDown = function (event) { var inst = this; if (disabled || !drag) { return CropImage; } inst.canvas.setActiveObject(rectRed); }; }; return CropImage; }(); exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hc3NldHMvanMvY3JvcC5qcyJdLCJuYW1lcyI6WyJkaXNhYmxlZCIsIm9iamVjdCIsInNyYyIsImRyYWciLCJjbGlwUmVjdCIsInJlY3QiLCJyZWN0UmVkIiwib3ZlcmxheSIsInByb3BlcnRpZXMiLCJDcm9wSW1hZ2UiLCJjYW52YXMiLCJkcmFnZ2FibGUiLCJhcHBseSIsImNhbmNlbCIsInBhcmFtcyIsInJlbW92ZSIsImJhY2tncm91bmRDb2xvciIsInRvRGF0YVVSTCIsImZhYnJpYyIsInV0aWwiLCJsb2FkSW1hZ2UiLCJpbWciLCJJbWFnZSIsInNlbGVjdGFibGUiLCJjbGVhciIsIm92ZXJsYXlDcm9wcGVkIiwiY2xpcHBlZEltYWdlIiwic2V0QmFja2dyb3VuZEltYWdlIiwicmVuZGVyQWxsIiwiYmluZCIsInNjYWxlWCIsIndpZHRoIiwic2NhbGVZIiwiaGVpZ2h0IiwiY3JvcHBlZEltYWdlIiwianNvbiIsInRvSlNPTiIsIkNhbnZhc0hpc3RvcnkiLCJiaW5kRXZlbnRzIiwiaW5zdCIsImZyb21VUkwiLCJvSW1nIiwiUmVjdCIsImxlZnQiLCJ0b3AiLCJmaWxsIiwib3ZlcmxheUNvbG9yIiwib3BhY2l0eSIsIm92ZXJsYXlPcGFjaXR5IiwiYWRkIiwib0ltZzEiLCJpbWFnZVdpZHRoIiwiaW1hZ2VIZWlnaHQiLCJjb3JuZXJTaXplIiwiaGFzQ29udHJvbHMiLCJib3JkZXJDb2xvciIsImNvcm5lckNvbG9yIiwiY29ybmVyU3R5bGUiLCJ0cmFuc3BhcmVudENvcm5lcnMiLCJoYXNSb3RhdGluZ1BvaW50IiwibG9ja1VuaVNjYWxpbmciLCJub1NjYWxlQ2FjaGUiLCJzdHJva2VVbmlmb3JtIiwiY2xpcFRvIiwiY29udGV4dCIsInRyYW5zbGF0ZSIsIngiLCJtb3ZlVG8iLCJsaW5lVG8iLCJ5Iiwic3Ryb2tlU3R5bGUiLCJzdHJva2UiLCJzZXQiLCJjbGlwUGF0aCIsIl9vYmplY3RzIiwibGVuZ3RoIiwiYnJpbmdUb0Zyb250Iiwic2V0QWN0aXZlT2JqZWN0IiwicHJvdG90eXBlIiwib24iLCJvIiwib25Nb3VzZURvd24iLCJlIiwidGFyZ2V0IiwiZXZlbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7OztlQUVnQixZQUFZO0FBRXhCLE1BQUlBLFFBQVEsR0FBRyxLQUFmO0FBQ0EsTUFBSUMsTUFBSjtBQUNBLE1BQUlDLEdBQUo7QUFDQSxNQUFJQyxJQUFKO0FBQ0EsTUFBSUMsUUFBSixFQUFhQyxJQUFiLEVBQWtCQyxPQUFsQjtBQUNBLE1BQUlDLE9BQU8sR0FBRyxFQUFkO0FBQ0EsTUFBSUMsVUFBSjs7QUFDQSxXQUFTQyxTQUFULENBQW1CQyxNQUFuQixFQUFpRjtBQUFBLFFBQXZEQyxTQUF1RCx1RUFBM0MsS0FBMkM7QUFBQSxRQUFyQ0MsS0FBcUMsdUVBQTdCLEtBQTZCO0FBQUEsUUFBdkJDLE1BQXVCLHVFQUFkLEtBQWM7QUFBQSxRQUFSQyxNQUFRO0FBRTdFLFNBQUtKLE1BQUwsR0FBY0EsTUFBZDs7QUFDQSxRQUFHRyxNQUFILEVBQVU7QUFDTixXQUFLSCxNQUFMLENBQVlLLE1BQVosQ0FBbUJYLFFBQW5CO0FBQ0EsV0FBS00sTUFBTCxDQUFZSyxNQUFaLENBQW1CVixJQUFuQjtBQUNBLFdBQUtLLE1BQUwsQ0FBWUssTUFBWixDQUFtQlQsT0FBbkI7QUFDSDs7QUFDRCxRQUFHLENBQUNLLFNBQUosRUFBYztBQUNWUixNQUFBQSxJQUFJLEdBQUcsS0FBUDtBQUNBLGFBQU9NLFNBQVA7QUFDSDs7QUFDRE4sSUFBQUEsSUFBSSxHQUFHUSxTQUFQO0FBQ0FYLElBQUFBLFFBQVEsR0FBRyxLQUFYO0FBQ0FRLElBQUFBLFVBQVUsR0FBR00sTUFBYjtBQUNBSixJQUFBQSxNQUFNLENBQUNNLGVBQVAsR0FBeUIsTUFBekI7QUFDQWQsSUFBQUEsR0FBRyxHQUFHUSxNQUFNLENBQUNPLFNBQVAsQ0FBaUIsWUFBakIsQ0FBTjs7QUFDQUMsbUJBQU9DLElBQVAsQ0FBWUMsU0FBWixDQUFzQmxCLEdBQXRCLEVBQTJC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QUl2QyxRQUFRLElBQUksQ0FBQ0csSUFBakIsRUFBdUI7QUFDbkIsZUFBT00sU0FBUDtBQUNIOztBQUNEOEIsTUFBQUEsSUFBSSxDQUFDN0IsTUFBTCxDQUFZbUUsZUFBWixDQUE0QnZFLE9BQTVCO0FBQ0gsS0FORDtBQU9ILEdBMUNEOztBQTRDQSxTQUFPRyxTQUFQO0FBQ0gsQ0F0S2UsRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZmFicmljfSBmcm9tIFwiZmFicmljXCI7XHJcbmltcG9ydCBDYW52YXNIaXN0b3J5IGZyb20gXCIuL2NhbnZhc0hpc3RvcnlcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiAoKSB7XHJcbiAgICBcclxuICAgIGxldCBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgbGV0IG9iamVjdDtcclxuICAgIGxldCBzcmM7XHJcbiAgICBsZXQgZHJhZztcclxuICAgIGxldCBjbGlwUmVjdCxyZWN0LHJlY3RSZWQ7XHJcbiAgICBsZXQgb3ZlcmxheSA9IHt9O1xyXG4gICAgbGV0IHByb3BlcnRpZXNcclxuICAgIGZ1bmN0aW9uIENyb3BJbWFnZShjYW52YXMsZHJhZ2dhYmxlID0gZmFsc2UsYXBwbHkgPSBmYWxzZSxjYW5jZWwgPSBmYWxzZSxwYXJhbXMpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmNhbnZhcyA9IGNhbnZhcztcclxuICAgICAgICBpZihjYW5jZWwpe1xyXG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmUoY2xpcFJlY3QpO1xyXG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmUocmVjdCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZShyZWN0UmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIWRyYWdnYWJsZSl7XHJcbiAgICAgICAgICAgIGRyYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIENyb3BJbWFnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZHJhZyA9IGRyYWdnYWJsZTtcclxuICAgICAgICBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHByb3BlcnRpZXMgPSBwYXJhbXM7XHJcbiAgICAgICAgY2FudmFzLmJhY2tncm91bmRDb2xvciA9IFwiI2ZmZlwiO1xyXG4gICAgICAgIHNyYyA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTsgIFxyXG4gICAgICAgIGZhYnJpYy51dGlsLmxvYWRJbWFnZShzcmMsIGZ1bmN0aW9uIChpbWcpIHtcclxuICAgICAgICAgICAgb2JqZWN0ID0gbmV3IGZhYnJpYy5JbWFnZShpbWcpOyAgICBcclxuICAgICAgICAgICAgb2JqZWN0LnNlbGVjdGFibGUgPSBmYWxzZTsgICBcclxuICAgICAgICB9KSBcclxuICAgICAgXHJcbiAgICAgICAgaWYoZHJhZyAmJiBhcHBseSl7ICAgXHJcbiAgICAgICAgICAgIGNhbnZhcy5jbGVhcigpO1xyXG4gICAgICAgICAgICBsZXQgb3ZlcmxheUNyb3BwZWQgPSBvdmVybGF5LnRvRGF0YVVSTCgpOyAgICAgXHJcbiAgICAgICAgICAgIGZhYnJpYy51dGlsLmxvYWRJbWFnZShvdmVybGF5Q3JvcHBlZCwgZnVuY3Rpb24gKGltZykge1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbGV0IGNsaXBwZWRJbWFnZSA9IG5ldyBmYWJyaWMuSW1hZ2UoaW1nKTsgICAgXHJcbiAgICAgICAgICAgICAgICBjbGlwcGVkSW1hZ2Uuc2VsZWN0YWJsZSA9IGZhbHNlOyAgIFxyXG4gICAgICAgICAgICAgICAgY2FudmFzLnNldEJhY2tncm91bmRJbWFnZShjbGlwcGVkSW1hZ2UsIGNhbnZhcy5yZW5kZXJBbGwuYmluZChjYW52YXMpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiBjYW52YXMud2lkdGggLyBjbGlwcGVkSW1hZ2Uud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVZOiBjYW52YXMuaGVpZ2h0IC8gY2xpcHBlZEltYWdlLmhlaWdodFxyXG4gICAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgfSkgXHJcblxyXG4gICAgICAgICAgICBkcmFnID0gZmFsc2U7IFxyXG4gICAgICAgICAgICBhcHBseT0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBjcm9wcGVkSW1hZ2UgPSB7IGpzb246IGNhbnZhcy50b0pTT04oKSwgY3JvcHBlZEltYWdlOiBvdmVybGF5Q3JvcHBlZH07XHJcbiAgICAgICAgICAgIG5ldyBDYW52YXNIaXN0b3J5KHRoaXMuY2FudmFzLGNyb3BwZWRJbWFnZSlcclxuICAgICAgICAgICAgcmV0dXJuIENyb3BJbWFnZTtcclxuICAgICAgICB9XHJcbiBcclxuICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTsgIFxyXG4gICAgICAgIHRoaXMuY2FudmFzLnNlbGVjdGFibGUgPSBmYWxzZTsgICAgXHJcbiAgICAgXHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgICAgICAgbGV0IGluc3QgPSB0aGlzO1xyXG4gICAgICAgIG5ldyBmYWJyaWMuSW1hZ2UuZnJvbVVSTChzcmMsIGZ1bmN0aW9uKG9JbWcpIHtcclxuICAgICAgICAgICAgIHJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICAgIGxlZnQ6IDAsXHJcbiAgICAgICAgICAgICAgdG9wOiAwLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBvSW1nLndpZHRoLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogb0ltZy5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgZmlsbDogcHJvcGVydGllcy5vdmVybGF5Q29sb3IsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgb3BhY2l0eTpwcm9wZXJ0aWVzLm92ZXJsYXlPcGFjaXR5XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpbnN0LmNhbnZhcy5hZGQocmVjdCk7XHJcbiAgICAgICAgICAgIGZhYnJpYy5JbWFnZS5mcm9tVVJMKHNyYywgZnVuY3Rpb24ob0ltZzEpIHtcclxuICAgICAgICAgICAgICAgcmVjdFJlZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAgKG9JbWcxLndpZHRoIC0gcHJvcGVydGllcy53aWR0aCkvIDIsXHJcbiAgICAgICAgICAgICAgICB0b3A6ICAob0ltZzEuaGVpZ2h0IC0gcHJvcGVydGllcy5oZWlnaHQpLyAyLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHByb3BlcnRpZXMud2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHByb3BlcnRpZXMuaGVpZ2h0LCAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBmaWxsOiAnJyxcclxuICAgICAgICAgICAgICAgIGltYWdlV2lkdGg6IG9JbWcxLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgaW1hZ2VIZWlnaHQ6IG9JbWcxLmhlaWdodCxcclxuICAgICAgICAgICAgICAgIGNvcm5lclNpemU6cHJvcGVydGllcy5jb3JuZXJTaXplLCBcclxuICAgICAgICAgICAgICAgIGhhc0NvbnRyb2xzOiBwcm9wZXJ0aWVzLmhhc0NvbnRyb2xzLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IHByb3BlcnRpZXMuYm9yZGVyQ29sb3IsXHJcbiAgICAgICAgICAgICAgICBjb3JuZXJDb2xvcjogcHJvcGVydGllcy5jb3JuZXJDb2xvcixcclxuICAgICAgICAgICAgICAgIGNvcm5lclN0eWxlOiBwcm9wZXJ0aWVzLmNvcm5lclN0eWxlLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNwYXJlbnRDb3JuZXJzOiBwcm9wZXJ0aWVzLnRyYW5zcGFyZW50Q29ybmVycyxcclxuICAgICAgICAgICAgICAgIGhhc1JvdGF0aW5nUG9pbnQ6IHByb3BlcnRpZXMuaGFzUm90YXRpbmdQb2ludCxcclxuICAgICAgICAgICAgICAgIGxvY2tVbmlTY2FsaW5nOnRydWUsXHJcbiAgICAgICAgICAgICAgICBub1NjYWxlQ2FjaGU6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VVbmlmb3JtOnRydWUsXHJcbiAgICAgICAgICAgICAgICBjbGlwVG86IGZ1bmN0aW9uKGNvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoLSB0aGlzLndpZHRoLzIsIC0gdGhpcy5oZWlnaHQvMik7XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8PSB0aGlzLndpZHRoOyB4ICs9IHRoaXMud2lkdGgvMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tb3ZlVG8oeCAsIDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5saW5lVG8oeCwgdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8PSB0aGlzLmhlaWdodDsgeSArPSB0aGlzLmhlaWdodC8zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1vdmVUbygwLCB5KTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGluZVRvKHRoaXMud2lkdGgsIHkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBcInJnYmEoMCwwLDAsMC40KVwiO1xyXG4gICAgICAgICAgICAgICAgICBjb250ZXh0LnN0cm9rZSgpOyAgIFxyXG4gICAgICAgICAgICAgIH0gICAgXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgY2xpcFJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICAgICAgbGVmdDogLShwcm9wZXJ0aWVzLndpZHRoIC8yKSxcclxuICAgICAgICAgICAgICAgIHRvcDogLShwcm9wZXJ0aWVzLmhlaWdodC8yKSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBwcm9wZXJ0aWVzLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBwcm9wZXJ0aWVzLmhlaWdodCxcclxuICAgICAgICAgICAgICAgIGZpbGw6ICcnLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTpmYWxzZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBvSW1nMS5zZXQoe2NsaXBQYXRoOmNsaXBSZWN0LCBzZWxlY3RhYmxlOiBmYWxzZX0pXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGluc3QuY2FudmFzLmFkZChvSW1nMSk7XHJcbiAgICAgICAgICAgICAgb3ZlcmxheSA9IGluc3QuY2FudmFzLl9vYmplY3RzW2luc3QuY2FudmFzLl9vYmplY3RzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgIGluc3QuY2FudmFzLmFkZChyZWN0UmVkKTtcclxuICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5icmluZ1RvRnJvbnQocmVjdFJlZClcclxuICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5zZXRBY3RpdmVPYmplY3QocmVjdFJlZClcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZW5kZXJBbGwoKTsgIFxyXG4gICAgfTtcclxuICAgIENyb3BJbWFnZS5wcm90b3R5cGUuYmluZEV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgaW5zdCA9IHRoaXM7XHJcbiAgICAgICAgaW5zdC5jYW52YXMub24oXCJtb3VzZTpkb3duXCIsIGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgICAgIGluc3Qub25Nb3VzZURvd24obyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaW5zdC5jYW52YXMub24oXCJvYmplY3Q6c2NhbGluZ1wiLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICBsZXQgdGFyZ2V0ID0gZS50YXJnZXQ7XHJcbiAgICAgICAgICBjbGlwUmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgbGVmdDogdGFyZ2V0LmxlZnQgLSAob3ZlcmxheS53aWR0aCAvIDIpLFxyXG4gICAgICAgICAgICAgIHRvcDogdGFyZ2V0LnRvcCAtIChvdmVybGF5LmhlaWdodCAvIDIpLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiB0YXJnZXQud2lkdGgsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiB0YXJnZXQuaGVpZ2h0LFxyXG4gICAgICAgICAgICAgIGZpbGw6ICcnLFxyXG4gICAgICAgICAgICAgIHNjYWxlWDogdGFyZ2V0LnNjYWxlWCxcclxuICAgICAgICAgICAgICBzY2FsZVk6IHRhcmdldC5zY2FsZVksICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KTsgICAgICAgICAgIFxyXG4gICAgICAgICAgb3ZlcmxheS5zZXQoXCJjbGlwUGF0aFwiLGNsaXBSZWN0KVxyXG4gICAgICAgICAgaW5zdC5jYW52YXMucmVuZGVyQWxsKCkgICAgICAgXHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGluc3QuY2FudmFzLm9uKCdvYmplY3Q6bW92aW5nJywgZnVuY3Rpb24gKGUpIHsgICAgICBcclxuICAgICAgICAgICAgbGV0IHRhcmdldCA9IGUudGFyZ2V0O1xyXG4gICAgICAgICAgICBjbGlwUmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiB0YXJnZXQubGVmdCAtIChvdmVybGF5LndpZHRoIC8gMiksXHJcbiAgICAgICAgICAgICAgICB0b3A6IHRhcmdldC50b3AgLSAob3ZlcmxheS5oZWlnaHQgLyAyKSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiB0YXJnZXQud2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRhcmdldC5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiAnJyxcclxuICAgICAgICAgICAgICAgIHNjYWxlWDogdGFyZ2V0LnNjYWxlWCxcclxuICAgICAgICAgICAgICAgIHNjYWxlWTogdGFyZ2V0LnNjYWxlWSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgb3ZlcmxheS5zZXQoXCJjbGlwUGF0aFwiLGNsaXBSZWN0KVxyXG4gICAgICAgICAgICBpbnN0LmNhbnZhcy5yZW5kZXJBbGwoKVxyXG4gICAgICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIENyb3BJbWFnZS5wcm90b3R5cGUub25Nb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgbGV0IGluc3QgID0gdGhpcztcclxuICAgICAgICAgICAgaWYgKGRpc2FibGVkIHx8ICFkcmFnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQ3JvcEltYWdlXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIGluc3QuY2FudmFzLnNldEFjdGl2ZU9iamVjdChyZWN0UmVkKTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIFxyXG4gICAgcmV0dXJuIENyb3BJbWFnZTtcclxufSgpKTsiXX0=