Current File : /home/users/barii/public_html/finansenl.com.pl/wodki/js/fabric.js |
var fabric=fabric||{version:"1.6.0-rc.1"};"undefined"!=typeof exports&&(exports.fabric=fabric),"undefined"!=typeof document&&"undefined"!=typeof window?(fabric.document=document,fabric.window=window,window.fabric=fabric):(fabric.document=require("jsdom").jsdom("<!DOCTYPE html><html><head></head><body></body></html>"),fabric.document.createWindow?fabric.window=fabric.document.createWindow():fabric.window=fabric.document.parentWindow),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode="undefined"!=typeof Buffer&&"undefined"==typeof window,fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id"],fabric.DPI=96,fabric.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",fabric.devicePixelRatio=fabric.window.devicePixelRatio||fabric.window.webkitDevicePixelRatio||fabric.window.mozDevicePixelRatio||1,function(){function a(a,b){this.__eventListeners[a]&&(b?fabric.util.removeFromArray(this.__eventListeners[a],b):this.__eventListeners[a].length=0)}function b(a,b){if(this.__eventListeners||(this.__eventListeners={}),1===arguments.length)for(var c in a)this.on(c,a[c]);else this.__eventListeners[a]||(this.__eventListeners[a]=[]),this.__eventListeners[a].push(b);return this}function c(b,c){if(this.__eventListeners){if(0===arguments.length)this.__eventListeners={};else if(1===arguments.length&&"object"==typeof arguments[0])for(var d in b)a.call(this,d,b[d]);else a.call(this,b,c);return this}}function d(a,b){if(this.__eventListeners){var c=this.__eventListeners[a];if(c){for(var d=0,e=c.length;d<e;d++)c[d].call(this,b||{});return this}}}fabric.Observable={observe:b,stopObserving:c,fire:d,on:b,off:c,trigger:d}}(),fabric.Collection={add:function(){this._objects.push.apply(this._objects,arguments);for(var a=0,b=arguments.length;a<b;a++)this._onObjectAdded(arguments[a]);return this.renderOnAddRemove&&this.renderAll(),this},insertAt:function(a,b,c){var d=this.getObjects();return c?d[b]=a:d.splice(b,0,a),this._onObjectAdded(a),this.renderOnAddRemove&&this.renderAll(),this},remove:function(){for(var b,a=this.getObjects(),c=0,d=arguments.length;c<d;c++)b=a.indexOf(arguments[c]),b!==-1&&(a.splice(b,1),this._onObjectRemoved(arguments[c]));return this.renderOnAddRemove&&this.renderAll(),this},forEachObject:function(a,b){for(var c=this.getObjects(),d=c.length;d--;)a.call(b,c[d],d,c);return this},getObjects:function(a){return"undefined"==typeof a?this._objects:this._objects.filter(function(b){return b.type===a})},item:function(a){return this.getObjects()[a]},isEmpty:function(){return 0===this.getObjects().length},size:function(){return this.getObjects().length},contains:function(a){return this.getObjects().indexOf(a)>-1},complexity:function(){return this.getObjects().reduce(function(a,b){return a+=b.complexity?b.complexity():0},0)}},function(a){var b=Math.sqrt,c=Math.atan2,d=Math.PI/180;fabric.util={removeFromArray:function(a,b){var c=a.indexOf(b);return c!==-1&&a.splice(c,1),a},getRandomInt:function(a,b){return Math.floor(Math.random()*(b-a+1))+a},degreesToRadians:function(a){return a*d},radiansToDegrees:function(a){return a/d},rotatePoint:function(a,b,c){a.subtractEquals(b);var d=Math.sin(c),e=Math.cos(c),f=a.x*e-a.y*d,g=a.x*d+a.y*e;return new fabric.Point(f,g).addEquals(b)},transformPoint:function(a,b,c){return c?new fabric.Point(b[0]*a.x+b[2]*a.y,b[1]*a.x+b[3]*a.y):new fabric.Point(b[0]*a.x+b[2]*a.y+b[4],b[1]*a.x+b[3]*a.y+b[5])},invertTransform:function(a){var b=1/(a[0]*a[3]-a[1]*a[2]),c=[b*a[3],-b*a[1],-b*a[2],b*a[0]],d=fabric.util.transformPoint({x:a[4],y:a[5]},c,!0);return c[4]=-d.x,c[5]=-d.y,c},toFixed:function(a,b){return parseFloat(Number(a).toFixed(b))},parseUnit:function(a,b){var c=/\D{0,2}$/.exec(a),d=parseFloat(a);switch(b||(b=fabric.Text.DEFAULT_SVG_FONT_SIZE),c[0]){case"mm":return d*fabric.DPI/25.4;case"cm":return d*fabric.DPI/2.54;case"in":return d*fabric.DPI;case"pt":return d*fabric.DPI/72;case"pc":return d*fabric.DPI/72*12;case"em":return d*b;default:return d}},falseFunction:function(){return!1},getKlass:function(a,b){return a=fabric.util.string.camelize(a.charAt(0).toUpperCase()+a.slice(1)),fabric.util.resolveNamespace(b)[a]},resolveNamespace:function(b){if(!b)return fabric;for(var c=b.split("."),d=c.length,e=a||fabric.window,f=0;f<d;++f)e=e[c[f]];return e},loadImage:function(a,b,c,d){if(!a)return void(b&&b.call(c,a));var e=fabric.util.createImage();e.onload=function(){b&&b.call(c,e),e=e.onload=e.onerror=null},e.onerror=function(){fabric.log("Error loading "+e.src),b&&b.call(c,null,!0),e=e.onload=e.onerror=null},0!==a.indexOf("data")&&"undefined"!=typeof d&&(e.crossOrigin=d),e.src=a},enlivenObjects:function(a,b,c,d){function e(){++g===h&&b&&b(f)}a=a||[];var f=[],g=0,h=a.length;return h?void a.forEach(function(a,b){if(!a||!a.type)return void e();var g=fabric.util.getKlass(a.type,c);g.async?g.fromObject(a,function(c,g){g||(f[b]=c,d&&d(a,f[b])),e()}):(f[b]=g.fromObject(a),d&&d(a,f[b]),e())}):void(b&&b(f))},groupSVGElements:function(a,b,c){var d;return d=new fabric.PathGroup(a,b),"undefined"!=typeof c&&d.setSourcePath(c),d},populateWithProperties:function(a,b,c){if(c&&"[object Array]"===Object.prototype.toString.call(c))for(var d=0,e=c.length;d<e;d++)c[d]in a&&(b[c[d]]=a[c[d]])},drawDashedLine:function(a,d,e,f,g,h){var i=f-d,j=g-e,k=b(i*i+j*j),l=c(j,i),m=h.length,n=0,o=!0;for(a.save(),a.translate(d,e),a.moveTo(0,0),a.rotate(l),d=0;k>d;)d+=h[n++%m],d>k&&(d=k),a[o?"lineTo":"moveTo"](d,0),o=!o;a.restore()},createCanvasElement:function(a){return a||(a=fabric.document.createElement("canvas")),a.getContext||"undefined"==typeof G_vmlCanvasManager||G_vmlCanvasManager.initElement(a),a},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(a){for(var b=a.prototype,c=b.stateProperties.length;c--;){var d=b.stateProperties[c],e=d.charAt(0).toUpperCase()+d.slice(1),f="set"+e,g="get"+e;b[g]||(b[g]=function(a){return new Function('return this.get("'+a+'")')}(d)),b[f]||(b[f]=function(a){return new Function("value",'return this.set("'+a+'", value)')}(d))}},clipContext:function(a,b){b.save(),b.beginPath(),a.clipTo(b),b.clip()},multiplyTransformMatrices:function(a,b){return[a[0]*b[0]+a[2]*b[1],a[1]*b[0]+a[3]*b[1],a[0]*b[2]+a[2]*b[3],a[1]*b[2]+a[3]*b[3],a[0]*b[4]+a[2]*b[5]+a[4],a[1]*b[4]+a[3]*b[5]+a[5]]},getFunctionBody:function(a){return(String(a).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},isTransparent:function(a,b,c,d){d>0&&(b>d?b-=d:b=0,c>d?c-=d:c=0);for(var e=!0,f=a.getImageData(b,c,2*d||1,2*d||1),g=3,h=f.data.length;g<h;g+=4){var i=f.data[g];if(e=i<=0,e===!1)break}return f=null,e}}}("undefined"!=typeof exports?exports:this),function(){function e(b,c,e,h,i,j,k){var l=d.call(arguments);if(a[l])return a[l];var m=Math.PI,n=k*m/180,o=Math.sin(n),p=Math.cos(n),q=0,r=0;e=Math.abs(e),h=Math.abs(h);var s=-p*b*.5-o*c*.5,t=-p*c*.5+o*b*.5,u=e*e,v=h*h,w=t*t,x=s*s,y=u*v-u*w-v*x,z=0;if(y<0){var A=Math.sqrt(1-y/(u*v));e*=A,h*=A}else z=(i===j?-1:1)*Math.sqrt(y/(u*w+v*x));var B=z*e*t/h,C=-z*h*s/e,D=p*B-o*C+.5*b,E=o*B+p*C+.5*c,F=g(1,0,(s-B)/e,(t-C)/h),G=g((s-B)/e,(t-C)/h,(-s-B)/e,(-t-C)/h);0===j&&G>0?G-=2*m:1===j&&G<0&&(G+=2*m);for(var H=Math.ceil(Math.abs(G/m*2)),I=[],J=G/H,K=8/3*Math.sin(J/4)*Math.sin(J/4)/Math.sin(J/2),L=F+J,M=0;M<H;M++)I[M]=f(F,L,p,o,e,h,D,E,K,q,r),q=I[M][4],r=I[M][5],F=L,L+=J;return a[l]=I,I}function f(a,c,e,f,g,h,i,j,k,l,m){var n=d.call(arguments);if(b[n])return b[n];var o=Math.cos(a),p=Math.sin(a),q=Math.cos(c),r=Math.sin(c),s=e*g*q-f*h*r+i,t=f*g*q+e*h*r+j,u=l+k*(-e*g*p-f*h*o),v=m+k*(-f*g*p+e*h*o),w=s+k*(e*g*r+f*h*q),x=t+k*(f*g*r-e*h*q);return b[n]=[u,v,w,x,s,t],b[n]}function g(a,b,c,d){var e=Math.atan2(b,a),f=Math.atan2(d,c);return f>=e?f-e:2*Math.PI-(e-f)}function h(a,b,e,f,g,h,i,j){var k=d.call(arguments);if(c[k])return c[k];var r,s,t,u,v,w,x,y,l=Math.sqrt,m=Math.min,n=Math.max,o=Math.abs,p=[],q=[[],[]];s=6*a-12*e+6*g,r=-3*a+9*e-9*g+3*i,t=3*e-3*a;for(var z=0;z<2;++z)if(z>0&&(s=6*b-12*f+6*h,r=-3*b+9*f-9*h+3*j,t=3*f-3*b),o(r)<1e-12){if(o(s)<1e-12)continue;u=-t/s,0<u&&u<1&&p.push(u)}else x=s*s-4*t*r,x<0||(y=l(x),v=(-s+y)/(2*r),0<v&&v<1&&p.push(v),w=(-s-y)/(2*r),0<w&&w<1&&p.push(w));for(var A,B,E,C=p.length,D=C;C--;)u=p[C],E=1-u,A=E*E*E*a+3*E*E*u*e+3*E*u*u*g+u*u*u*i,q[0][C]=A,B=E*E*E*b+3*E*E*u*f+3*E*u*u*h+u*u*u*j,q[1][C]=B;q[0][D]=a,q[1][D]=b,q[0][D+1]=i,q[1][D+1]=j;var F=[{x:m.apply(null,q[0]),y:m.apply(null,q[1])},{x:n.apply(null,q[0]),y:n.apply(null,q[1])}];return c[k]=F,F}var a={},b={},c={},d=Array.prototype.join;fabric.util.drawArc=function(a,b,c,d){for(var f=d[0],g=d[1],h=d[2],i=d[3],j=d[4],k=d[5],l=d[6],m=[[],[],[],[]],n=e(k-b,l-c,f,g,i,j,h),o=0,p=n.length;o<p;o++)m[o][0]=n[o][0]+b,m[o][1]=n[o][1]+c,m[o][2]=n[o][2]+b,m[o][3]=n[o][3]+c,m[o][4]=n[o][4]+b,m[o][5]=n[o][5]+c,a.bezierCurveTo.apply(a,m[o])},fabric.util.getBoundsOfArc=function(a,b,c,d,f,g,i,j,k){for(var l=0,m=0,n=[],o=[],p=e(j-a,k-b,c,d,g,i,f),q=[[],[]],r=0,s=p.length;r<s;r++)n=h(l,m,p[r][0],p[r][1],p[r][2],p[r][3],p[r][4],p[r][5]),q[0].x=n[0].x+a,q[0].y=n[0].y+b,q[1].x=n[1].x+a,q[1].y=n[1].y+b,o.push(q[0]),o.push(q[1]),l=p[r][4],m=p[r][5];return o},fabric.util.getBoundsOfCurve=h}(),function(){function b(b,c){for(var d=a.call(arguments,2),e=[],f=0,g=b.length;f<g;f++)e[f]=d.length?b[f][c].apply(b[f],d):b[f][c].call(b[f]);return e}function c(a,b){return e(a,b,function(a,b){return a>=b})}function d(a,b){return e(a,b,function(a,b){return a<b})}function e(a,b,c){if(a&&0!==a.length){var d=a.length-1,e=b?a[d][b]:a[d];if(b)for(;d--;)c(a[d][b],e)&&(e=a[d][b]);else for(;d--;)c(a[d],e)&&(e=a[d]);return e}}var a=Array.prototype.slice;Array.prototype.indexOf||(Array.prototype.indexOf=function(a){if(void 0===this||null===this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=0;if(arguments.length>0&&(d=Number(arguments[1]),d!==d?d=0:0!==d&&d!==Number.POSITIVE_INFINITY&&d!==Number.NEGATIVE_INFINITY&&(d=(d>0||-1)*Math.floor(Math.abs(d)))),d>=c)return-1;for(var e=d>=0?d:Math.max(c-Math.abs(d),0);e<c;e++)if(e in b&&b[e]===a)return e;return-1}),Array.prototype.forEach||(Array.prototype.forEach=function(a,b){for(var c=0,d=this.length>>>0;c<d;c++)c in this&&a.call(b,this[c],c,this)}),Array.prototype.map||(Array.prototype.map=function(a,b){for(var c=[],d=0,e=this.length>>>0;d<e;d++)d in this&&(c[d]=a.call(b,this[d],d,this));return c}),Array.prototype.every||(Array.prototype.every=function(a,b){for(var c=0,d=this.length>>>0;c<d;c++)if(c in this&&!a.call(b,this[c],c,this))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(a,b){for(var c=0,d=this.length>>>0;c<d;c++)if(c in this&&a.call(b,this[c],c,this))return!0;return!1}),Array.prototype.filter||(Array.prototype.filter=function(a,b){for(var d,c=[],e=0,f=this.length>>>0;e<f;e++)e in this&&(d=this[e],a.call(b,d,e,this)&&c.push(d));return c}),Array.prototype.reduce||(Array.prototype.reduce=function(a){var d,b=this.length>>>0,c=0;if(arguments.length>1)d=arguments[1];else for(;;){if(c in this){d=this[c++];break}if(++c>=b)throw new TypeError}for(;c<b;c++)c in this&&(d=a.call(null,d,this[c],c,this));return d}),fabric.util.array={invoke:b,min:d,max:c}}(),function(){function a(a,b){for(var c in b)a[c]=b[c];return a}function b(b){return a({},b)}fabric.util.object={extend:a,clone:b}}(),function(){function a(a){return a.replace(/-+(.)?/g,function(a,b){return b?b.toUpperCase():""})}function b(a,b){return a.charAt(0).toUpperCase()+(b?a.slice(1):a.slice(1).toLowerCase())}function c(a){return a.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:a,capitalize:b,escapeXml:c}}(),function(){var a=Array.prototype.slice,b=Function.prototype.apply,c=function(){};Function.prototype.bind||(Function.prototype.bind=function(d){var g,e=this,f=a.call(arguments,1);return g=f.length?function(){return b.call(e,this instanceof c?this:d,f.concat(a.call(arguments)))}:function(){return b.call(e,this instanceof c?this:d,arguments)},c.prototype=this.prototype,g.prototype=new c,g})}(),function(){function e(){}function f(b){var c=this.constructor.superclass.prototype[b];return arguments.length>1?c.apply(this,a.call(arguments,1)):c.call(this)}function g(){function h(){this.initialize.apply(this,arguments)}var c=null,g=a.call(arguments,0);"function"==typeof g[0]&&(c=g.shift()),h.superclass=c,h.subclasses=[],c&&(e.prototype=c.prototype,h.prototype=new e,c.subclasses.push(h));for(var i=0,j=g.length;i<j;i++)d(h,g[i],c);return h.prototype.initialize||(h.prototype.initialize=b),h.prototype.constructor=h,h.prototype.callSuper=f,h}var a=Array.prototype.slice,b=function(){},c=function(){for(var a in{toString:1})if("toString"===a)return!1;return!0}(),d=function(a,b,d){for(var e in b)e in a.prototype&&"function"==typeof a.prototype[e]&&(b[e]+"").indexOf("callSuper")>-1?a.prototype[e]=function(a){return function(){var c=this.constructor.superclass;this.constructor.superclass=d;var e=b[a].apply(this,arguments);if(this.constructor.superclass=c,"initialize"!==a)return e}}(e):a.prototype[e]=b[e],c&&(b.toString!==Object.prototype.toString&&(a.prototype.toString=b.toString),b.valueOf!==Object.prototype.valueOf&&(a.prototype.valueOf=b.valueOf))};fabric.util.createClass=g}(),function(){function b(a){var c,d,b=Array.prototype.slice.call(arguments,1),e=b.length;for(d=0;d<e;d++)if(c=typeof a[b[d]],!/^(?:function|object|unknown)$/.test(c))return!1;return!0}function f(a,b){return{handler:b,wrappedHandler:g(a,b)}}function g(a,b){return function(d){b.call(c(a),d||fabric.window.event)}}function h(a,b){return function(c){if(l[a]&&l[a][b])for(var d=l[a][b],e=0,f=d.length;e<f;e++)d[e].call(this,c||fabric.window.event)}}function o(b){b||(b=fabric.window.event);var c=b.target||(typeof b.srcElement!==a?b.srcElement:null),d=fabric.util.getScrollLeftTop(c);return{x:p(b)+d.left,y:q(b)+d.top}}function r(a,b,c){var d="touchend"===a.type?"changedTouches":"touches";return a[d]&&a[d][0]?a[d][0][b]-(a[d][0][b]-a[d][0][c])||a[c]:a[c]}var c,d,a="unknown",e=function(){var a=0;return function(b){return b.__uniqueID||(b.__uniqueID="uniqueID__"+a++)}}();!function(){var a={};c=function(b){return a[b]},d=function(b,c){a[b]=c}}();var m,n,i=b(fabric.document.documentElement,"addEventListener","removeEventListener")&&b(fabric.window,"addEventListener","removeEventListener"),j=b(fabric.document.documentElement,"attachEvent","detachEvent")&&b(fabric.window,"attachEvent","detachEvent"),k={},l={};i?(m=function(a,b,c){a.addEventListener(b,c,!1)},n=function(a,b,c){a.removeEventListener(b,c,!1)}):j?(m=function(a,b,c){var g=e(a);d(g,a),k[g]||(k[g]={}),k[g][b]||(k[g][b]=[]);var h=f(g,c);k[g][b].push(h),a.attachEvent("on"+b,h.wrappedHandler)},n=function(a,b,c){var f,d=e(a);if(k[d]&&k[d][b])for(var g=0,h=k[d][b].length;g<h;g++)f=k[d][b][g],f&&f.handler===c&&(a.detachEvent("on"+b,f.wrappedHandler),k[d][b][g]=null)}):(m=function(a,b,c){var d=e(a);if(l[d]||(l[d]={}),!l[d][b]){l[d][b]=[];var f=a["on"+b];f&&l[d][b].push(f),a["on"+b]=h(d,b)}l[d][b].push(c)},n=function(a,b,c){var d=e(a);if(l[d]&&l[d][b])for(var f=l[d][b],g=0,h=f.length;g<h;g++)f[g]===c&&f.splice(g,1)}),fabric.util.addListener=m,fabric.util.removeListener=n;var p=function(b){return typeof b.clientX!==a?b.clientX:0},q=function(b){return typeof b.clientY!==a?b.clientY:0};fabric.isTouchSupported&&(p=function(a){return r(a,"pageX","clientX")},q=function(a){return r(a,"pageY","clientY")}),fabric.util.getPointer=o,fabric.util.object.extend(fabric.util,fabric.Observable)}(),function(){function a(a,b){var c=a.style;if(!c)return a;if("string"==typeof b)return a.style.cssText+=";"+b,b.indexOf("opacity")>-1?f(a,b.match(/opacity:\s*(\d?\.?\d*)/)[1]):a;for(var d in b)if("opacity"===d)f(a,b[d]);else{var e="float"===d||"cssFloat"===d?"undefined"==typeof c.styleFloat?"cssFloat":"styleFloat":d;c[e]=b[d]}return a}var b=fabric.document.createElement("div"),c="string"==typeof b.style.opacity,d="string"==typeof b.style.filter,e=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,f=function(a){return a};c?f=function(a,b){return a.style.opacity=b,a}:d&&(f=function(a,b){var c=a.style;return a.currentStyle&&!a.currentStyle.hasLayout&&(c.zoom=1),e.test(c.filter)?(b=b>=.9999?"":"alpha(opacity="+100*b+")",c.filter=c.filter.replace(e,b)):c.filter+=" alpha(opacity="+100*b+")",a}),fabric.util.setStyle=a}(),function(){function b(a){return"string"==typeof a?fabric.document.getElementById(a):a}function e(a,b){var c=fabric.document.createElement(a);for(var d in b)"class"===d?c.className=b[d]:"for"===d?c.htmlFor=b[d]:c.setAttribute(d,b[d]);return c}function f(a,b){a&&(" "+a.className+" ").indexOf(" "+b+" ")===-1&&(a.className+=(a.className?" ":"")+b)}function g(a,b,c){return"string"==typeof b&&(b=e(b,c)),a.parentNode&&a.parentNode.replaceChild(b,a),b.appendChild(a),b}function h(a){for(var b=0,c=0,d=fabric.document.documentElement,e=fabric.document.body||{scrollLeft:0,scrollTop:0};a&&a.parentNode&&(a=a.parentNode,a===fabric.document?(b=e.scrollLeft||d.scrollLeft||0,c=e.scrollTop||d.scrollTop||0):(b+=a.scrollLeft||0,c+=a.scrollTop||0),1!==a.nodeType||"fixed"!==fabric.util.getElementStyle(a,"position")););return{left:b,top:c}}function i(a){var b,f,c=a&&a.ownerDocument,d={left:0,top:0},e={left:0,top:0},g={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!c)return e;for(var i in g)e[g[i]]+=parseInt(j(a,i),10)||0;return b=c.documentElement,"undefined"!=typeof a.getBoundingClientRect&&(d=a.getBoundingClientRect()),f=h(a),{left:d.left+f.left-(b.clientLeft||0)+e.left,top:d.top+f.top-(b.clientTop||0)+e.top}}var c,a=Array.prototype.slice,d=function(b){return a.call(b,0)};try{c=d(fabric.document.childNodes)instanceof Array}catch(a){}c||(d=function(a){for(var b=new Array(a.length),c=a.length;c--;)b[c]=a[c];return b});var j;j=fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?function(a,b){var c=fabric.document.defaultView.getComputedStyle(a,null);return c?c[b]:void 0}:function(a,b){var c=a.style[b];return!c&&a.currentStyle&&(c=a.currentStyle[b]),c},function(){function c(a){return"undefined"!=typeof a.onselectstart&&(a.onselectstart=fabric.util.falseFunction),b?a.style[b]="none":"string"==typeof a.unselectable&&(a.unselectable="on"),a}function d(a){return"undefined"!=typeof a.onselectstart&&(a.onselectstart=null),b?a.style[b]="":"string"==typeof a.unselectable&&(a.unselectable=""),a}var a=fabric.document.documentElement.style,b="userSelect"in a?"userSelect":"MozUserSelect"in a?"MozUserSelect":"WebkitUserSelect"in a?"WebkitUserSelect":"KhtmlUserSelect"in a?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=c,fabric.util.makeElementSelectable=d}(),function(){function a(a,b){var c=fabric.document.getElementsByTagName("head")[0],d=fabric.document.createElement("script"),e=!0;d.onload=d.onreadystatechange=function(a){if(e){if("string"==typeof this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)return;e=!1,b(a||fabric.window.event),d=d.onload=d.onreadystatechange=null}},d.src=a,c.appendChild(d)}fabric.util.getScript=a}(),fabric.util.getById=b,fabric.util.toArray=d,fabric.util.makeElement=e,fabric.util.addClass=f,fabric.util.wrapElement=g,fabric.util.getScrollLeftTop=h,fabric.util.getElementOffset=i,fabric.util.getElementStyle=j}(),function(){function a(a,b){return a+(/\?/.test(a)?"&":"?")+b}function c(){}function d(d,e){e||(e={});var i,f=e.method?e.method.toUpperCase():"GET",g=e.onComplete||function(){},h=b();return h.onreadystatechange=function(){4===h.readyState&&(g(h),h.onreadystatechange=c)},"GET"===f&&(i=null,"string"==typeof e.parameters&&(d=a(d,e.parameters))),h.open(f,d,!0),"POST"!==f&&"PUT"!==f||h.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),h.send(i),h}var b=function(){for(var a=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}],b=a.length;b--;)try{var c=a[b]();if(c)return a[b]}catch(a){}}();fabric.util.request=d}(),fabric.log=function(){},fabric.warn=function(){},"undefined"!=typeof console&&["log","warn"].forEach(function(a){"undefined"!=typeof console[a]&&"function"==typeof console[a].apply&&(fabric[a]=function(){return console[a].apply(console,arguments)})}),function(){function a(a){c(function(b){a||(a={});var g,d=b||+new Date,e=a.duration||500,f=d+e,h=a.onChange||function(){},i=a.abort||function(){return!1},j=a.easing||function(a,b,c,d){return-c*Math.cos(a/d*(Math.PI/2))+c+b},k="startValue"in a?a.startValue:0,l="endValue"in a?a.endValue:100,m=a.byValue||l-k;a.onStart&&a.onStart(),function b(l){g=l||+new Date;var n=g>f?e:g-d;return i()?void(a.onComplete&&a.onComplete()):(h(j(n,k,m,e)),g>f?void(a.onComplete&&a.onComplete()):void c(b))}(d)})}function c(){return b.apply(fabric.window,arguments)}var b=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(a){fabric.window.setTimeout(a,1e3/60)};fabric.util.animate=a,fabric.util.requestAnimFrame=c}(),function(){function a(a,b,c,d){return a<Math.abs(b)?(a=b,d=c/4):d=c/(2*Math.PI)*Math.asin(b/a),{a:a,c:b,p:c,s:d}}function b(a,b,c){return a.a*Math.pow(2,10*(b-=1))*Math.sin((b*c-a.s)*(2*Math.PI)/a.p)}function c(a,b,c,d){return c*((a=a/d-1)*a*a+1)+b}function d(a,b,c,d){return a/=d/2,a<1?c/2*a*a*a+b:c/2*((a-=2)*a*a+2)+b}function e(a,b,c,d){return c*(a/=d)*a*a*a+b}function f(a,b,c,d){return-c*((a=a/d-1)*a*a*a-1)+b}function g(a,b,c,d){return a/=d/2,a<1?c/2*a*a*a*a+b:-c/2*((a-=2)*a*a*a-2)+b}function h(a,b,c,d){return c*(a/=d)*a*a*a*a+b}function i(a,b,c,d){return c*((a=a/d-1)*a*a*a*a+1)+b}function j(a,b,c,d){return a/=d/2,a<1?c/2*a*a*a*a*a+b:c/2*((a-=2)*a*a*a*a+2)+b}function k(a,b,c,d){return-c*Math.cos(a/d*(Math.PI/2))+c+b}function l(a,b,c,d){return c*Math.sin(a/d*(Math.PI/2))+b}function m(a,b,c,d){return-c/2*(Math.cos(Math.PI*a/d)-1)+b}function n(a,b,c,d){return 0===a?b:c*Math.pow(2,10*(a/d-1))+b}function o(a,b,c,d){return a===d?b+c:c*(-Math.pow(2,-10*a/d)+1)+b}function p(a,b,c,d){return 0===a?b:a===d?b+c:(a/=d/2,a<1?c/2*Math.pow(2,10*(a-1))+b:c/2*(-Math.pow(2,-10*--a)+2)+b)}function q(a,b,c,d){return-c*(Math.sqrt(1-(a/=d)*a)-1)+b}function r(a,b,c,d){return c*Math.sqrt(1-(a=a/d-1)*a)+b}function s(a,b,c,d){return a/=d/2,a<1?-c/2*(Math.sqrt(1-a*a)-1)+b:c/2*(Math.sqrt(1-(a-=2)*a)+1)+b}function t(c,d,e,f){var g=1.70158,h=0,i=e;if(0===c)return d;if(c/=f,1===c)return d+e;h||(h=.3*f);var j=a(i,e,h,g);return-b(j,c,f)+d}function u(b,c,d,e){var f=1.70158,g=0,h=d;if(0===b)return c;if(b/=e,1===b)return c+d;g||(g=.3*e);var i=a(h,d,g,f);return i.a*Math.pow(2,-10*b)*Math.sin((b*e-i.s)*(2*Math.PI)/i.p)+i.c+c}function v(c,d,e,f){var g=1.70158,h=0,i=e;if(0===c)return d;if(c/=f/2,2===c)return d+e;h||(h=f*(.3*1.5));var j=a(i,e,h,g);return c<1?-.5*b(j,c,f)+d:j.a*Math.pow(2,-10*(c-=1))*Math.sin((c*f-j.s)*(2*Math.PI)/j.p)*.5+j.c+d}function w(a,b,c,d,e){return void 0===e&&(e=1.70158),c*(a/=d)*a*((e+1)*a-e)+b}function x(a,b,c,d,e){return void 0===e&&(e=1.70158),c*((a=a/d-1)*a*((e+1)*a+e)+1)+b}function y(a,b,c,d,e){return void 0===e&&(e=1.70158),a/=d/2,a<1?c/2*(a*a*(((e*=1.525)+1)*a-e))+b:c/2*((a-=2)*a*(((e*=1.525)+1)*a+e)+2)+b}function z(a,b,c,d){return c-A(d-a,0,c,d)+b}function A(a,b,c,d){return(a/=d)<1/2.75?c*(7.5625*a*a)+b:a<2/2.75?c*(7.5625*(a-=1.5/2.75)*a+.75)+b:a<2.5/2.75?c*(7.5625*(a-=2.25/2.75)*a+.9375)+b:c*(7.5625*(a-=2.625/2.75)*a+.984375)+b}function B(a,b,c,d){return a<d/2?.5*z(2*a,0,c,d)+b:.5*A(2*a-d,0,c,d)+.5*c+b}fabric.util.ease={easeInQuad:function(a,b,c,d){return c*(a/=d)*a+b},easeOutQuad:function(a,b,c,d){return-c*(a/=d)*(a-2)+b},easeInOutQuad:function(a,b,c,d){return a/=d/2,a<1?c/2*a*a+b:-c/2*(--a*(a-2)-1)+b},easeInCubic:function(a,b,c,d){return c*(a/=d)*a*a+b},easeOutCubic:c,easeInOutCubic:d,easeInQuart:e,easeOutQuart:f,easeInOutQuart:g,easeInQuint:h,easeOutQuint:i,easeInOutQuint:j,easeInSine:k,easeOutSine:l,easeInOutSine:m,easeInExpo:n,easeOutExpo:o,easeInOutExpo:p,easeInCirc:q,easeOutCirc:r,easeInOutCirc:s,easeInElastic:t,easeOutElastic:u,easeInOutElastic:v,easeInBack:w,easeOutBack:x,easeInOutBack:y,easeInBounce:z,easeOutBounce:A,easeInOutBounce:B}}(),function(a){"use strict";function o(a){return a in m?m[a]:a}function p(a,c,d,e){var i,f="[object Array]"===Object.prototype.toString.call(c);return"fill"!==a&&"stroke"!==a||"none"!==c?"strokeDashArray"===a?c=c.replace(/,/g," ").split(/\s+/).map(function(a){return parseFloat(a)}):"transformMatrix"===a?c=d&&d.transformMatrix?h(d.transformMatrix,b.parseTransformAttribute(c)):b.parseTransformAttribute(c):"visible"===a?(c="none"!==c&&"hidden"!==c,d&&d.visible===!1&&(c=!1)):"originX"===a?c="start"===c?"left":"end"===c?"right":"center":i=f?c.map(g):g(c,e):c="",!f&&isNaN(i)?c:i}function q(a){for(var c in n)if(a[c]&&"undefined"!=typeof a[n[c]]&&0!==a[c].indexOf("url(")){var d=new b.Color(a[c]);a[c]=d.setAlpha(f(d.getAlpha()*a[n[c]],2)).toRgba()}return a}function r(a,b){var c,d;a.replace(/;\s*$/,"").split(";").forEach(function(a){var e=a.split(":");c=o(e[0].trim().toLowerCase()),d=p(c,e[1].trim()),b[c]=d})}function s(a,b){var c,d;for(var e in a)"undefined"!=typeof a[e]&&(c=o(e.toLowerCase()),d=p(c,a[e]),b[c]=d)}function t(a,c){var d={};for(var e in b.cssRules[c])if(u(a,e.split(" ")))for(var f in b.cssRules[c][e])d[f]=b.cssRules[c][e][f];return d}function u(a,b){var c,d=!0;return c=w(a,b.pop()),c&&b.length&&(d=v(a,b)),c&&d&&0===b.length}function v(a,b){for(var c,d=!0;a.parentNode&&1===a.parentNode.nodeType&&b.length;)d&&(c=b.pop()),a=a.parentNode,d=w(a,c);return 0===b.length}function w(a,b){var f,c=a.nodeName,d=a.getAttribute("class"),e=a.getAttribute("id");if(f=new RegExp("^"+c,"i"),b=b.replace(f,""),e&&b.length&&(f=new RegExp("#"+e+"(?![a-zA-Z\\-]+)","i"),b=b.replace(f,"")),d&&b.length){d=d.split(" ");for(var g=d.length;g--;)f=new RegExp("\\."+d[g]+"(?![a-zA-Z\\-]+)","i"),b=b.replace(f,"")}return 0===b.length}function x(a,b){var c;if(a.getElementById&&(c=a.getElementById(b)),c)return c;var d,e,f,g=a.getElementsByTagName("*");for(e=0;e<g.length;e++)if(d=g[e],f===d.getAttribute("id"))return d}function y(a){for(var b=a.getElementsByTagName("use"),c=0;b.length&&c<b.length;){var j,l,m,n,o,d=b[c],e=d.getAttribute("xlink:href").substr(1),f=d.getAttribute("x")||0,g=d.getAttribute("y")||0,h=x(a,e).cloneNode(!0),i=(h.getAttribute("transform")||"")+" translate("+f+", "+g+")",k=b.length;if(A(h),/^svg$/i.test(h.nodeName)){var p=h.ownerDocument.createElement("g");for(m=0,n=h.attributes,o=n.length;m<o;m++)l=n.item(m),p.setAttribute(l.nodeName,l.nodeValue);for(;null!=h.firstChild;)p.appendChild(h.firstChild);h=p}for(m=0,n=d.attributes,o=n.length;m<o;m++)l=n.item(m),"x"!==l.nodeName&&"y"!==l.nodeName&&"xlink:href"!==l.nodeName&&("transform"===l.nodeName?i=l.nodeValue+" "+i:h.setAttribute(l.nodeName,l.nodeValue));h.setAttribute("transform",i),h.setAttribute("instantiated_by_use","1"),h.removeAttribute("id"),j=d.parentNode,j.replaceChild(h,d),b.length===k&&c++}}function A(a){var h,i,k,l,b=a.getAttribute("viewBox"),c=1,d=1,e=0,f=0,m=a.getAttribute("width"),n=a.getAttribute("height"),o=!b||!j.test(a.tagName)||!(b=b.match(z)),p=!m||!n||"100%"===m||"100%"===n,q=o&&p,r={};if(r.width=0,r.height=0,r.toBeParsed=q,q)return r;if(o)return r.width=g(m),r.height=g(n),r;if(e=-parseFloat(b[1]),f=-parseFloat(b[2]),h=parseFloat(b[3]),i=parseFloat(b[4]),p?(r.width=h,r.height=i):(r.width=g(m),r.height=g(n),c=r.width/h,d=r.height/i),d=c=c>d?d:c,1===c&&1===d&&0===e&&0===f)return r;if(k=" matrix("+c+" 0 0 "+d+" "+e*c+" "+f*d+") ","svg"===a.tagName){for(l=a.ownerDocument.createElement("g");null!=a.firstChild;)l.appendChild(a.firstChild);a.appendChild(l)}else l=a,k=l.getAttribute("transform")+k;return l.setAttribute("transform",k),r}function C(a){var c=a.objects,e=a.options;return c=c.map(function(a){return b[d(a.type)].fromObject(a)}),{objects:c,options:e}}function D(a,b,c){b[c]&&b[c].toSVG&&a.push('<pattern x="0" y="0" id="',c,'Pattern" ','width="',b[c].source.width,'" height="',b[c].source.height,'" patternUnits="userSpaceOnUse">','<image x="0" y="0" ','width="',b[c].source.width,'" height="',b[c].source.height,'" xlink:href="',b[c].source.src,'"></image></pattern>')}var b=a.fabric||(a.fabric={}),c=b.util.object.extend,d=b.util.string.capitalize,e=b.util.object.clone,f=b.util.toFixed,g=b.util.parseUnit,h=b.util.multiplyTransformMatrices,i=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/i,j=/^(symbol|image|marker|pattern|view|svg)$/i,k=/^(?:pattern|defs|symbol|metadata)$/i,l=/^(symbol|g|a|svg)$/i,m={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},n={stroke:"strokeOpacity",fill:"fillOpacity"};b.cssRules={},b.gradientDefs={},b.parseTransformAttribute=function(){function a(a,b){var c=b[0];a[0]=Math.cos(c),a[1]=Math.sin(c),a[2]=-Math.sin(c),a[3]=Math.cos(c)}function c(a,b){var c=b[0],d=2===b.length?b[1]:b[0];a[0]=c,a[3]=d}function d(a,c){a[2]=Math.tan(b.util.degreesToRadians(c[0]))}function e(a,c){a[1]=Math.tan(b.util.degreesToRadians(c[0]))}function f(a,b){a[4]=b[0],2===b.length&&(a[5]=b[1])}var g=[1,0,0,1,0,0],h=b.reNum,i="(?:\\s+,?\\s*|,\\s*)",j="(?:(skewX)\\s*\\(\\s*("+h+")\\s*\\))",k="(?:(skewY)\\s*\\(\\s*("+h+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+h+")(?:"+i+"("+h+")"+i+"("+h+"))?\\s*\\))",m="(?:(scale)\\s*\\(\\s*("+h+")(?:"+i+"("+h+"))?\\s*\\))",n="(?:(translate)\\s*\\(\\s*("+h+")(?:"+i+"("+h+"))?\\s*\\))",o="(?:(matrix)\\s*\\(\\s*("+h+")"+i+"("+h+")"+i+"("+h+")"+i+"("+h+")"+i+"("+h+")"+i+"("+h+")\\s*\\))",p="(?:"+o+"|"+n+"|"+m+"|"+l+"|"+j+"|"+k+")",q="(?:"+p+"(?:"+i+p+")*)",r="^\\s*(?:"+q+"?)\\s*$",s=new RegExp(r),t=new RegExp(p,"g");return function(h){var i=g.concat(),j=[];if(!h||h&&!s.test(h))return i;h.replace(t,function(h){var k=new RegExp(p).exec(h).filter(function(a){return""!==a&&null!=a}),l=k[1],m=k.slice(2).map(parseFloat);switch(l){case"translate":f(i,m);break;case"rotate":m[0]=b.util.degreesToRadians(m[0]),a(i,m);break;case"scale":c(i,m);break;case"skewX":d(i,m);break;case"skewY":e(i,m);break;case"matrix":i=m}j.push(i.concat()),i=g.concat()});for(var k=j[0];j.length>1;)j.shift(),k=b.util.multiplyTransformMatrices(k,j[0]);return k}}();var z=new RegExp("^\\s*("+b.reNum+"+)\\s*,?\\s*("+b.reNum+"+)\\s*,?\\s*("+b.reNum+"+)\\s*,?\\s*("+b.reNum+"+)\\s*$");b.parseSVGDocument=function(){function a(a,b){for(;a&&(a=a.parentNode);)if(b.test(a.nodeName)&&!a.getAttribute("instantiated_by_use"))return!0;return!1}return function(c,d,f){if(c){y(c);var g=new Date,h=b.Object.__uid++,j=A(c),l=b.util.toArray(c.getElementsByTagName("*"));if(j.svgUid=h,0===l.length&&b.isLikelyNode){l=c.selectNodes('//*[name(.)!="svg"]');for(var m=[],n=0,o=l.length;n<o;n++)m[n]=l[n];l=m}var p=l.filter(function(b){return A(b),i.test(b.tagName)&&!a(b,k)});if(!p||p&&!p.length)return void(d&&d([],{}));b.gradientDefs[h]=b.getGradientDefs(c),b.cssRules[h]=b.getCSSRules(c),b.parseElements(p,function(a){b.documentParsingTime=new Date-g,d&&d(a,j)},e(j),f)}}}();var B={has:function(a,b){b(!1)},get:function(){},set:function(){}},E=new RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+b.reNum+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+b.reNum+"))?\\s+(.*)");c(b,{parseFontDeclaration:function(a,b){var c=a.match(E);
if(c){var d=c[1],e=c[3],f=c[4],h=c[5],i=c[6];d&&(b.fontStyle=d),e&&(b.fontWeight=isNaN(parseFloat(e))?e:parseFloat(e)),f&&(b.fontSize=g(f)),i&&(b.fontFamily=i),h&&(b.lineHeight="normal"===h?1:h)}},getGradientDefs:function(a){var d,e,g,h,b=a.getElementsByTagName("linearGradient"),c=a.getElementsByTagName("radialGradient"),f=0,i=[],j={},k={};for(i.length=b.length+c.length,e=b.length;e--;)i[f++]=b[e];for(e=c.length;e--;)i[f++]=c[e];for(;f--;)d=i[f],h=d.getAttribute("xlink:href"),g=d.getAttribute("id"),h&&(k[g]=h.substr(1)),j[g]=d;for(g in k){var l=j[k[g]].cloneNode(!0);for(d=j[g];l.firstChild;)d.appendChild(l.firstChild)}return j},parseAttributes:function(a,d,e){if(a){var f,h,g={};"undefined"==typeof e&&(e=a.getAttribute("svgUid")),a.parentNode&&l.test(a.parentNode.nodeName)&&(g=b.parseAttributes(a.parentNode,d,e)),h=g&&g.fontSize||a.getAttribute("font-size")||b.Text.DEFAULT_SVG_FONT_SIZE;var i=d.reduce(function(b,c){return f=a.getAttribute(c),f&&(c=o(c),f=p(c,f,g,h),b[c]=f),b},{});return i=c(i,c(t(a,e),b.parseStyleAttribute(a))),i.font&&b.parseFontDeclaration(i.font,i),q(c(g,i))}},parseElements:function(a,c,d,e){new b.ElementsParser(a,c,d,e).parse()},parseStyleAttribute:function(a){var b={},c=a.getAttribute("style");return c?("string"==typeof c?r(c,b):s(c,b),b):b},parsePointsAttribute:function(a){if(!a)return null;a=a.replace(/,/g," ").trim(),a=a.split(/\s+/);var c,d,b=[];for(c=0,d=a.length;c<d;c+=2)b.push({x:parseFloat(a[c]),y:parseFloat(a[c+1])});return b},getCSSRules:function(a){for(var e,c=a.getElementsByTagName("style"),d={},f=0,g=c.length;f<g;f++){var h=c[f].textContent;h=h.replace(/\/\*[\s\S]*?\*\//g,""),""!==h.trim()&&(e=h.match(/[^{]*\{[\s\S]*?\}/g),e=e.map(function(a){return a.trim()}),e.forEach(function(a){for(var c=a.match(/([\s\S]*?)\s*\{([^}]*)\}/),e={},f=c[2].trim(),g=f.replace(/;$/,"").split(/\s*;\s*/),h=0,i=g.length;h<i;h++){var j=g[h].split(/\s*:\s*/),k=o(j[0]),l=p(k,j[1],j[0]);e[k]=l}a=c[1],a.split(",").forEach(function(a){a=a.replace(/^svg/i,"").trim(),""!==a&&(d[a]=b.util.object.clone(e))})}))}return d},loadSVGFromURL:function(a,c,d){function e(e){var f=e.responseXML;f&&!f.documentElement&&b.window.ActiveXObject&&e.responseText&&(f=new ActiveXObject("Microsoft.XMLDOM"),f.async="false",f.loadXML(e.responseText.replace(/<!DOCTYPE[\s\S]*?(\[[\s\S]*\])*?>/i,""))),f&&f.documentElement&&b.parseSVGDocument(f.documentElement,function(d,e){B.set(a,{objects:b.util.array.invoke(d,"toObject"),options:e}),c(d,e)},d)}a=a.replace(/^\n\s*/,"").trim(),B.has(a,function(d){d?B.get(a,function(a){var b=C(a);c(b.objects,b.options)}):new b.util.request(a,{method:"get",onComplete:e})})},loadSVGFromString:function(a,c,d){a=a.trim();var e;if("undefined"!=typeof DOMParser){var f=new DOMParser;f&&f.parseFromString&&(e=f.parseFromString(a,"text/xml"))}else b.window.ActiveXObject&&(e=new ActiveXObject("Microsoft.XMLDOM"),e.async="false",e.loadXML(a.replace(/<!DOCTYPE[\s\S]*?(\[[\s\S]*\])*?>/i,"")));b.parseSVGDocument(e.documentElement,function(a,b){c(a,b)},d)},createSVGFontFacesMarkup:function(a){for(var b="",c=0,d=a.length;c<d;c++)"text"===a[c].type&&a[c].path&&(b+=["@font-face {","font-family: ",a[c].fontFamily,"; ","src: url('",a[c].path,"')","}"].join(""));return b&&(b=['<style type="text/css">',"<![CDATA[",b,"]]>","</style>"].join("")),b},createSVGRefElementsMarkup:function(a){var b=[];return D(b,a,"backgroundColor"),D(b,a,"overlayColor"),b.join("")}})}("undefined"!=typeof exports?exports:this),fabric.ElementsParser=function(a,b,c,d){this.elements=a,this.callback=b,this.options=c,this.reviver=d,this.svgUid=c&&c.svgUid||0},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var a=0,b=this.elements.length;a<b;a++)this.elements[a].setAttribute("svgUid",this.svgUid),function(a,b){setTimeout(function(){a.createObject(a.elements[b],b)},0)}(this,a)},fabric.ElementsParser.prototype.createObject=function(a,b){var c=fabric[fabric.util.string.capitalize(a.tagName)];if(c&&c.fromElement)try{this._createObject(c,a,b)}catch(a){fabric.log(a)}else this.checkIfDone()},fabric.ElementsParser.prototype._createObject=function(a,b,c){if(a.async)a.fromElement(b,this.createCallback(c,b),this.options);else{var d=a.fromElement(b,this.options);this.resolveGradient(d,"fill"),this.resolveGradient(d,"stroke"),this.reviver&&this.reviver(b,d),this.instances[c]=d,this.checkIfDone()}},fabric.ElementsParser.prototype.createCallback=function(a,b){var c=this;return function(d){c.resolveGradient(d,"fill"),c.resolveGradient(d,"stroke"),c.reviver&&c.reviver(b,d),c.instances[a]=d,c.checkIfDone()}},fabric.ElementsParser.prototype.resolveGradient=function(a,b){var c=a.get(b);if(/^url\(/.test(c)){var d=c.slice(5,c.length-1);fabric.gradientDefs[this.svgUid][d]&&a.set(b,fabric.Gradient.fromElement(fabric.gradientDefs[this.svgUid][d],a))}},fabric.ElementsParser.prototype.checkIfDone=function(){0===--this.numElements&&(this.instances=this.instances.filter(function(a){return null!=a}),this.callback(this.instances))},function(a){"use strict";function c(a,b){this.x=a,this.y=b}var b=a.fabric||(a.fabric={});return b.Point?void b.warn("fabric.Point is already defined"):(b.Point=c,void(c.prototype={constructor:c,add:function(a){return new c(this.x+a.x,this.y+a.y)},addEquals:function(a){return this.x+=a.x,this.y+=a.y,this},scalarAdd:function(a){return new c(this.x+a,this.y+a)},scalarAddEquals:function(a){return this.x+=a,this.y+=a,this},subtract:function(a){return new c(this.x-a.x,this.y-a.y)},subtractEquals:function(a){return this.x-=a.x,this.y-=a.y,this},scalarSubtract:function(a){return new c(this.x-a,this.y-a)},scalarSubtractEquals:function(a){return this.x-=a,this.y-=a,this},multiply:function(a){return new c(this.x*a,this.y*a)},multiplyEquals:function(a){return this.x*=a,this.y*=a,this},divide:function(a){return new c(this.x/a,this.y/a)},divideEquals:function(a){return this.x/=a,this.y/=a,this},eq:function(a){return this.x===a.x&&this.y===a.y},lt:function(a){return this.x<a.x&&this.y<a.y},lte:function(a){return this.x<=a.x&&this.y<=a.y},gt:function(a){return this.x>a.x&&this.y>a.y},gte:function(a){return this.x>=a.x&&this.y>=a.y},lerp:function(a,b){return new c(this.x+(a.x-this.x)*b,this.y+(a.y-this.y)*b)},distanceFrom:function(a){var b=this.x-a.x,c=this.y-a.y;return Math.sqrt(b*b+c*c)},midPointFrom:function(a){return new c(this.x+(a.x-this.x)/2,this.y+(a.y-this.y)/2)},min:function(a){return new c(Math.min(this.x,a.x),Math.min(this.y,a.y))},max:function(a){return new c(Math.max(this.x,a.x),Math.max(this.y,a.y))},toString:function(){return this.x+","+this.y},setXY:function(a,b){this.x=a,this.y=b},setFromPoint:function(a){this.x=a.x,this.y=a.y},swap:function(a){var b=this.x,c=this.y;this.x=a.x,this.y=a.y,a.x=b,a.y=c}}))}("undefined"!=typeof exports?exports:this),function(a){"use strict";function c(a){this.status=a,this.points=[]}var b=a.fabric||(a.fabric={});return b.Intersection?void b.warn("fabric.Intersection is already defined"):(b.Intersection=c,b.Intersection.prototype={appendPoint:function(a){this.points.push(a)},appendPoints:function(a){this.points=this.points.concat(a)}},b.Intersection.intersectLineLine=function(a,d,e,f){var g,h=(f.x-e.x)*(a.y-e.y)-(f.y-e.y)*(a.x-e.x),i=(d.x-a.x)*(a.y-e.y)-(d.y-a.y)*(a.x-e.x),j=(f.y-e.y)*(d.x-a.x)-(f.x-e.x)*(d.y-a.y);if(0!==j){var k=h/j,l=i/j;0<=k&&k<=1&&0<=l&&l<=1?(g=new c("Intersection"),g.points.push(new b.Point(a.x+k*(d.x-a.x),a.y+k*(d.y-a.y)))):g=new c}else g=new c(0===h||0===i?"Coincident":"Parallel");return g},b.Intersection.intersectLinePolygon=function(a,b,d){for(var e=new c,f=d.length,g=0;g<f;g++){var h=d[g],i=d[(g+1)%f],j=c.intersectLineLine(a,b,h,i);e.appendPoints(j.points)}return e.points.length>0&&(e.status="Intersection"),e},b.Intersection.intersectPolygonPolygon=function(a,b){for(var d=new c,e=a.length,f=0;f<e;f++){var g=a[f],h=a[(f+1)%e],i=c.intersectLinePolygon(g,h,b);d.appendPoints(i.points)}return d.points.length>0&&(d.status="Intersection"),d},void(b.Intersection.intersectPolygonRectangle=function(a,d,e){var f=d.min(e),g=d.max(e),h=new b.Point(g.x,f.y),i=new b.Point(f.x,g.y),j=c.intersectLinePolygon(f,h,a),k=c.intersectLinePolygon(h,g,a),l=c.intersectLinePolygon(g,i,a),m=c.intersectLinePolygon(i,f,a),n=new c;return n.appendPoints(j.points),n.appendPoints(k.points),n.appendPoints(l.points),n.appendPoints(m.points),n.points.length>0&&(n.status="Intersection"),n}))}("undefined"!=typeof exports?exports:this),function(a){"use strict";function c(a){a?this._tryParsingColor(a):this.setSource([0,0,0,1])}function d(a,b,c){return c<0&&(c+=1),c>1&&(c-=1),c<1/6?a+6*(b-a)*c:c<.5?b:c<2/3?a+(b-a)*(2/3-c)*6:a}var b=a.fabric||(a.fabric={});return b.Color?void b.warn("fabric.Color is already defined."):(b.Color=c,b.Color.prototype={_tryParsingColor:function(a){var b;return a in c.colorNameMap&&(a=c.colorNameMap[a]),"transparent"===a?void this.setSource([255,255,255,0]):(b=c.sourceFromHex(a),b||(b=c.sourceFromRgb(a)),b||(b=c.sourceFromHsl(a)),void(b&&this.setSource(b)))},_rgbToHsl:function(a,c,d){a/=255,c/=255,d/=255;var e,f,g,h=b.util.array.max([a,c,d]),i=b.util.array.min([a,c,d]);if(g=(h+i)/2,h===i)e=f=0;else{var j=h-i;switch(f=g>.5?j/(2-h-i):j/(h+i),h){case a:e=(c-d)/j+(c<d?6:0);break;case c:e=(d-a)/j+2;break;case d:e=(a-c)/j+4}e/=6}return[Math.round(360*e),Math.round(100*f),Math.round(100*g)]},getSource:function(){return this._source},setSource:function(a){this._source=a},toRgb:function(){var a=this.getSource();return"rgb("+a[0]+","+a[1]+","+a[2]+")"},toRgba:function(){var a=this.getSource();return"rgba("+a[0]+","+a[1]+","+a[2]+","+a[3]+")"},toHsl:function(){var a=this.getSource(),b=this._rgbToHsl(a[0],a[1],a[2]);return"hsl("+b[0]+","+b[1]+"%,"+b[2]+"%)"},toHsla:function(){var a=this.getSource(),b=this._rgbToHsl(a[0],a[1],a[2]);return"hsla("+b[0]+","+b[1]+"%,"+b[2]+"%,"+a[3]+")"},toHex:function(){var b,c,d,a=this.getSource();return b=a[0].toString(16),b=1===b.length?"0"+b:b,c=a[1].toString(16),c=1===c.length?"0"+c:c,d=a[2].toString(16),d=1===d.length?"0"+d:d,b.toUpperCase()+c.toUpperCase()+d.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(a){var b=this.getSource();return b[3]=a,this.setSource(b),this},toGrayscale:function(){var a=this.getSource(),b=parseInt((.3*a[0]+.59*a[1]+.11*a[2]).toFixed(0),10),c=a[3];return this.setSource([b,b,b,c]),this},toBlackWhite:function(a){var b=this.getSource(),c=(.3*b[0]+.59*b[1]+.11*b[2]).toFixed(0),d=b[3];return a=a||127,c=Number(c)<Number(a)?0:255,this.setSource([c,c,c,d]),this},overlayWith:function(a){a instanceof c||(a=new c(a));for(var b=[],d=this.getAlpha(),e=.5,f=this.getSource(),g=a.getSource(),h=0;h<3;h++)b.push(Math.round(f[h]*(1-e)+g[h]*e));return b[3]=d,this.setSource(b),this}},b.Color.reRGBa=/^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/,b.Color.reHSLa=/^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/,b.Color.reHex=/^#?([0-9a-f]{6}|[0-9a-f]{3})$/i,b.Color.colorNameMap={aqua:"#00FFFF",black:"#000000",blue:"#0000FF",fuchsia:"#FF00FF",gray:"#808080",green:"#008000",lime:"#00FF00",maroon:"#800000",navy:"#000080",olive:"#808000",orange:"#FFA500",purple:"#800080",red:"#FF0000",silver:"#C0C0C0",teal:"#008080",white:"#FFFFFF",yellow:"#FFFF00"},b.Color.fromRgb=function(a){return c.fromSource(c.sourceFromRgb(a))},b.Color.sourceFromRgb=function(a){var b=a.match(c.reRGBa);if(b){var d=parseInt(b[1],10)/(/%$/.test(b[1])?100:1)*(/%$/.test(b[1])?255:1),e=parseInt(b[2],10)/(/%$/.test(b[2])?100:1)*(/%$/.test(b[2])?255:1),f=parseInt(b[3],10)/(/%$/.test(b[3])?100:1)*(/%$/.test(b[3])?255:1);return[parseInt(d,10),parseInt(e,10),parseInt(f,10),b[4]?parseFloat(b[4]):1]}},b.Color.fromRgba=c.fromRgb,b.Color.fromHsl=function(a){return c.fromSource(c.sourceFromHsl(a))},b.Color.sourceFromHsl=function(a){var b=a.match(c.reHSLa);if(b){var h,i,j,e=(parseFloat(b[1])%360+360)%360/360,f=parseFloat(b[2])/(/%$/.test(b[2])?100:1),g=parseFloat(b[3])/(/%$/.test(b[3])?100:1);if(0===f)h=i=j=g;else{var k=g<=.5?g*(f+1):g+f-g*f,l=2*g-k;h=d(l,k,e+1/3),i=d(l,k,e),j=d(l,k,e-1/3)}return[Math.round(255*h),Math.round(255*i),Math.round(255*j),b[4]?parseFloat(b[4]):1]}},b.Color.fromHsla=c.fromHsl,b.Color.fromHex=function(a){return c.fromSource(c.sourceFromHex(a))},b.Color.sourceFromHex=function(a){if(a.match(c.reHex)){var b=a.slice(a.indexOf("#")+1),d=3===b.length,e=d?b.charAt(0)+b.charAt(0):b.substring(0,2),f=d?b.charAt(1)+b.charAt(1):b.substring(2,4),g=d?b.charAt(2)+b.charAt(2):b.substring(4,6);return[parseInt(e,16),parseInt(f,16),parseInt(g,16),1]}},void(b.Color.fromSource=function(a){var b=new c;return b.setSource(a),b}))}("undefined"!=typeof exports?exports:this),function(){function a(a){var d,e,f,b=a.getAttribute("style"),c=a.getAttribute("offset");if(c=parseFloat(c)/(/%$/.test(c)?100:1),c=c<0?0:c>1?1:c,b){var g=b.split(/\s*;\s*/);""===g[g.length-1]&&g.pop();for(var h=g.length;h--;){var i=g[h].split(/\s*:\s*/),j=i[0].trim(),k=i[1].trim();"stop-color"===j?d=k:"stop-opacity"===j&&(f=k)}}return d||(d=a.getAttribute("stop-color")||"rgb(0,0,0)"),f||(f=a.getAttribute("stop-opacity")),d=new fabric.Color(d),e=d.getAlpha(),f=isNaN(parseFloat(f))?1:parseFloat(f),f*=e,{offset:c,color:d.toRgb(),opacity:f}}function b(a){return{x1:a.getAttribute("x1")||0,y1:a.getAttribute("y1")||0,x2:a.getAttribute("x2")||"100%",y2:a.getAttribute("y2")||0}}function c(a){return{x1:a.getAttribute("fx")||a.getAttribute("cx")||"50%",y1:a.getAttribute("fy")||a.getAttribute("cy")||"50%",r1:0,x2:a.getAttribute("cx")||"50%",y2:a.getAttribute("cy")||"50%",r2:a.getAttribute("r")||"50%"}}function d(a,b,c){var d,e=0,f=1,g="";for(var h in b)d=parseFloat(b[h],10),f="string"==typeof b[h]&&/^\d+%$/.test(b[h])?.01:1,"x1"===h||"x2"===h||"r2"===h?(f*="objectBoundingBox"===c?a.width:1,e="objectBoundingBox"===c?a.left||0:0):"y1"!==h&&"y2"!==h||(f*="objectBoundingBox"===c?a.height:1,e="objectBoundingBox"===c?a.top||0:0),b[h]=d*f+e;if("ellipse"===a.type&&null!==b.r2&&"objectBoundingBox"===c&&a.rx!==a.ry){var i=a.ry/a.rx;g=" scale(1, "+i+")",b.y1&&(b.y1/=i),b.y2&&(b.y2/=i)}return g}fabric.Gradient=fabric.util.createClass({offsetX:0,offsetY:0,initialize:function(a){a||(a={});var b={};this.id=fabric.Object.__uid++,this.type=a.type||"linear",b={x1:a.coords.x1||0,y1:a.coords.y1||0,x2:a.coords.x2||0,y2:a.coords.y2||0},"radial"===this.type&&(b.r1=a.coords.r1||0,b.r2=a.coords.r2||0),this.coords=b,this.colorStops=a.colorStops.slice(),a.gradientTransform&&(this.gradientTransform=a.gradientTransform),this.offsetX=a.offsetX||this.offsetX,this.offsetY=a.offsetY||this.offsetY},addColorStop:function(a){for(var b in a){var c=new fabric.Color(a[b]);this.colorStops.push({offset:b,color:c.toRgb(),opacity:c.getAlpha()})}return this},toObject:function(){return{type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(a){var c,d,b=fabric.util.object.clone(this.coords);if(this.colorStops.sort(function(a,b){return a.offset-b.offset}),!a.group||"path-group"!==a.group.type)for(var e in b)"x1"===e||"x2"===e||"r2"===e?b[e]+=this.offsetX-a.width/2:"y1"!==e&&"y2"!==e||(b[e]+=this.offsetY-a.height/2);d='id="SVGID_'+this.id+'" gradientUnits="userSpaceOnUse"',this.gradientTransform&&(d+=' gradientTransform="matrix('+this.gradientTransform.join(" ")+')" '),"linear"===this.type?c=["<linearGradient ",d,' x1="',b.x1,'" y1="',b.y1,'" x2="',b.x2,'" y2="',b.y2,'">\n']:"radial"===this.type&&(c=["<radialGradient ",d,' cx="',b.x2,'" cy="',b.y2,'" r="',b.r2,'" fx="',b.x1,'" fy="',b.y1,'">\n']);for(var f=0;f<this.colorStops.length;f++)c.push("<stop ",'offset="',100*this.colorStops[f].offset+"%",'" style="stop-color:',this.colorStops[f].color,null!=this.colorStops[f].opacity?";stop-opacity: "+this.colorStops[f].opacity:";",'"/>\n');return c.push("linear"===this.type?"</linearGradient>\n":"</radialGradient>\n"),c.join("")},toLive:function(a,b){var c,d,e=fabric.util.object.clone(this.coords);if(this.type){if(b.group&&"path-group"===b.group.type)for(d in e)"x1"===d||"x2"===d?e[d]+=-this.offsetX+b.width/2:"y1"!==d&&"y2"!==d||(e[d]+=-this.offsetY+b.height/2);"linear"===this.type?c=a.createLinearGradient(e.x1,e.y1,e.x2,e.y2):"radial"===this.type&&(c=a.createRadialGradient(e.x1,e.y1,e.r1,e.x2,e.y2,e.r2));for(var f=0,g=this.colorStops.length;f<g;f++){var h=this.colorStops[f].color,i=this.colorStops[f].opacity,j=this.colorStops[f].offset;"undefined"!=typeof i&&(h=new fabric.Color(h).setAlpha(i).toRgba()),c.addColorStop(parseFloat(j),h)}return c}}}),fabric.util.object.extend(fabric.Gradient,{fromElement:function(e,f){var m,g=e.getElementsByTagName("stop"),h="linearGradient"===e.nodeName?"linear":"radial",i=e.getAttribute("gradientUnits")||"objectBoundingBox",j=e.getAttribute("gradientTransform"),k=[],l={};"linear"===h?l=b(e):"radial"===h&&(l=c(e));for(var n=g.length;n--;)k.push(a(g[n]));m=d(f,l,i);var o=new fabric.Gradient({type:h,coords:l,colorStops:k,offsetX:-f.left,offsetY:-f.top});return(j||""!==m)&&(o.gradientTransform=fabric.parseTransformAttribute((j||"")+m)),o},forObject:function(a,b){return b||(b={}),d(a,b.coords,"userSpaceOnUse"),new fabric.Gradient(b)}})}(),fabric.Pattern=fabric.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,initialize:function(a){if(a||(a={}),this.id=fabric.Object.__uid++,a.source)if("string"==typeof a.source)if("undefined"!=typeof fabric.util.getFunctionBody(a.source))this.source=new Function(fabric.util.getFunctionBody(a.source));else{var b=this;this.source=fabric.util.createImage(),fabric.util.loadImage(a.source,function(a){b.source=a})}else this.source=a.source;a.repeat&&(this.repeat=a.repeat),a.offsetX&&(this.offsetX=a.offsetX),a.offsetY&&(this.offsetY=a.offsetY)},toObject:function(){var a;return"function"==typeof this.source?a=String(this.source):"string"==typeof this.source.src?a=this.source.src:"object"==typeof this.source&&this.source.toDataURL&&(a=this.source.toDataURL()),{source:a,repeat:this.repeat,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(a){var b="function"==typeof this.source?this.source():this.source,c=b.width/a.getWidth(),d=b.height/a.getHeight(),e=this.offsetX/a.getWidth(),f=this.offsetY/a.getHeight(),g="";return"repeat-x"!==this.repeat&&"no-repeat"!==this.repeat||(d=1),"repeat-y"!==this.repeat&&"no-repeat"!==this.repeat||(c=1),b.src?g=b.src:b.toDataURL&&(g=b.toDataURL()),'<pattern id="SVGID_'+this.id+'" x="'+e+'" y="'+f+'" width="'+c+'" height="'+d+'">\n<image x="0" y="0" width="'+b.width+'" height="'+b.height+'" xlink:href="'+g+'"></image>\n</pattern>\n'},toLive:function(a){var b="function"==typeof this.source?this.source():this.source;if(!b)return"";if("undefined"!=typeof b.src){if(!b.complete)return"";if(0===b.naturalWidth||0===b.naturalHeight)return""}return a.createPattern(b,this.repeat)}}),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.toFixed;return b.Shadow?void b.warn("fabric.Shadow is already defined."):(b.Shadow=b.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(a){"string"==typeof a&&(a=this._parseShadow(a));for(var c in a)this[c]=a[c];this.id=b.Object.__uid++},_parseShadow:function(a){var c=a.trim(),d=b.Shadow.reOffsetsAndBlur.exec(c)||[],e=c.replace(b.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:e.trim(),offsetX:parseInt(d[1],10)||0,offsetY:parseInt(d[2],10)||0,blur:parseInt(d[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(a){var b=40,d=40;return a.width&&a.height&&(b=100*c((Math.abs(this.offsetX)+this.blur)/a.width,2)+20,d=100*c((Math.abs(this.offsetY)+this.blur)/a.height,2)+20),'<filter id="SVGID_'+this.id+'" y="-'+d+'%" height="'+(100+2*d)+'%" x="-'+b+'%" width="'+(100+2*b)+'%" >\n\t<feGaussianBlur in="SourceAlpha" stdDeviation="'+c(this.blur?this.blur/2:0,3)+'"></feGaussianBlur>\n\t<feOffset dx="'+this.offsetX+'" dy="'+this.offsetY+'" result="oBlur" ></feOffset>\n\t<feFlood flood-color="'+this.color+'"/>\n\t<feComposite in2="oBlur" operator="in" />\n\t<feMerge>\n\t\t<feMergeNode></feMergeNode>\n\t\t<feMergeNode in="SourceGraphic"></feMergeNode>\n\t</feMerge>\n</filter>\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var a={},c=b.Shadow.prototype;return this.color!==c.color&&(a.color=this.color),this.blur!==c.blur&&(a.blur=this.blur),this.offsetX!==c.offsetX&&(a.offsetX=this.offsetX),this.offsetY!==c.offsetY&&(a.offsetY=this.offsetY),a}}),void(b.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/))}("undefined"!=typeof exports?exports:this),function(){"use strict";if(fabric.StaticCanvas)return void fabric.warn("fabric.StaticCanvas is already defined.");var a=fabric.util.object.extend,b=fabric.util.getElementOffset,c=fabric.util.removeFromArray,d=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(a,b){b||(b={}),this._initStatic(a,b),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,preserveObjectStacking:!1,viewportTransform:[1,0,0,1,0,0],onBeforeScaleRotate:function(){},enableRetinaScaling:!0,_initStatic:function(a,b){this._objects=[],this._createLowerCanvas(a),this._initOptions(b),this._setImageSmoothing(),this.interactive||this._initRetinaScaling(),b.overlayImage&&this.setOverlayImage(b.overlayImage,this.renderAll.bind(this)),b.backgroundImage&&this.setBackgroundImage(b.backgroundImage,this.renderAll.bind(this)),b.backgroundColor&&this.setBackgroundColor(b.backgroundColor,this.renderAll.bind(this)),b.overlayColor&&this.setOverlayColor(b.overlayColor,this.renderAll.bind(this)),this.calcOffset()},_initRetinaScaling:function(){1!==fabric.devicePixelRatio&&this.enableRetinaScaling&&(this.lowerCanvasEl.setAttribute("width",this.width*fabric.devicePixelRatio),this.lowerCanvasEl.setAttribute("height",this.height*fabric.devicePixelRatio),this.contextContainer.scale(fabric.devicePixelRatio,fabric.devicePixelRatio))},calcOffset:function(){return this._offset=b(this.lowerCanvasEl),this},setOverlayImage:function(a,b,c){return this.__setBgOverlayImage("overlayImage",a,b,c)},setBackgroundImage:function(a,b,c){return this.__setBgOverlayImage("backgroundImage",a,b,c)},setOverlayColor:function(a,b){return this.__setBgOverlayColor("overlayColor",a,b)},setBackgroundColor:function(a,b){return this.__setBgOverlayColor("backgroundColor",a,b)},_setImageSmoothing:function(){var a=this.getContext();return"undefined"!=typeof a.imageSmoothingEnabled?void(a.imageSmoothingEnabled=this.imageSmoothingEnabled):(a.webkitImageSmoothingEnabled=this.imageSmoothingEnabled,a.mozImageSmoothingEnabled=this.imageSmoothingEnabled,a.msImageSmoothingEnabled=this.imageSmoothingEnabled,void(a.oImageSmoothingEnabled=this.imageSmoothingEnabled))},__setBgOverlayImage:function(a,b,c,d){return"string"==typeof b?fabric.util.loadImage(b,function(b){this[a]=new fabric.Image(b,d),c&&c()},this,d&&d.crossOrigin):(d&&b.setOptions(d),this[a]=b,c&&c()),this},__setBgOverlayColor:function(a,b,c){if(b&&b.source){var d=this;fabric.util.loadImage(b.source,function(e){d[a]=new fabric.Pattern({source:e,repeat:b.repeat,offsetX:b.offsetX,offsetY:b.offsetY}),c&&c()})}else this[a]=b,c&&c();return this},_createCanvasElement:function(){var a=fabric.document.createElement("canvas");if(a.style||(a.style={}),!a)throw d;return this._initCanvasElement(a),a},_initCanvasElement:function(a){if(fabric.util.createCanvasElement(a),"undefined"==typeof a.getContext)throw d},_initOptions:function(a){for(var b in a)this[b]=a[b];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0,this.lowerCanvasEl.style&&(this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(a){this.lowerCanvasEl=fabric.util.getById(a)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(a,b){return this.setDimensions({width:a},b)},setHeight:function(a,b){return this.setDimensions({height:a},b)},setDimensions:function(a,b){var c;b=b||{};for(var d in a)c=a[d],b.cssOnly||(this._setBackstoreDimension(d,a[d]),c+="px"),b.backstoreOnly||this._setCssDimension(d,c);return this._setImageSmoothing(),this.calcOffset(),b.cssOnly||this.renderAll(),this},_setBackstoreDimension:function(a,b){return this.lowerCanvasEl[a]=b,this.upperCanvasEl&&(this.upperCanvasEl[a]=b),this.cacheCanvasEl&&(this.cacheCanvasEl[a]=b),this[a]=b,this},_setCssDimension:function(a,b){return this.lowerCanvasEl.style[a]=b,this.upperCanvasEl&&(this.upperCanvasEl.style[a]=b),this.wrapperEl&&(this.wrapperEl.style[a]=b),this},getZoom:function(){return Math.sqrt(this.viewportTransform[0]*this.viewportTransform[3])},setViewportTransform:function(a){var b=this.getActiveGroup();this.viewportTransform=a,this.renderAll();for(var c=0,d=this._objects.length;c<d;c++)this._objects[c].setCoords();return b&&b.setCoords(),this},zoomToPoint:function(a,b){var c=a;a=fabric.util.transformPoint(a,fabric.util.invertTransform(this.viewportTransform)),this.viewportTransform[0]=b,this.viewportTransform[3]=b;var d=fabric.util.transformPoint(a,this.viewportTransform);this.viewportTransform[4]+=c.x-d.x,this.viewportTransform[5]+=c.y-d.y,this.renderAll();for(var e=0,f=this._objects.length;e<f;e++)this._objects[e].setCoords();return this},setZoom:function(a){return this.zoomToPoint(new fabric.Point(0,0),a),this},absolutePan:function(a){this.viewportTransform[4]=-a.x,this.viewportTransform[5]=-a.y,this.renderAll();for(var b=0,c=this._objects.length;b<c;b++)this._objects[b].setCoords();return this},relativePan:function(a){return this.absolutePan(new fabric.Point(-a.x-this.viewportTransform[4],-a.y-this.viewportTransform[5]))},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(a,b){if(b){a.save();var c=this.viewportTransform;a.transform(c[0],c[1],c[2],c[3],c[4],c[5]),this._shouldRenderObject(b)&&b.render(a),a.restore(),this.controlsAboveOverlay||b._renderControls(a)}},_shouldRenderObject:function(a){return!!a&&(a!==this.getActiveGroup()||!this.preserveObjectStacking)},_onObjectAdded:function(a){this.stateful&&a.setupState(),a._set("canvas",this),a.setCoords(),this.fire("object:added",{target:a}),a.fire("added")},_onObjectRemoved:function(a){this.getActiveObject()===a&&(this.fire("before:selection:cleared",{target:a}),this._discardActiveObject(),this.fire("selection:cleared")),this.fire("object:removed",{target:a}),a.fire("removed")},clearContext:function(a){return a.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(a){var b=this[a===!0&&this.interactive?"contextTop":"contextContainer"],c=this.getActiveGroup();return this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),a||this.clearContext(b),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,b),this._renderBackground(b),this._renderObjects(b,c),this._renderActiveGroup(b,c),this.clipTo&&b.restore(),this._renderOverlay(b),this.controlsAboveOverlay&&this.interactive&&this.drawControls(b),this.fire("after:render"),this},_renderObjects:function(a,b){var c,d;if(!b||this.preserveObjectStacking)for(c=0,d=this._objects.length;c<d;++c)this._draw(a,this._objects[c]);else for(c=0,d=this._objects.length;c<d;++c)this._objects[c]&&!b.contains(this._objects[c])&&this._draw(a,this._objects[c])},_renderActiveGroup:function(a,b){if(b){var c=[];this.forEachObject(function(a){b.contains(a)&&c.push(a)}),b._set("_objects",c.reverse()),this._draw(a,b)}},_renderBackground:function(a){this.backgroundColor&&(a.fillStyle=this.backgroundColor.toLive?this.backgroundColor.toLive(a):this.backgroundColor,a.fillRect(this.backgroundColor.offsetX||0,this.backgroundColor.offsetY||0,this.width,this.height)),this.backgroundImage&&this._draw(a,this.backgroundImage)},_renderOverlay:function(a){this.overlayColor&&(a.fillStyle=this.overlayColor.toLive?this.overlayColor.toLive(a):this.overlayColor,a.fillRect(this.overlayColor.offsetX||0,this.overlayColor.offsetY||0,this.width,this.height)),this.overlayImage&&this._draw(a,this.overlayImage)},renderTop:function(){var a=this.contextTop||this.contextContainer;this.clearContext(a),this.selection&&this._groupSelector&&this._drawSelection();var b=this.getActiveGroup();return b&&b.render(a),this._renderOverlay(a),this.fire("after:render"),this},getCenter:function(){return{top:this.getHeight()/2,left:this.getWidth()/2}},centerObjectH:function(a){return this._centerObject(a,new fabric.Point(this.getCenter().left,a.getCenterPoint().y)),this.renderAll(),this},centerObjectV:function(a){return this._centerObject(a,new fabric.Point(a.getCenterPoint().x,this.getCenter().top)),this.renderAll(),this},centerObject:function(a){var b=this.getCenter();return this._centerObject(a,new fabric.Point(b.left,b.top)),this.renderAll(),this},_centerObject:function(a,b){return a.setPositionByOrigin(b,"center","center"),this},toDatalessJSON:function(a){return this.toDatalessObject(a)},toObject:function(a){return this._toObjectMethod("toObject",a)},toDatalessObject:function(a){return this._toObjectMethod("toDatalessObject",a)},_toObjectMethod:function(b,c){var d={objects:this._toObjects(b,c)};return a(d,this.__serializeBgOverlay()),fabric.util.populateWithProperties(this,d,c),d},_toObjects:function(a,b){return this.getObjects().map(function(c){return this._toObject(c,a,b)},this)},_toObject:function(a,b,c){var d;this.includeDefaultValues||(d=a.includeDefaultValues,a.includeDefaultValues=!1);var e=this._realizeGroupTransformOnObject(a),f=a[b](c);return this.includeDefaultValues||(a.includeDefaultValues=d),this._unwindGroupTransformOnObject(a,e),f},_realizeGroupTransformOnObject:function(a){var b=["angle","flipX","flipY","height","left","scaleX","scaleY","top","width"];if(a.group&&a.group===this.getActiveGroup()){var c={};return b.forEach(function(b){c[b]=a[b]}),this.getActiveGroup().realizeTransform(a),c}return null},_unwindGroupTransformOnObject:function(a,b){b&&a.set(b)},__serializeBgOverlay:function(){var a={background:this.backgroundColor&&this.backgroundColor.toObject?this.backgroundColor.toObject():this.backgroundColor};return this.overlayColor&&(a.overlay=this.overlayColor.toObject?this.overlayColor.toObject():this.overlayColor),this.backgroundImage&&(a.backgroundImage=this.backgroundImage.toObject()),this.overlayImage&&(a.overlayImage=this.overlayImage.toObject()),a},svgViewportTransformation:!0,toSVG:function(a,b){a||(a={});var c=[];return this._setSVGPreamble(c,a),this._setSVGHeader(c,a),this._setSVGBgOverlayColor(c,"backgroundColor"),this._setSVGBgOverlayImage(c,"backgroundImage"),this._setSVGObjects(c,b),this._setSVGBgOverlayColor(c,"overlayColor"),this._setSVGBgOverlayImage(c,"overlayImage"),c.push("</svg>"),c.join("")},_setSVGPreamble:function(a,b){b.suppressPreamble||a.push('<?xml version="1.0" encoding="',b.encoding||"UTF-8",'" standalone="no" ?>','<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ','"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n');
},_setSVGHeader:function(a,b){var c,d,e;b.viewBox?(c=b.viewBox.width,d=b.viewBox.height):(c=this.width,d=this.height,this.svgViewportTransformation||(e=this.viewportTransform,c/=e[0],d/=e[3])),a.push("<svg ",'xmlns="http://www.w3.org/2000/svg" ','xmlns:xlink="http://www.w3.org/1999/xlink" ','version="1.1" ','width="',c,'" ','height="',d,'" ',this.backgroundColor&&!this.backgroundColor.toLive?'style="background-color: '+this.backgroundColor+'" ':null,b.viewBox?'viewBox="'+b.viewBox.x+" "+b.viewBox.y+" "+b.viewBox.width+" "+b.viewBox.height+'" ':null,'xml:space="preserve">',"<desc>Created with Fabric.js ",fabric.version,"</desc>","<defs>",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"</defs>")},_setSVGObjects:function(a,b){for(var c=0,d=this.getObjects(),e=d.length;c<e;c++){var f=d[c],g=this._realizeGroupTransformOnObject(f);a.push(f.toSVG(b)),this._unwindGroupTransformOnObject(f,g)}},_setSVGBgOverlayImage:function(a,b){this[b]&&this[b].toSVG&&a.push(this[b].toSVG())},_setSVGBgOverlayColor:function(a,b){this[b]&&this[b].source?a.push('<rect x="',this[b].offsetX,'" y="',this[b].offsetY,'" ','width="',"repeat-y"===this[b].repeat||"no-repeat"===this[b].repeat?this[b].source.width:this.width,'" height="',"repeat-x"===this[b].repeat||"no-repeat"===this[b].repeat?this[b].source.height:this.height,'" fill="url(#'+b+'Pattern)"',"></rect>"):this[b]&&"overlayColor"===b&&a.push('<rect x="0" y="0" ','width="',this.width,'" height="',this.height,'" fill="',this[b],'"',"></rect>")},sendToBack:function(a){return c(this._objects,a),this._objects.unshift(a),this.renderAll&&this.renderAll()},bringToFront:function(a){return c(this._objects,a),this._objects.push(a),this.renderAll&&this.renderAll()},sendBackwards:function(a,b){var d=this._objects.indexOf(a);if(0!==d){var e=this._findNewLowerIndex(a,d,b);c(this._objects,a),this._objects.splice(e,0,a),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(a,b,c){var d;if(c){d=b;for(var e=b-1;e>=0;--e){var f=a.intersectsWithObject(this._objects[e])||a.isContainedWithinObject(this._objects[e])||this._objects[e].isContainedWithinObject(a);if(f){d=e;break}}}else d=b-1;return d},bringForward:function(a,b){var d=this._objects.indexOf(a);if(d!==this._objects.length-1){var e=this._findNewUpperIndex(a,d,b);c(this._objects,a),this._objects.splice(e,0,a),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(a,b,c){var d;if(c){d=b;for(var e=b+1;e<this._objects.length;++e){var f=a.intersectsWithObject(this._objects[e])||a.isContainedWithinObject(this._objects[e])||this._objects[e].isContainedWithinObject(a);if(f){d=e;break}}}else d=b+1;return d},moveTo:function(a,b){return c(this._objects,a),this._objects.splice(b,0,a),this.renderAll&&this.renderAll()},dispose:function(){return this.clear(),this.interactive&&this.removeListeners(),this},toString:function(){return"#<fabric.Canvas ("+this.complexity()+"): { objects: "+this.getObjects().length+" }>"}}),a(fabric.StaticCanvas.prototype,fabric.Observable),a(fabric.StaticCanvas.prototype,fabric.Collection),a(fabric.StaticCanvas.prototype,fabric.DataURLExporter),a(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(a){var b=fabric.util.createCanvasElement();if(!b||!b.getContext)return null;var c=b.getContext("2d");if(!c)return null;switch(a){case"getImageData":return"undefined"!=typeof c.getImageData;case"setLineDash":return"undefined"!=typeof c.setLineDash;case"toDataURL":return"undefined"!=typeof b.toDataURL;case"toDataURLWithQuality":try{return b.toDataURL("image/jpeg",0),!0}catch(a){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeDashArray:null,setShadow:function(a){return this.shadow=new fabric.Shadow(a),this},_setBrushStyles:function(){var a=this.canvas.contextTop;a.strokeStyle=this.color,a.lineWidth=this.width,a.lineCap=this.strokeLineCap,a.lineJoin=this.strokeLineJoin,this.strokeDashArray&&fabric.StaticCanvas.supports("setLineDash")&&a.setLineDash(this.strokeDashArray)},_setShadow:function(){if(this.shadow){var a=this.canvas.contextTop;a.shadowColor=this.shadow.color,a.shadowBlur=this.shadow.blur,a.shadowOffsetX=this.shadow.offsetX,a.shadowOffsetY=this.shadow.offsetY}},_resetShadow:function(){var a=this.canvas.contextTop;a.shadowColor="",a.shadowBlur=a.shadowOffsetX=a.shadowOffsetY=0}}),function(){fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(a){this.canvas=a,this._points=[]},onMouseDown:function(a){this._prepareForDrawing(a),this._captureDrawingPath(a),this._render()},onMouseMove:function(a){this._captureDrawingPath(a),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(a){var b=new fabric.Point(a.x,a.y);this._reset(),this._addPoint(b),this.canvas.contextTop.moveTo(b.x,b.y)},_addPoint:function(a){this._points.push(a)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(a){var b=new fabric.Point(a.x,a.y);this._addPoint(b)},_render:function(){var a=this.canvas.contextTop,b=this.canvas.viewportTransform,c=this._points[0],d=this._points[1];a.save(),a.transform(b[0],b[1],b[2],b[3],b[4],b[5]),a.beginPath(),2===this._points.length&&c.x===d.x&&c.y===d.y&&(c.x-=.5,d.x+=.5),a.moveTo(c.x,c.y);for(var e=1,f=this._points.length;e<f;e++){var g=c.midPointFrom(d);a.quadraticCurveTo(c.x,c.y,g.x,g.y),c=this._points[e],d=this._points[e+1]}a.lineTo(c.x,c.y),a.stroke(),a.restore()},convertPointsToSVGPath:function(a){var b=[],c=new fabric.Point(a[0].x,a[0].y),d=new fabric.Point(a[1].x,a[1].y);b.push("M ",a[0].x," ",a[0].y," ");for(var e=1,f=a.length;e<f;e++){var g=c.midPointFrom(d);b.push("Q ",c.x," ",c.y," ",g.x," ",g.y," "),c=new fabric.Point(a[e].x,a[e].y),e+1<a.length&&(d=new fabric.Point(a[e+1].x,a[e+1].y))}return b.push("L ",c.x," ",c.y," "),b},createPath:function(a){var b=new fabric.Path(a,{fill:null,stroke:this.color,strokeWidth:this.width,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeDashArray:this.strokeDashArray,originX:"center",originY:"center"});return this.shadow&&(this.shadow.affectStroke=!0,b.setShadow(this.shadow)),b},_finalizeAndAddPath:function(){var a=this.canvas.contextTop;a.closePath();var b=this.convertPointsToSVGPath(this._points).join("");if("M 0 0 Q 0 0 0 0 L 0 0"===b)return void this.canvas.renderAll();var c=this.createPath(b);this.canvas.add(c),c.setCoords(),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderAll(),this.canvas.fire("path:created",{path:c})}})}(),fabric.CircleBrush=fabric.util.createClass(fabric.BaseBrush,{width:10,initialize:function(a){this.canvas=a,this.points=[]},drawDot:function(a){var b=this.addPoint(a),c=this.canvas.contextTop,d=this.canvas.viewportTransform;c.save(),c.transform(d[0],d[1],d[2],d[3],d[4],d[5]),c.fillStyle=b.fill,c.beginPath(),c.arc(b.x,b.y,b.radius,0,2*Math.PI,!1),c.closePath(),c.fill(),c.restore()},onMouseDown:function(a){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(a)},onMouseMove:function(a){this.drawDot(a)},onMouseUp:function(){var a=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;for(var b=[],c=0,d=this.points.length;c<d;c++){var e=this.points[c],f=new fabric.Circle({radius:e.radius,left:e.x,top:e.y,originX:"center",originY:"center",fill:e.fill});this.shadow&&f.setShadow(this.shadow),b.push(f)}var g=new fabric.Group(b,{originX:"center",originY:"center"});g.canvas=this.canvas,this.canvas.add(g),this.canvas.fire("path:created",{path:g}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=a,this.canvas.renderAll()},addPoint:function(a){var b=new fabric.Point(a.x,a.y),c=fabric.util.getRandomInt(Math.max(0,this.width-20),this.width+20)/2,d=new fabric.Color(this.color).setAlpha(fabric.util.getRandomInt(0,100)/100).toRgba();return b.radius=c,b.fill=d,this.points.push(b),b}}),fabric.SprayBrush=fabric.util.createClass(fabric.BaseBrush,{width:10,density:20,dotWidth:1,dotWidthVariance:1,randomOpacity:!1,optimizeOverlapping:!0,initialize:function(a){this.canvas=a,this.sprayChunks=[]},onMouseDown:function(a){this.sprayChunks.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.addSprayChunk(a),this.render()},onMouseMove:function(a){this.addSprayChunk(a),this.render()},onMouseUp:function(){var a=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;for(var b=[],c=0,d=this.sprayChunks.length;c<d;c++)for(var e=this.sprayChunks[c],f=0,g=e.length;f<g;f++){var h=new fabric.Rect({width:e[f].width,height:e[f].width,left:e[f].x+1,top:e[f].y+1,originX:"center",originY:"center",fill:this.color});this.shadow&&h.setShadow(this.shadow),b.push(h)}this.optimizeOverlapping&&(b=this._getOptimizedRects(b));var i=new fabric.Group(b,{originX:"center",originY:"center"});i.canvas=this.canvas,this.canvas.add(i),this.canvas.fire("path:created",{path:i}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=a,this.canvas.renderAll()},_getOptimizedRects:function(a){for(var c,b={},d=0,e=a.length;d<e;d++)c=a[d].left+""+a[d].top,b[c]||(b[c]=a[d]);var f=[];for(c in b)f.push(b[c]);return f},render:function(){var a=this.canvas.contextTop;a.fillStyle=this.color;var b=this.canvas.viewportTransform;a.save(),a.transform(b[0],b[1],b[2],b[3],b[4],b[5]);for(var c=0,d=this.sprayChunkPoints.length;c<d;c++){var e=this.sprayChunkPoints[c];"undefined"!=typeof e.opacity&&(a.globalAlpha=e.opacity),a.fillRect(e.x,e.y,e.width,e.width)}a.restore()},addSprayChunk:function(a){this.sprayChunkPoints=[];for(var b,c,d,e=this.width/2,f=0;f<this.density;f++){b=fabric.util.getRandomInt(a.x-e,a.x+e),c=fabric.util.getRandomInt(a.y-e,a.y+e),d=this.dotWidthVariance?fabric.util.getRandomInt(Math.max(1,this.dotWidth-this.dotWidthVariance),this.dotWidth+this.dotWidthVariance):this.dotWidth;var g=new fabric.Point(b,c);g.width=d,this.randomOpacity&&(g.opacity=fabric.util.getRandomInt(0,100)/100),this.sprayChunkPoints.push(g)}this.sprayChunks.push(this.sprayChunkPoints)}}),fabric.PatternBrush=fabric.util.createClass(fabric.PencilBrush,{getPatternSrc:function(){var a=20,b=5,c=fabric.document.createElement("canvas"),d=c.getContext("2d");return c.width=c.height=a+b,d.fillStyle=this.color,d.beginPath(),d.arc(a/2,a/2,a/2,0,2*Math.PI,!1),d.closePath(),d.fill(),c},getPatternSrcFunction:function(){return String(this.getPatternSrc).replace("this.color",'"'+this.color+'"')},getPattern:function(){return this.canvas.contextTop.createPattern(this.source||this.getPatternSrc(),"repeat")},_setBrushStyles:function(){this.callSuper("_setBrushStyles"),this.canvas.contextTop.strokeStyle=this.getPattern()},createPath:function(a){var b=this.callSuper("createPath",a);return b.stroke=new fabric.Pattern({source:this.source||this.getPatternSrcFunction()}),b}}),function(){var a=fabric.util.getPointer,b=fabric.util.degreesToRadians,c=fabric.util.radiansToDegrees,d=Math.atan2,e=Math.abs,f=.5;fabric.Canvas=fabric.util.createClass(fabric.StaticCanvas,{initialize:function(a,b){b||(b={}),this._initStatic(a,b),this._initInteractive(),this._createCacheCanvas(),fabric.Canvas.activeInstance=this},uniScaleTransform:!1,centeredScaling:!1,centeredRotation:!1,interactive:!0,selection:!0,selectionColor:"rgba(100, 100, 255, 0.3)",selectionDashArray:[],selectionBorderColor:"rgba(255, 255, 255, 0.3)",selectionLineWidth:1,hoverCursor:"move",moveCursor:"move",defaultCursor:"default",freeDrawingCursor:"crosshair",rotationCursor:"crosshair",containerClass:"canvas-container",perPixelTargetFind:!1,targetFindTolerance:0,skipTargetFind:!1,isDrawingMode:!1,_initInteractive:function(){this._currentTransform=null,this._groupSelector=null,this._initWrapperElement(),this._createUpperCanvas(),this._initEventListeners(),this._initRetinaScaling(),this.freeDrawingBrush=fabric.PencilBrush&&new fabric.PencilBrush(this),this.calcOffset()},_resetCurrentTransform:function(a){var b=this._currentTransform;b.target.set({scaleX:b.original.scaleX,scaleY:b.original.scaleY,left:b.original.left,top:b.original.top}),this._shouldCenterTransform(a,b.target)?"rotate"===b.action?this._setOriginToCenter(b.target):("center"!==b.originX&&("right"===b.originX?b.mouseXSign=-1:b.mouseXSign=1),"center"!==b.originY&&("bottom"===b.originY?b.mouseYSign=-1:b.mouseYSign=1),b.originX="center",b.originY="center"):(b.originX=b.original.originX,b.originY=b.original.originY)},containsPoint:function(a,b){var c=this.getPointer(a,!0),d=this._normalizePointer(b,c);return b.containsPoint(d)||b._findTargetCorner(c)},_normalizePointer:function(a,b){var g,c=this.getActiveGroup(),d=b.x,e=b.y,f=c&&"group"!==a.type&&c.contains(a);return f&&(g=fabric.util.transformPoint(c.getCenterPoint(),this.viewportTransform,!0),d-=g.x,e-=g.y,d/=c.scaleX,e/=c.scaleY),{x:d,y:e}},isTargetTransparent:function(a,b,c){var d=a.hasBorders,e=a.transparentCorners;a.hasBorders=a.transparentCorners=!1,this._draw(this.contextCache,a),a.hasBorders=d,a.transparentCorners=e;var f=fabric.util.isTransparent(this.contextCache,b,c,this.targetFindTolerance);return this.clearContext(this.contextCache),f},_shouldClearSelection:function(a,b){var c=this.getActiveGroup(),d=this.getActiveObject();return!b||b&&c&&!c.contains(b)&&c!==b&&!a.shiftKey||b&&!b.evented||b&&!b.selectable&&d&&d!==b},_shouldCenterTransform:function(a,b){if(b){var d,c=this._currentTransform;return"scale"===c.action||"scaleX"===c.action||"scaleY"===c.action?d=this.centeredScaling||b.centeredScaling:"rotate"===c.action&&(d=this.centeredRotation||b.centeredRotation),d?!a.altKey:a.altKey}},_getOriginFromCorner:function(a,b){var c={x:a.originX,y:a.originY};return"ml"===b||"tl"===b||"bl"===b?c.x="right":"mr"!==b&&"tr"!==b&&"br"!==b||(c.x="left"),"tl"===b||"mt"===b||"tr"===b?c.y="bottom":"bl"!==b&&"mb"!==b&&"br"!==b||(c.y="top"),c},_getActionFromCorner:function(a,b){var c="drag";return b&&(c="ml"===b||"mr"===b?"scaleX":"mt"===b||"mb"===b?"scaleY":"mtr"===b?"rotate":"scale"),c},_setupCurrentTransform:function(a,c){if(c){var d=this.getPointer(a),e=c._findTargetCorner(this.getPointer(a,!0)),f=this._getActionFromCorner(c,e),g=this._getOriginFromCorner(c,e);this._currentTransform={target:c,action:f,scaleX:c.scaleX,scaleY:c.scaleY,offsetX:d.x-c.left,offsetY:d.y-c.top,originX:g.x,originY:g.y,ex:d.x,ey:d.y,left:c.left,top:c.top,theta:b(c.angle),width:c.width*c.scaleX,mouseXSign:1,mouseYSign:1},this._currentTransform.original={left:c.left,top:c.top,scaleX:c.scaleX,scaleY:c.scaleY,originX:g.x,originY:g.y},this._resetCurrentTransform(a)}},_translateObject:function(a,b){var c=this._currentTransform.target;c.get("lockMovementX")||c.set("left",a-this._currentTransform.offsetX),c.get("lockMovementY")||c.set("top",b-this._currentTransform.offsetY)},_scaleObject:function(a,b,c){var d=this._currentTransform,e=d.target,f=e.get("lockScalingX"),g=e.get("lockScalingY"),h=e.get("lockScalingFlip");if(!f||!g){var i=e.translateToOriginPoint(e.getCenterPoint(),d.originX,d.originY),j=e.toLocalPoint(new fabric.Point(a,b),d.originX,d.originY);this._setLocalMouse(j,d),this._setObjectScale(j,d,f,g,c,h),e.setPositionByOrigin(i,d.originX,d.originY)}},_setObjectScale:function(a,b,c,d,e,f){var g=b.target,h=!1,i=!1,j=g._getNonTransformedDimensions();b.newScaleX=a.x/j.x,b.newScaleY=a.y/j.y,f&&b.newScaleX<=0&&b.newScaleX<g.scaleX&&(h=!0),f&&b.newScaleY<=0&&b.newScaleY<g.scaleY&&(i=!0),"equally"!==e||c||d?e?"x"!==e||g.get("lockUniScaling")?"y"!==e||g.get("lockUniScaling")||i||d||g.set("scaleY",b.newScaleY):h||c||g.set("scaleX",b.newScaleX):(h||c||g.set("scaleX",b.newScaleX),i||d||g.set("scaleY",b.newScaleY)):h||i||this._scaleObjectEqually(a,g,b),h||i||this._flipObject(b,e)},_scaleObjectEqually:function(a,b,c){var d=a.y+a.x,e=b._getNonTransformedDimensions(),f=e.y*c.original.scaleY+e.x*c.original.scaleX;c.newScaleX=c.original.scaleX*d/f,c.newScaleY=c.original.scaleY*d/f,b.set("scaleX",c.newScaleX),b.set("scaleY",c.newScaleY)},_flipObject:function(a,b){a.newScaleX<0&&"y"!==b&&("left"===a.originX?a.originX="right":"right"===a.originX&&(a.originX="left")),a.newScaleY<0&&"x"!==b&&("top"===a.originY?a.originY="bottom":"bottom"===a.originY&&(a.originY="top"))},_setLocalMouse:function(a,b){var c=b.target;"right"===b.originX?a.x*=-1:"center"===b.originX&&(a.x*=2*b.mouseXSign,a.x<0&&(b.mouseXSign=-b.mouseXSign)),"bottom"===b.originY?a.y*=-1:"center"===b.originY&&(a.y*=2*b.mouseYSign,a.y<0&&(b.mouseYSign=-b.mouseYSign)),e(a.x)>c.padding?a.x<0?a.x+=c.padding:a.x-=c.padding:a.x=0,e(a.y)>c.padding?a.y<0?a.y+=c.padding:a.y-=c.padding:a.y=0},_rotateObject:function(a,b){var e=this._currentTransform;if(!e.target.get("lockRotation")){var f=d(e.ey-e.top,e.ex-e.left),g=d(b-e.top,a-e.left),h=c(g-f+e.theta);h<0&&(h=360+h),e.target.angle=h%360}},setCursor:function(a){this.upperCanvasEl.style.cursor=a},_resetObjectTransform:function(a){a.scaleX=1,a.scaleY=1,a.setAngle(0)},_drawSelection:function(){var a=this.contextTop,b=this._groupSelector,c=b.left,d=b.top,g=e(c),h=e(d);if(a.fillStyle=this.selectionColor,a.fillRect(b.ex-(c>0?0:-c),b.ey-(d>0?0:-d),g,h),a.lineWidth=this.selectionLineWidth,a.strokeStyle=this.selectionBorderColor,this.selectionDashArray.length>1){var i=b.ex+f-(c>0?0:g),j=b.ey+f-(d>0?0:h);a.beginPath(),fabric.util.drawDashedLine(a,i,j,i+g,j,this.selectionDashArray),fabric.util.drawDashedLine(a,i,j+h-1,i+g,j+h-1,this.selectionDashArray),fabric.util.drawDashedLine(a,i,j,i,j+h,this.selectionDashArray),fabric.util.drawDashedLine(a,i+g-1,j,i+g-1,j+h,this.selectionDashArray),a.closePath(),a.stroke()}else a.strokeRect(b.ex+f-(c>0?0:g),b.ey+f-(d>0?0:h),g,h)},_isLastRenderedObject:function(a){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(a,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(a,!0))},findTarget:function(a,b){if(!this.skipTargetFind){if(this._isLastRenderedObject(a))return this.lastRenderedObjectWithControlsAboveOverlay;var c=this.getActiveGroup();if(c&&!b&&this.containsPoint(a,c))return c;var d=this._searchPossibleTargets(a,b);return this._fireOverOutEvents(d,a),d}},_fireOverOutEvents:function(a,b){a?this._hoveredTarget!==a&&(this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:b}),this._hoveredTarget.fire("mouseout")),this.fire("mouse:over",{target:a,e:b}),a.fire("mouseover"),this._hoveredTarget=a):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget,e:b}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(a,b,c){if(b&&b.visible&&b.evented&&this.containsPoint(a,b)){if(!this.perPixelTargetFind&&!b.perPixelTargetFind||b.isEditing)return!0;var d=this.isTargetTransparent(b,c.x,c.y);if(!d)return!0}},_searchPossibleTargets:function(a,b){for(var c,d=this.getPointer(a,!0),e=this._objects.length;e--;)if((!this._objects[e].group||b)&&this._checkTarget(a,this._objects[e],d)){this.relatedTarget=this._objects[e],c=this._objects[e];break}return c},getPointer:function(b,c,d){d||(d=this.upperCanvasEl);var i,e=a(b),f=d.getBoundingClientRect(),g=f.width||0,h=f.height||0;return g&&h||("top"in f&&"bottom"in f&&(h=Math.abs(f.top-f.bottom)),"right"in f&&"left"in f&&(g=Math.abs(f.right-f.left))),this.calcOffset(),e.x=e.x-this._offset.left,e.y=e.y-this._offset.top,c||(e=fabric.util.transformPoint(e,fabric.util.invertTransform(this.viewportTransform))),i=0===g||0===h?{width:1,height:1}:{width:d.width/g,height:d.height/h},{x:e.x*i.width,y:e.y*i.height}},_createUpperCanvas:function(){var a=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+a),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(a){var b=this.getWidth()||a.width,c=this.getHeight()||a.height;fabric.util.setStyle(a,{position:"absolute",width:b+"px",height:c+"px",left:0,top:0}),a.width=b,a.height=c,fabric.util.makeElementUnselectable(a)},_copyCanvasStyle:function(a,b){b.style.cssText=a.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(a){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=a,a.set("active",!0)},setActiveObject:function(a,b){return this._setActiveObject(a),this.renderAll(),this.fire("object:selected",{target:a,e:b}),a.fire("selected",{e:b}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(a){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:a}),this},_setActiveGroup:function(a){this._activeGroup=a,a&&a.set("active",!0)},setActiveGroup:function(a,b){return this._setActiveGroup(a),a&&(this.fire("object:selected",{target:a,e:b}),a.fire("selected",{e:b})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var a=this.getActiveGroup();a&&a.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(a){return this._discardActiveGroup(),this.fire("selection:cleared",{e:a}),this},deactivateAll:function(){for(var a=this.getObjects(),b=0,c=a.length;b<c;b++)a[b].set("active",!1);return this._discardActiveGroup(),this._discardActiveObject(),this},deactivateAllWithDispatch:function(a){var b=this.getActiveGroup()||this.getActiveObject();return b&&this.fire("before:selection:cleared",{target:b,e:a}),this.deactivateAll(),b&&this.fire("selection:cleared",{e:a}),this},drawControls:function(a){var b=this.getActiveGroup();b?this._drawGroupControls(a,b):this._drawObjectsControls(a)},_drawGroupControls:function(a,b){b._renderControls(a)},_drawObjectsControls:function(a){for(var b=0,c=this._objects.length;b<c;++b)this._objects[b]&&this._objects[b].active&&(this._objects[b]._renderControls(a),this.lastRenderedObjectWithControlsAboveOverlay=this._objects[b])}});for(var g in fabric.StaticCanvas)"prototype"!==g&&(fabric.Canvas[g]=fabric.StaticCanvas[g]);fabric.isTouchSupported&&(fabric.Canvas.prototype._setCursorFromEvent=function(){}),fabric.Element=fabric.Canvas}(),function(){var a={mt:0,tr:1,mr:2,br:3,mb:4,bl:5,ml:6,tl:7},b=fabric.util.addListener,c=fabric.util.removeListener;fabric.util.object.extend(fabric.Canvas.prototype,{cursorMap:["n-resize","ne-resize","e-resize","se-resize","s-resize","sw-resize","w-resize","nw-resize"],_initEventListeners:function(){this._bindEvents(),b(fabric.window,"resize",this._onResize),b(this.upperCanvasEl,"mousedown",this._onMouseDown),b(this.upperCanvasEl,"mousemove",this._onMouseMove),b(this.upperCanvasEl,"mousewheel",this._onMouseWheel),b(this.upperCanvasEl,"touchstart",this._onMouseDown),b(this.upperCanvasEl,"touchmove",this._onMouseMove),"undefined"!=typeof eventjs&&"add"in eventjs&&(eventjs.add(this.upperCanvasEl,"gesture",this._onGesture),eventjs.add(this.upperCanvasEl,"drag",this._onDrag),eventjs.add(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.add(this.upperCanvasEl,"shake",this._onShake),eventjs.add(this.upperCanvasEl,"longpress",this._onLongPress))},_bindEvents:function(){this._onMouseDown=this._onMouseDown.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this)},removeListeners:function(){c(fabric.window,"resize",this._onResize),c(this.upperCanvasEl,"mousedown",this._onMouseDown),c(this.upperCanvasEl,"mousemove",this._onMouseMove),c(this.upperCanvasEl,"mousewheel",this._onMouseWheel),c(this.upperCanvasEl,"touchstart",this._onMouseDown),c(this.upperCanvasEl,"touchmove",this._onMouseMove),"undefined"!=typeof eventjs&&"remove"in eventjs&&(eventjs.remove(this.upperCanvasEl,"gesture",this._onGesture),eventjs.remove(this.upperCanvasEl,"drag",this._onDrag),eventjs.remove(this.upperCanvasEl,"orientation",this._onOrientationChange),eventjs.remove(this.upperCanvasEl,"shake",this._onShake),eventjs.remove(this.upperCanvasEl,"longpress",this._onLongPress))},_onGesture:function(a,b){this.__onTransformGesture&&this.__onTransformGesture(a,b)},_onDrag:function(a,b){this.__onDrag&&this.__onDrag(a,b)},_onMouseWheel:function(a,b){this.__onMouseWheel&&this.__onMouseWheel(a,b)},_onOrientationChange:function(a,b){this.__onOrientationChange&&this.__onOrientationChange(a,b)},_onShake:function(a,b){this.__onShake&&this.__onShake(a,b)},_onLongPress:function(a,b){this.__onLongPress&&this.__onLongPress(a,b)},_onMouseDown:function(a){this.__onMouseDown(a),b(fabric.document,"touchend",this._onMouseUp),b(fabric.document,"touchmove",this._onMouseMove),c(this.upperCanvasEl,"mousemove",this._onMouseMove),c(this.upperCanvasEl,"touchmove",this._onMouseMove),"touchstart"===a.type?c(this.upperCanvasEl,"mousedown",this._onMouseDown):(b(fabric.document,"mouseup",this._onMouseUp),b(fabric.document,"mousemove",this._onMouseMove))},_onMouseUp:function(a){if(this.__onMouseUp(a),c(fabric.document,"mouseup",this._onMouseUp),c(fabric.document,"touchend",this._onMouseUp),c(fabric.document,"mousemove",this._onMouseMove),c(fabric.document,"touchmove",this._onMouseMove),b(this.upperCanvasEl,"mousemove",this._onMouseMove),b(this.upperCanvasEl,"touchmove",this._onMouseMove),"touchend"===a.type){var d=this;setTimeout(function(){b(d.upperCanvasEl,"mousedown",d._onMouseDown)},400)}},_onMouseMove:function(a){!this.allowTouchScrolling&&a.preventDefault&&a.preventDefault(),this.__onMouseMove(a)},_onResize:function(){this.calcOffset()},_shouldRender:function(a,b){var c=this.getActiveGroup()||this.getActiveObject();return!!(a&&(a.isMoving||a!==c)||!a&&c||!a&&!c&&!this._groupSelector||b&&this._previousPointer&&this.selection&&(b.x!==this._previousPointer.x||b.y!==this._previousPointer.y))},__onMouseUp:function(a){var b;if(this.isDrawingMode&&this._isCurrentlyDrawing)return void this._onMouseUpInDrawingMode(a);this._currentTransform?(this._finalizeCurrentTransform(),b=this._currentTransform.target):b=this.findTarget(a,!0);var c=this._shouldRender(b,this.getPointer(a));this._maybeGroupObjects(a),b&&(b.isMoving=!1),c&&this.renderAll(),this._handleCursorAndEvent(a,b)},_handleCursorAndEvent:function(a,b){this._setCursorFromEvent(a,b);var c=this;setTimeout(function(){c._setCursorFromEvent(a,b)},50),this.fire("mouse:up",{target:b,e:a}),b&&b.fire("mouseup",{e:a})},_finalizeCurrentTransform:function(){var a=this._currentTransform,b=a.target;b._scaling&&(b._scaling=!1),b.setCoords(),this.stateful&&b.hasStateChanged()&&(this.fire("object:modified",{target:b}),b.fire("modified")),this._restoreOriginXY(b)},_restoreOriginXY:function(a){if(this._previousOriginX&&this._previousOriginY){var b=a.translateToOriginPoint(a.getCenterPoint(),this._previousOriginX,this._previousOriginY);a.originX=this._previousOriginX,a.originY=this._previousOriginY,a.left=b.x,a.top=b.y,this._previousOriginX=null,this._previousOriginY=null}},_onMouseDownInDrawingMode:function(a){this._isCurrentlyDrawing=!0,this.discardActiveObject(a).renderAll(),this.clipTo&&fabric.util.clipContext(this,this.contextTop);var b=fabric.util.invertTransform(this.viewportTransform),c=fabric.util.transformPoint(this.getPointer(a,!0),b);this.freeDrawingBrush.onMouseDown(c),this.fire("mouse:down",{e:a});var d=this.findTarget(a);"undefined"!=typeof d&&d.fire("mousedown",{e:a,target:d})},_onMouseMoveInDrawingMode:function(a){if(this._isCurrentlyDrawing){var b=fabric.util.invertTransform(this.viewportTransform),c=fabric.util.transformPoint(this.getPointer(a,!0),b);this.freeDrawingBrush.onMouseMove(c)}this.setCursor(this.freeDrawingCursor),this.fire("mouse:move",{e:a});var d=this.findTarget(a);"undefined"!=typeof d&&d.fire("mousemove",{e:a,target:d})},_onMouseUpInDrawingMode:function(a){this._isCurrentlyDrawing=!1,this.clipTo&&this.contextTop.restore(),this.freeDrawingBrush.onMouseUp(),this.fire("mouse:up",{e:a});var b=this.findTarget(a);"undefined"!=typeof b&&b.fire("mouseup",{e:a,target:b})},__onMouseDown:function(a){var b="which"in a?1===a.which:1===a.button;if(b||fabric.isTouchSupported){if(this.isDrawingMode)return void this._onMouseDownInDrawingMode(a);if(!this._currentTransform){var c=this.findTarget(a),d=this.getPointer(a,!0);this._previousPointer=d;var e=this._shouldRender(c,d),f=this._shouldGroup(a,c);this._shouldClearSelection(a,c)?this._clearSelection(a,c,d):f&&(this._handleGrouping(a,c),c=this.getActiveGroup()),c&&c.selectable&&!f&&(this._beforeTransform(a,c),this._setupCurrentTransform(a,c)),e&&this.renderAll(),this.fire("mouse:down",{target:c,e:a}),c&&c.fire("mousedown",{e:a})}}},_beforeTransform:function(a,b){this.stateful&&b.saveState(),b._findTargetCorner(this.getPointer(a))&&this.onBeforeScaleRotate(b),b!==this.getActiveGroup()&&b!==this.getActiveObject()&&(this.deactivateAll(),this.setActiveObject(b,a))},_clearSelection:function(a,b,c){this.deactivateAllWithDispatch(a),b&&b.selectable?this.setActiveObject(b,a):this.selection&&(this._groupSelector={ex:c.x,ey:c.y,top:0,left:0})},_setOriginToCenter:function(a){this._previousOriginX=this._currentTransform.target.originX,this._previousOriginY=this._currentTransform.target.originY;var b=a.getCenterPoint();a.originX="center",a.originY="center",a.left=b.x,a.top=b.y,this._currentTransform.left=a.left,this._currentTransform.top=a.top},_setCenterToOrigin:function(a){var b=a.translateToOriginPoint(a.getCenterPoint(),this._previousOriginX,this._previousOriginY);a.originX=this._previousOriginX,a.originY=this._previousOriginY,a.left=b.x,a.top=b.y,this._previousOriginX=null,this._previousOriginY=null},__onMouseMove:function(a){var b,c;if(this.isDrawingMode)return void this._onMouseMoveInDrawingMode(a);if(!("undefined"!=typeof a.touches&&a.touches.length>1)){var d=this._groupSelector;d?(c=this.getPointer(a,!0),d.left=c.x-d.ex,d.top=c.y-d.ey,this.renderTop()):this._currentTransform?this._transformObject(a):(b=this.findTarget(a),!b||b&&!b.selectable?this.setCursor(this.defaultCursor):this._setCursorFromEvent(a,b)),this.fire("mouse:move",{target:b,e:a}),b&&b.fire("mousemove",{e:a})}},_transformObject:function(a){var b=this.getPointer(a),c=this._currentTransform;c.reset=!1,c.target.isMoving=!0,this._beforeScaleTransform(a,c),this._performTransformAction(a,c,b),this.renderAll()},_performTransformAction:function(a,b,c){var d=c.x,e=c.y,f=b.target,g=b.action;"rotate"===g?(this._rotateObject(d,e),this._fire("rotating",f,a)):"scale"===g?(this._onScale(a,b,d,e),this._fire("scaling",f,a)):"scaleX"===g?(this._scaleObject(d,e,"x"),this._fire("scaling",f,a)):"scaleY"===g?(this._scaleObject(d,e,"y"),this._fire("scaling",f,a)):(this._translateObject(d,e),this._fire("moving",f,a),this.setCursor(this.moveCursor))},_fire:function(a,b,c){this.fire("object:"+a,{
target:b,e:c}),b.fire(a,{e:c})},_beforeScaleTransform:function(a,b){if("scale"===b.action||"scaleX"===b.action||"scaleY"===b.action){var c=this._shouldCenterTransform(a,b.target);(c&&("center"!==b.originX||"center"!==b.originY)||!c&&"center"===b.originX&&"center"===b.originY)&&(this._resetCurrentTransform(a),b.reset=!0)}},_onScale:function(a,b,c,d){!a.shiftKey&&!this.uniScaleTransform||b.target.get("lockUniScaling")?(b.reset||"scale"!==b.currentAction||this._resetCurrentTransform(a,b.target),b.currentAction="scaleEqually",this._scaleObject(c,d,"equally")):(b.currentAction="scale",this._scaleObject(c,d))},_setCursorFromEvent:function(a,b){if(!b||!b.selectable)return this.setCursor(this.defaultCursor),!1;var c=this.getActiveGroup(),d=b._findTargetCorner&&(!c||!c.contains(b))&&b._findTargetCorner(this.getPointer(a,!0));return d?this._setCornerCursor(d,b):this.setCursor(b.hoverCursor||this.hoverCursor),!0},_setCornerCursor:function(b,c){if(b in a)this.setCursor(this._getRotatedCornerCursor(b,c));else{if("mtr"!==b||!c.hasRotatingPoint)return this.setCursor(this.defaultCursor),!1;this.setCursor(this.rotationCursor)}},_getRotatedCornerCursor:function(b,c){var d=Math.round(c.getAngle()%360/45);return d<0&&(d+=8),d+=a[b],d%=8,this.cursorMap[d]}})}(),function(){var a=Math.min,b=Math.max;fabric.util.object.extend(fabric.Canvas.prototype,{_shouldGroup:function(a,b){var c=this.getActiveObject();return a.shiftKey&&(this.getActiveGroup()||c&&c!==b)&&this.selection},_handleGrouping:function(a,b){b===this.getActiveGroup()&&(b=this.findTarget(a,!0),!b||b.isType("group"))||(this.getActiveGroup()?this._updateActiveGroup(b,a):this._createActiveGroup(b,a),this._activeGroup&&this._activeGroup.saveCoords())},_updateActiveGroup:function(a,b){var c=this.getActiveGroup();if(c.contains(a)){if(c.removeWithUpdate(a),this._resetObjectTransform(c),a.set("active",!1),1===c.size())return this.discardActiveGroup(b),void this.setActiveObject(c.item(0))}else c.addWithUpdate(a),this._resetObjectTransform(c);this.fire("selection:created",{target:c,e:b}),c.set("active",!0)},_createActiveGroup:function(a,b){if(this._activeObject&&a!==this._activeObject){var c=this._createGroup(a);c.addWithUpdate(),this.setActiveGroup(c),this._activeObject=null,this.fire("selection:created",{target:c,e:b})}a.set("active",!0)},_createGroup:function(a){var b=this.getObjects(),c=b.indexOf(this._activeObject)<b.indexOf(a),d=c?[this._activeObject,a]:[a,this._activeObject];return new fabric.Group(d,{canvas:this})},_groupSelectedObjects:function(a){var b=this._collectObjects();1===b.length?this.setActiveObject(b[0],a):b.length>1&&(b=new fabric.Group(b.reverse(),{canvas:this}),b.addWithUpdate(),this.setActiveGroup(b,a),b.saveCoords(),this.fire("selection:created",{target:b}),this.renderAll())},_collectObjects:function(){for(var d,c=[],e=this._groupSelector.ex,f=this._groupSelector.ey,g=e+this._groupSelector.left,h=f+this._groupSelector.top,i=new fabric.Point(a(e,g),a(f,h)),j=new fabric.Point(b(e,g),b(f,h)),k=e===g&&f===h,l=this._objects.length;l--&&(d=this._objects[l],!(d&&d.selectable&&d.visible&&(d.intersectsWithRect(i,j)||d.isContainedWithinRect(i,j)||d.containsPoint(i)||d.containsPoint(j))&&(d.set("active",!0),c.push(d),k))););return c},_maybeGroupObjects:function(a){this.selection&&this._groupSelector&&this._groupSelectedObjects(a);var b=this.getActiveGroup();b&&(b.setObjectsCoords().setCoords(),b.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(a){a||(a={});var b=a.format||"png",c=a.quality||1,d=a.multiplier||1,e={left:a.left,top:a.top,width:a.width,height:a.height};return 1!==d?this.__toDataURLWithMultiplier(b,c,e,d):this.__toDataURL(b,c,e)},__toDataURL:function(a,b,c){this.renderAll(!0);var d=this.upperCanvasEl||this.lowerCanvasEl,e=this.__getCroppedCanvas(d,c);"jpg"===a&&(a="jpeg");var f=fabric.StaticCanvas.supports("toDataURLWithQuality")?(e||d).toDataURL("image/"+a,b):(e||d).toDataURL("image/"+a);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),e&&(e=null),f},__getCroppedCanvas:function(a,b){var c,d,e="left"in b||"top"in b||"width"in b||"height"in b;return e&&(c=fabric.util.createCanvasElement(),d=c.getContext("2d"),c.width=b.width||this.width,c.height=b.height||this.height,d.drawImage(a,-b.left||0,-b.top||0)),c},__toDataURLWithMultiplier:function(a,b,c,d){var e=this.getWidth(),f=this.getHeight(),g=e*d,h=f*d,i=this.getActiveObject(),j=this.getActiveGroup(),k=this.contextTop||this.contextContainer;d>1&&this.setWidth(g).setHeight(h),k.scale(d,d),c.left&&(c.left*=d),c.top&&(c.top*=d),c.width?c.width*=d:d<1&&(c.width=g),c.height?c.height*=d:d<1&&(c.height=h),j?this._tempRemoveBordersControlsFromGroup(j):i&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var l=this.__toDataURL(a,b,c);return this.width=e,this.height=f,k.scale(1/d,1/d),this.setWidth(e).setHeight(f),j?this._restoreBordersControlsOnGroup(j):i&&this.setActiveObject&&this.setActiveObject(i),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),l},toDataURLWithMultiplier:function(a,b,c){return this.toDataURL({format:a,multiplier:b,quality:c})},_tempRemoveBordersControlsFromGroup:function(a){a.origHasControls=a.hasControls,a.origBorderColor=a.borderColor,a.hasControls=!0,a.borderColor="rgba(0,0,0,0)",a.forEachObject(function(a){a.origBorderColor=a.borderColor,a.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(a){a.hideControls=a.origHideControls,a.borderColor=a.origBorderColor,a.forEachObject(function(a){a.borderColor=a.origBorderColor,delete a.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(a,b,c){return this.loadFromJSON(a,b,c)},loadFromJSON:function(a,b,c){if(a){var d="string"==typeof a?JSON.parse(a):a;this.clear();var e=this;return this._enlivenObjects(d.objects,function(){e._setBgOverlay(d,b)},c),this}},_setBgOverlay:function(a,b){var c=this,d={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!(a.backgroundImage||a.overlayImage||a.background||a.overlay))return void(b&&b());var e=function(){d.backgroundImage&&d.overlayImage&&d.backgroundColor&&d.overlayColor&&(c.renderAll(),b&&b())};this.__setBgOverlay("backgroundImage",a.backgroundImage,d,e),this.__setBgOverlay("overlayImage",a.overlayImage,d,e),this.__setBgOverlay("backgroundColor",a.background,d,e),this.__setBgOverlay("overlayColor",a.overlay,d,e),e()},__setBgOverlay:function(a,b,c,d){var e=this;return b?void("backgroundImage"===a||"overlayImage"===a?fabric.Image.fromObject(b,function(b){e[a]=b,c[a]=!0,d&&d()}):this["set"+fabric.util.string.capitalize(a,!0)](b,function(){c[a]=!0,d&&d()})):void(c[a]=!0)},_enlivenObjects:function(a,b,c){var d=this;if(!a||0===a.length)return void(b&&b());var e=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(a,function(a){a.forEach(function(a,b){d.insertAt(a,b,!0)}),d.renderOnAddRemove=e,b&&b()},null,c)},_toDataURL:function(a,b){this.clone(function(c){b(c.toDataURL(a))})},_toDataURLWithMultiplier:function(a,b,c){this.clone(function(d){c(d.toDataURLWithMultiplier(a,b))})},clone:function(a,b){var c=JSON.stringify(this.toJSON(b));this.cloneWithoutData(function(b){b.loadFromJSON(c,function(){a&&a(b)})})},cloneWithoutData:function(a){var b=fabric.document.createElement("canvas");b.width=this.getWidth(),b.height=this.getHeight();var c=new fabric.Canvas(b);c.clipTo=this.clipTo,this.backgroundImage?(c.setBackgroundImage(this.backgroundImage.src,function(){c.renderAll(),a&&a(c)}),c.backgroundImageOpacity=this.backgroundImageOpacity,c.backgroundImageStretch=this.backgroundImageStretch):a&&a(c)}}),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend,d=b.util.toFixed,e=b.util.string.capitalize,f=b.util.degreesToRadians,g=b.StaticCanvas.supports("setLineDash");b.Object||(b.Object=b.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,lockScalingFlip:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule globalCompositeOperation shadow clipTo visible backgroundColor alignX alignY meetOrSlice".split(" "),initialize:function(a){a&&this.setOptions(a)},_initGradient:function(a){!a.fill||!a.fill.colorStops||a.fill instanceof b.Gradient||this.set("fill",new b.Gradient(a.fill)),!a.stroke||!a.stroke.colorStops||a.stroke instanceof b.Gradient||this.set("stroke",new b.Gradient(a.stroke))},_initPattern:function(a){!a.fill||!a.fill.source||a.fill instanceof b.Pattern||this.set("fill",new b.Pattern(a.fill)),!a.stroke||!a.stroke.source||a.stroke instanceof b.Pattern||this.set("stroke",new b.Pattern(a.stroke))},_initClipping:function(a){if(a.clipTo&&"string"==typeof a.clipTo){var c=b.util.getFunctionBody(a.clipTo);"undefined"!=typeof c&&(this.clipTo=new Function("ctx",c))}},setOptions:function(a){for(var b in a)this.set(b,a[b]);this._initGradient(a),this._initPattern(a),this._initClipping(a)},transform:function(a,b){this.group&&this.canvas.preserveObjectStacking&&this.group===this.canvas._activeGroup&&this.group.transform(a);var c=b?this._getLeftTopCoords():this.getCenterPoint();a.translate(c.x,c.y),a.rotate(f(this.angle)),a.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(a){var c=b.Object.NUM_FRACTION_DIGITS,e={type:this.type,originX:this.originX,originY:this.originY,left:d(this.left,c),top:d(this.top,c),width:d(this.width,c),height:d(this.height,c),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:d(this.strokeWidth,c),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:d(this.strokeMiterLimit,c),scaleX:d(this.scaleX,c),scaleY:d(this.scaleY,c),angle:d(this.getAngle(),c),flipX:this.flipX,flipY:this.flipY,opacity:d(this.opacity,c),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor,fillRule:this.fillRule,globalCompositeOperation:this.globalCompositeOperation,transformMatrix:this.transformMatrix};return this.includeDefaultValues||(e=this._removeDefaultValues(e)),b.util.populateWithProperties(this,e,a),e},toDatalessObject:function(a){return this.toObject(a)},_removeDefaultValues:function(a){var c=b.util.getKlass(a.type).prototype,d=c.stateProperties;return d.forEach(function(b){a[b]===c[b]&&delete a[b];var d="[object Array]"===Object.prototype.toString.call(a[b])&&"[object Array]"===Object.prototype.toString.call(c[b]);d&&0===a[b].length&&0===c[b].length&&delete a[b]}),a},toString:function(){return"#<fabric."+e(this.type)+">"},get:function(a){return this[a]},_setObject:function(a){for(var b in a)this._set(b,a[b])},set:function(a,b){return"object"==typeof a?this._setObject(a):"function"==typeof b&&"clipTo"!==a?this._set(a,b(this.get(a))):this._set(a,b),this},_set:function(a,c){var e="scaleX"===a||"scaleY"===a;return e&&(c=this._constrainScale(c)),"scaleX"===a&&c<0?(this.flipX=!this.flipX,c*=-1):"scaleY"===a&&c<0?(this.flipY=!this.flipY,c*=-1):"width"===a||"height"===a?this.minScaleLimit=d(Math.min(.1,1/Math.max(this.width,this.height)),2):"shadow"!==a||!c||c instanceof b.Shadow||(c=new b.Shadow(c)),this[a]=c,this},setOnGroup:function(){},toggle:function(a){var b=this.get(a);return"boolean"==typeof b&&this.set(a,!b),this},setSourcePath:function(a){return this.sourcePath=a,this},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(a,c){0===this.width&&0===this.height||!this.visible||(a.save(),this._setupCompositeOperation(a),c||this.transform(a),this._setStrokeStyles(a),this._setFillStyles(a),this.transformMatrix&&a.transform.apply(a,this.transformMatrix),this._setOpacity(a),this._setShadow(a),this.clipTo&&b.util.clipContext(this,a),this._render(a,c),this.clipTo&&a.restore(),a.restore())},_setOpacity:function(a){this.group&&this.group._setOpacity(a),a.globalAlpha*=this.opacity},_setStrokeStyles:function(a){this.stroke&&(a.lineWidth=this.strokeWidth,a.lineCap=this.strokeLineCap,a.lineJoin=this.strokeLineJoin,a.miterLimit=this.strokeMiterLimit,a.strokeStyle=this.stroke.toLive?this.stroke.toLive(a,this):this.stroke)},_setFillStyles:function(a){this.fill&&(a.fillStyle=this.fill.toLive?this.fill.toLive(a,this):this.fill)},_renderControls:function(a,c){if(this.active&&!c){var d=this.getViewportTransform();a.save();var e;this.group&&(e=b.util.transformPoint(this.group.getCenterPoint(),d),a.translate(e.x,e.y),a.rotate(f(this.group.angle))),e=b.util.transformPoint(this.getCenterPoint(),d,null!=this.group),this.group&&(e.x*=this.group.scaleX,e.y*=this.group.scaleY),a.translate(e.x,e.y),a.rotate(f(this.angle)),this.drawBorders(a),this.drawControls(a),a.restore()}},_setShadow:function(a){if(this.shadow){var b=this.canvas&&this.canvas.viewportTransform[0]||1,c=this.canvas&&this.canvas.viewportTransform[3]||1;a.shadowColor=this.shadow.color,a.shadowBlur=this.shadow.blur*(b+c)*(this.scaleX+this.scaleY)/4,a.shadowOffsetX=this.shadow.offsetX*b*this.scaleX,a.shadowOffsetY=this.shadow.offsetY*c*this.scaleY}},_removeShadow:function(a){this.shadow&&(a.shadowColor="",a.shadowBlur=a.shadowOffsetX=a.shadowOffsetY=0)},_renderFill:function(a){if(this.fill){if(a.save(),this.fill.gradientTransform){var b=this.fill.gradientTransform;a.transform.apply(a,b)}this.fill.toLive&&a.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0),"evenodd"===this.fillRule?a.fill("evenodd"):a.fill(),a.restore()}},_renderStroke:function(a){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(a),a.save(),this.strokeDashArray)1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),g?(a.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(a)):this._renderDashedStroke&&this._renderDashedStroke(a),a.stroke();else{if(this.stroke.gradientTransform){var b=this.stroke.gradientTransform;a.transform.apply(a,b)}this._stroke?this._stroke(a):a.stroke()}a.restore()}},clone:function(a,c){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(c),a):new b.Object(this.toObject(c))},cloneAsImage:function(a){var c=this.toDataURL();return b.util.loadImage(c,function(c){a&&a(new b.Image(c))}),this},toDataURL:function(a){a||(a={});var c=b.util.createCanvasElement(),d=this.getBoundingRect();c.width=d.width,c.height=d.height,b.util.wrapElement(c,"div");var e=new b.StaticCanvas(c);"jpg"===a.format&&(a.format="jpeg"),"jpeg"===a.format&&(e.backgroundColor="#fff");var f={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new b.Point(c.width/2,c.height/2),"center","center");var g=this.canvas;e.add(this);var h=e.toDataURL(a);return this.set(f).setCoords(),this.canvas=g,e.dispose(),e=null,h},isType:function(a){return this.type===a},complexity:function(){return 0},toJSON:function(a){return this.toObject(a)},setGradient:function(a,c){c||(c={});var d={colorStops:[]};d.type=c.type||(c.r1||c.r2?"radial":"linear"),d.coords={x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2},(c.r1||c.r2)&&(d.coords.r1=c.r1,d.coords.r2=c.r2);for(var e in c.colorStops){var f=new b.Color(c.colorStops[e]);d.colorStops.push({offset:e,color:f.toRgb(),opacity:f.getAlpha()})}return this.set(a,b.Gradient.forObject(this,d))},setPatternFill:function(a){return this.set("fill",new b.Pattern(a))},setShadow:function(a){return this.set("shadow",a?new b.Shadow(a):null)},setColor:function(a){return this.set("fill",a),this},setAngle:function(a){var b=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return b&&this._setOriginToCenter(),this.set("angle",a),b&&this._resetOrigin(),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(a,c){c=c||this.canvas.getPointer(a);var d=new b.Point(c.x,c.y),e=this._getLeftTopCoords();return this.angle&&(d=b.util.rotatePoint(d,e,b.util.degreesToRadians(-this.angle))),{x:d.x-e.x,y:d.y-e.y}},_setupCompositeOperation:function(a){this.globalCompositeOperation&&(a.globalCompositeOperation=this.globalCompositeOperation)}}),b.util.createAccessors(b.Object),b.Object.prototype.rotate=b.Object.prototype.setAngle,c(b.Object.prototype,b.Observable),b.Object.NUM_FRACTION_DIGITS=2,b.Object.__uid=0)}("undefined"!=typeof exports?exports:this),function(){var a=fabric.util.degreesToRadians,b={left:-.5,center:0,right:.5},c={top:-.5,center:0,bottom:.5};fabric.util.object.extend(fabric.Object.prototype,{translateToGivenOrigin:function(a,d,e,f,g){var l,h=a.x,i=a.y,j=b[f]-b[d],k=c[g]-c[e];return(j||k)&&(l=this._getTransformedDimensions(),h=a.x+j*l.x,i=a.y+k*l.y),new fabric.Point(h,i)},translateToCenterPoint:function(b,c,d){var e=this.translateToGivenOrigin(b,c,d,"center","center");return this.angle?fabric.util.rotatePoint(e,b,a(this.angle)):e},translateToOriginPoint:function(b,c,d){var e=this.translateToGivenOrigin(b,"center","center",c,d);return this.angle?fabric.util.rotatePoint(e,b,a(this.angle)):e},getCenterPoint:function(){var a=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(a,this.originX,this.originY)},getPointByOrigin:function(a,b){var c=this.getCenterPoint();return this.translateToOriginPoint(c,a,b)},toLocalPoint:function(b,c,d){var f,g,e=this.getCenterPoint();return f=c&&d?this.translateToGivenOrigin(e,"center","center",c,d):new fabric.Point(this.left,this.top),g=new fabric.Point(b.x,b.y),this.angle&&(g=fabric.util.rotatePoint(g,e,-a(this.angle))),g.subtractEquals(f)},setPositionByOrigin:function(a,b,c){var d=this.translateToCenterPoint(a,b,c),e=this.translateToOriginPoint(d,this.originX,this.originY);this.set("left",e.x),this.set("top",e.y)},adjustPosition:function(c){var d=a(this.angle),e=this.getWidth(),f=Math.cos(d)*e,g=Math.sin(d)*e;this.left+=f*(b[c]-b[this.originX]),this.top+=g*(b[c]-b[this.originX]),this.setCoords(),this.originX=c},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var a=this.getCenterPoint();this.originX="center",this.originY="center",this.left=a.x,this.top=a.y},_resetOrigin:function(){var a=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=a.x,this.top=a.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){var a=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(a,b){var c=this.oCoords,d=new fabric.Point(c.tl.x,c.tl.y),e=new fabric.Point(c.tr.x,c.tr.y),f=new fabric.Point(c.bl.x,c.bl.y),g=new fabric.Point(c.br.x,c.br.y),h=fabric.Intersection.intersectPolygonRectangle([d,e,g,f],a,b);return"Intersection"===h.status},intersectsWithObject:function(a){function b(a){return{tl:new fabric.Point(a.tl.x,a.tl.y),tr:new fabric.Point(a.tr.x,a.tr.y),bl:new fabric.Point(a.bl.x,a.bl.y),br:new fabric.Point(a.br.x,a.br.y)}}var c=b(this.oCoords),d=b(a.oCoords),e=fabric.Intersection.intersectPolygonPolygon([c.tl,c.tr,c.br,c.bl],[d.tl,d.tr,d.br,d.bl]);return"Intersection"===e.status},isContainedWithinObject:function(a){var b=a.getBoundingRect(),c=new fabric.Point(b.left,b.top),d=new fabric.Point(b.left+b.width,b.top+b.height);return this.isContainedWithinRect(c,d)},isContainedWithinRect:function(a,b){var c=this.getBoundingRect();return c.left>=a.x&&c.left+c.width<=b.x&&c.top>=a.y&&c.top+c.height<=b.y},containsPoint:function(a){var b=this._getImageLines(this.oCoords),c=this._findCrossPoints(a,b);return 0!==c&&c%2===1},_getImageLines:function(a){return{topline:{o:a.tl,d:a.tr},rightline:{o:a.tr,d:a.br},bottomline:{o:a.br,d:a.bl},leftline:{o:a.bl,d:a.tl}}},_findCrossPoints:function(a,b){var c,d,e,f,g,h,j,i=0;for(var k in b)if(j=b[k],!(j.o.y<a.y&&j.d.y<a.y||j.o.y>=a.y&&j.d.y>=a.y||(j.o.x===j.d.x&&j.o.x>=a.x?(g=j.o.x,h=a.y):(c=0,d=(j.d.y-j.o.y)/(j.d.x-j.o.x),e=a.y-c*a.x,f=j.o.y-d*j.o.x,g=-(e-f)/(c-d),h=e+c*g),g>=a.x&&(i+=1),2!==i)))break;return i},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var a=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],b=fabric.util.array.min(a),c=fabric.util.array.max(a),d=Math.abs(b-c),e=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],f=fabric.util.array.min(e),g=fabric.util.array.max(e),h=Math.abs(f-g);return{left:b,top:f,width:d,height:h}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(a){return Math.abs(a)<this.minScaleLimit?a<0?-this.minScaleLimit:this.minScaleLimit:a},scale:function(a){return a=this._constrainScale(a),a<0&&(this.flipX=!this.flipX,this.flipY=!this.flipY,a*=-1),this.scaleX=a,this.scaleY=a,this.setCoords(),this},scaleToWidth:function(a){var b=this.getBoundingRectWidth()/this.getWidth();return this.scale(a/this.width/b)},scaleToHeight:function(a){var b=this.getBoundingRectHeight()/this.getHeight();return this.scale(a/this.height/b)},setCoords:function(){var b=a(this.angle),c=this.getViewportTransform(),d=this._calculateCurrentDimensions(!0),e=d.x,f=d.y;e<0&&(e=Math.abs(e));var g=Math.sin(b),h=Math.cos(b),i=e>0?Math.atan(f/e):0,j=e/Math.cos(i)/2,k=Math.cos(i+b)*j,l=Math.sin(i+b)*j,m=fabric.util.transformPoint(this.getCenterPoint(),c),n=new fabric.Point(m.x-k,m.y-l),o=new fabric.Point(n.x+e*h,n.y+e*g),p=new fabric.Point(n.x-f*g,n.y+f*h),q=new fabric.Point(m.x+k,m.y+l),r=new fabric.Point((n.x+p.x)/2,(n.y+p.y)/2),s=new fabric.Point((o.x+n.x)/2,(o.y+n.y)/2),t=new fabric.Point((q.x+o.x)/2,(q.y+o.y)/2),u=new fabric.Point((q.x+p.x)/2,(q.y+p.y)/2),v=new fabric.Point(s.x+g*this.rotatingPointOffset,s.y-h*this.rotatingPointOffset);return this.oCoords={tl:n,tr:o,br:q,bl:p,ml:r,mt:s,mr:t,mb:u,mtr:v},this._setCornerCoords&&this._setCornerCoords(),this},_calcDimensionsTransformMatrix:function(){return[this.scaleX,0,0,this.scaleY,0,0]}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(a){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,a):this.canvas.sendBackwards(this,a),this},bringForward:function(a){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,a):this.canvas.bringForward(this,a),this},moveTo:function(a){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,a):this.canvas.moveTo(this,a),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var a=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",b=this.fillRule,c=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",d=this.strokeWidth?this.strokeWidth:"0",e=this.strokeDashArray?this.strokeDashArray.join(" "):"none",f=this.strokeLineCap?this.strokeLineCap:"butt",g=this.strokeLineJoin?this.strokeLineJoin:"miter",h=this.strokeMiterLimit?this.strokeMiterLimit:"4",i="undefined"!=typeof this.opacity?this.opacity:"1",j=this.visible?"":" visibility: hidden;",k=this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",c,"; ","stroke-width: ",d,"; ","stroke-dasharray: ",e,"; ","stroke-linecap: ",f,"; ","stroke-linejoin: ",g,"; ","stroke-miterlimit: ",h,"; ","fill: ",a,"; ","fill-rule: ",b,"; ","opacity: ",i,";",k,j].join("")},getSvgTransform:function(){if(this.group&&"path-group"===this.group.type)return"";var a=fabric.util.toFixed,b=this.getAngle(),c=!this.canvas||this.canvas.svgViewportTransformation?this.getViewportTransform():[1,0,0,1,0,0],d=fabric.util.transformPoint(this.getCenterPoint(),c),e=fabric.Object.NUM_FRACTION_DIGITS,f="path-group"===this.type?"":"translate("+a(d.x,e)+" "+a(d.y,e)+")",g=0!==b?" rotate("+a(b,e)+")":"",h=1===this.scaleX&&1===this.scaleY&&1===c[0]&&1===c[3]?"":" scale("+a(this.scaleX*c[0],e)+" "+a(this.scaleY*c[3],e)+")",i="path-group"===this.type?this.width*c[0]:0,j=this.flipX?" matrix(-1 0 0 1 "+i+" 0) ":"",k="path-group"===this.type?this.height*c[3]:0,l=this.flipY?" matrix(1 0 0 -1 0 "+k+")":"";return[f,g,h,j,l].join("")},getSvgTransformMatrix:function(){return this.transformMatrix?" matrix("+this.transformMatrix.join(" ")+") ":""},_createBaseSVGMarkup:function(){var a=[];return this.fill&&this.fill.toLive&&a.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&a.push(this.stroke.toSVG(this,!1)),this.shadow&&a.push(this.shadow.toSVG(this)),a}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(a){return this.get(a)!==this.originalState[a]},this)},saveState:function(a){return this.stateProperties.forEach(function(a){this.originalState[a]=this.get(a)},this),a&&a.stateProperties&&a.stateProperties.forEach(function(a){this.originalState[a]=this.get(a)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var a=fabric.util.degreesToRadians,b=function(){return"undefined"!=typeof G_vmlCanvasManager};fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(a){if(!this.hasControls||!this.active)return!1;var d,e,b=a.x,c=a.y;for(var f in this.oCoords)if(this.isControlVisible(f)&&("mtr"!==f||this.hasRotatingPoint)&&(!this.get("lockUniScaling")||"mt"!==f&&"mr"!==f&&"mb"!==f&&"ml"!==f)&&(e=this._getImageLines(this.oCoords[f].corner),d=this._findCrossPoints({x:b,y:c},e),0!==d&&d%2===1))return this.__corner=f,f;return!1},_setCornerCoords:function(){var g,h,b=this.oCoords,c=a(45-this.angle),d=.707106*this.cornerSize,e=d*Math.cos(c),f=d*Math.sin(c);for(var i in b)g=b[i].x,h=b[i].y,b[i].corner={tl:{x:g-f,y:h-e},tr:{x:g+e,y:h-f},bl:{x:g-e,y:h+f},br:{x:g+f,y:h+e}}},_getNonTransformedDimensions:function(){var a=this.strokeWidth,b=this.width,c=this.height,d="round"===this.strokeLineCap||"square"===this.strokeLineCap,e="line"===this.type&&0===this.width,f="line"===this.type&&0===this.height,g=e||f,h=d&&f||!g,i=d&&e||!g;return e?b=a:f&&(c=a),h&&(b+=b<0?-a:a),i&&(c+=c<0?-a:a),{x:b,y:c}},_getTransformedDimensions:function(a){a||(a=this._getNonTransformedDimensions());var b=this._calcDimensionsTransformMatrix();return fabric.util.transformPoint(a,b,!0)},_calculateCurrentDimensions:function(a){var b=this.getViewportTransform(),c=this._getTransformedDimensions(),d=c.x,e=c.y;return d+=2*this.padding,e+=2*this.padding,a?fabric.util.transformPoint(new fabric.Point(d,e),b,!0):{x:d,y:e}},drawBorders:function(a){if(!this.hasBorders)return this;a.save(),a.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,a.strokeStyle=this.borderColor,a.lineWidth=1/this.borderScaleFactor;var b=this._calculateCurrentDimensions(!0),c=b.x,d=b.y;if(this.group&&(c*=this.group.scaleX,d*=this.group.scaleY),a.strokeRect(~~-(c/2)-.5,~~-(d/2)-.5,~~c+1,~~d+1),this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var e=-d/2;a.beginPath(),a.moveTo(0,e),a.lineTo(0,e-this.rotatingPointOffset),a.closePath(),a.stroke()}return a.restore(),this},drawControls:function(a){if(!this.hasControls)return this;var b=this._calculateCurrentDimensions(!0),c=b.x,d=b.y,e=-(c/2),f=-(d/2),g=this.cornerSize/2,h=this.transparentCorners?"strokeRect":"fillRect";return a.save(),a.lineWidth=1,a.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,a.strokeStyle=a.fillStyle=this.cornerColor,this._drawControl("tl",a,h,e-g,f-g),this._drawControl("tr",a,h,e+c-g,f-g),this._drawControl("bl",a,h,e-g,f+d-g),this._drawControl("br",a,h,e+c-g,f+d-g),this.get("lockUniScaling")||(this._drawControl("mt",a,h,e+c/2-g,f-g),this._drawControl("mb",a,h,e+c/2-g,f+d-g),this._drawControl("mr",a,h,e+c-g,f+d/2-g),this._drawControl("ml",a,h,e-g,f+d/2-g)),this.hasRotatingPoint&&this._drawControl("mtr",a,h,e+c/2-g,f-this.rotatingPointOffset-g),a.restore(),this},_drawControl:function(a,c,d,e,f){if(this.isControlVisible(a)){var g=this.cornerSize;b()||this.transparentCorners||c.clearRect(e,f,g,g),c[d](e,f,g,g)}},isControlVisible:function(a){return this._getControlsVisibility()[a]},setControlVisible:function(a,b){return this._getControlsVisibility()[a]=b,this},setControlsVisibility:function(a){a||(a={});for(var b in a)this.setControlVisible(b,a[b]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(a,b){b=b||{};var c=function(){},d=b.onComplete||c,e=b.onChange||c,f=this;return fabric.util.animate({startValue:a.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(b){a.set("left",b),f.renderAll(),e()},onComplete:function(){a.setCoords(),d()}}),this},fxCenterObjectV:function(a,b){b=b||{};var c=function(){},d=b.onComplete||c,e=b.onChange||c,f=this;return fabric.util.animate({startValue:a.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(b){a.set("top",b),f.renderAll(),e()},onComplete:function(){a.setCoords(),d()}}),this},fxRemove:function(a,b){b=b||{};var c=function(){},d=b.onComplete||c,e=b.onChange||c,f=this;return fabric.util.animate({startValue:a.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){a.set("active",!1)},onChange:function(b){a.set("opacity",b),f.renderAll(),e()},onComplete:function(){f.remove(a),d()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&"object"==typeof arguments[0]){var b,c,a=[];for(b in arguments[0])a.push(b);for(var d=0,e=a.length;d<e;d++)b=a[d],c=d!==e-1,this._animate(b,arguments[0][b],arguments[1],c)}else this._animate.apply(this,arguments);return this},_animate:function(a,b,c,d){var f,e=this;b=b.toString(),c=c?fabric.util.object.clone(c):{},~a.indexOf(".")&&(f=a.split("."));var g=f?this.get(f[0])[f[1]]:this.get(a);"from"in c||(c.from=g),b=~b.indexOf("=")?g+parseFloat(b.replace("=","")):parseFloat(b),fabric.util.animate({startValue:c.from,endValue:b,byValue:c.by,easing:c.easing,duration:c.duration,abort:c.abort&&function(){return c.abort.call(e)},onChange:function(b){f?e[f[0]][f[1]]=b:e.set(a,b),d||c.onChange&&c.onChange();
},onComplete:function(){d||(e.setCoords(),c.onComplete&&c.onComplete())}})}}),function(a){"use strict";function f(a,b){var c=a.origin,d=a.axis1,e=a.axis2,f=a.dimension,g=b.nearest,h=b.center,i=b.farthest;return function(){switch(this.get(c)){case g:return Math.min(this.get(d),this.get(e));case h:return Math.min(this.get(d),this.get(e))+.5*this.get(f);case i:return Math.max(this.get(d),this.get(e))}}}var b=a.fabric||(a.fabric={}),c=b.util.object.extend,d={x1:1,x2:1,y1:1,y2:1},e=b.StaticCanvas.supports("setLineDash");return b.Line?void b.warn("fabric.Line is already defined"):(b.Line=b.util.createClass(b.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,initialize:function(a,b){b=b||{},a||(a=[0,0,0,0]),this.callSuper("initialize",b),this.set("x1",a[0]),this.set("y1",a[1]),this.set("x2",a[2]),this.set("y2",a[3]),this._setWidthHeight(b)},_setWidthHeight:function(a){a||(a={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in a?a.left:this._getLeftToOriginX(),this.top="top"in a?a.top:this._getTopToOriginY()},_set:function(a,b){return this.callSuper("_set",a,b),"undefined"!=typeof d[a]&&this._setWidthHeight(),this},_getLeftToOriginX:f({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:f({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(a,b){if(a.beginPath(),b){var c=this.getCenterPoint();a.translate(c.x-this.strokeWidth/2,c.y-this.strokeWidth/2)}if(!this.strokeDashArray||this.strokeDashArray&&e){var d=this.calcLinePoints();a.moveTo(d.x1,d.y1),a.lineTo(d.x2,d.y2)}a.lineWidth=this.strokeWidth;var f=a.strokeStyle;a.strokeStyle=this.stroke||a.fillStyle,this.stroke&&this._renderStroke(a),a.strokeStyle=f},_renderDashedStroke:function(a){var c=this.calcLinePoints();a.beginPath(),b.util.drawDashedLine(a,c.x1,c.y1,c.x2,c.y2,this.strokeDashArray),a.closePath()},toObject:function(a){return c(this.callSuper("toObject",a),this.calcLinePoints())},calcLinePoints:function(){var a=this.x1<=this.x2?-1:1,b=this.y1<=this.y2?-1:1,c=a*this.width*.5,d=b*this.height*.5,e=a*this.width*-.5,f=b*this.height*-.5;return{x1:c,x2:e,y1:d,y2:f}},toSVG:function(a){var b=this._createBaseSVGMarkup(),c={x1:this.x1,x2:this.x2,y1:this.y1,y2:this.y2};return this.group&&"path-group"===this.group.type||(c=this.calcLinePoints()),b.push("<line ",'x1="',c.x1,'" y1="',c.y1,'" x2="',c.x2,'" y2="',c.y2,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform(),this.getSvgTransformMatrix(),'"/>\n'),a?a(b.join("")):b.join("")},complexity:function(){return 1}}),b.Line.ATTRIBUTE_NAMES=b.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),b.Line.fromElement=function(a,d){var e=b.parseAttributes(a,b.Line.ATTRIBUTE_NAMES),f=[e.x1||0,e.y1||0,e.x2||0,e.y2||0];return new b.Line(f,c(e,d))},void(b.Line.fromObject=function(a){var c=[a.x1,a.y1,a.x2,a.y2];return new b.Line(c,a)}))}("undefined"!=typeof exports?exports:this),function(a){"use strict";function e(a){return"radius"in a&&a.radius>=0}var b=a.fabric||(a.fabric={}),c=Math.PI,d=b.util.object.extend;return b.Circle?void b.warn("fabric.Circle is already defined."):(b.Circle=b.util.createClass(b.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*c,initialize:function(a){a=a||{},this.callSuper("initialize",a),this.set("radius",a.radius||0),this.startAngle=a.startAngle||this.startAngle,this.endAngle=a.endAngle||this.endAngle},_set:function(a,b){return this.callSuper("_set",a,b),"radius"===a&&this.setRadius(b),this},toObject:function(a){return d(this.callSuper("toObject",a),{radius:this.get("radius"),startAngle:this.startAngle,endAngle:this.endAngle})},toSVG:function(a){var b=this._createBaseSVGMarkup(),d=0,e=0,f=(this.endAngle-this.startAngle)%(2*c);if(0===f)this.group&&"path-group"===this.group.type&&(d=this.left+this.radius,e=this.top+this.radius),b.push("<circle ",'cx="'+d+'" cy="'+e+'" ','r="',this.radius,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform()," ",this.getSvgTransformMatrix(),'"/>\n');else{var g=Math.cos(this.startAngle)*this.radius,h=Math.sin(this.startAngle)*this.radius,i=Math.cos(this.endAngle)*this.radius,j=Math.sin(this.endAngle)*this.radius,k=f>c?"1":"0";b.push('<path d="M '+g+" "+h," A "+this.radius+" "+this.radius," 0 ",+k+" 1"," "+i+" "+j,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform()," ",this.getSvgTransformMatrix(),'"/>\n')}return a?a(b.join("")):b.join("")},_render:function(a,b){a.beginPath(),a.arc(b?this.left+this.radius:0,b?this.top+this.radius:0,this.radius,this.startAngle,this.endAngle,!1),this._renderFill(a),this._renderStroke(a)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(a){return this.radius=a,this.set("width",2*a).set("height",2*a)},complexity:function(){return 1}}),b.Circle.ATTRIBUTE_NAMES=b.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),b.Circle.fromElement=function(a,c){c||(c={});var f=b.parseAttributes(a,b.Circle.ATTRIBUTE_NAMES);if(!e(f))throw new Error("value of `r` attribute is required and can not be negative");f.left=f.left||0,f.top=f.top||0;var g=new b.Circle(d(f,c));return g.left-=g.radius,g.top-=g.radius,g},void(b.Circle.fromObject=function(a){return new b.Circle(a)}))}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={});return b.Triangle?void b.warn("fabric.Triangle is already defined"):(b.Triangle=b.util.createClass(b.Object,{type:"triangle",initialize:function(a){a=a||{},this.callSuper("initialize",a),this.set("width",a.width||100).set("height",a.height||100)},_render:function(a){var b=this.width/2,c=this.height/2;a.beginPath(),a.moveTo(-b,c),a.lineTo(0,-c),a.lineTo(b,c),a.closePath(),this._renderFill(a),this._renderStroke(a)},_renderDashedStroke:function(a){var c=this.width/2,d=this.height/2;a.beginPath(),b.util.drawDashedLine(a,-c,d,0,-d,this.strokeDashArray),b.util.drawDashedLine(a,0,-d,c,d,this.strokeDashArray),b.util.drawDashedLine(a,c,d,-c,d,this.strokeDashArray),a.closePath()},toSVG:function(a){var b=this._createBaseSVGMarkup(),c=this.width/2,d=this.height/2,e=[-c+" "+d,"0 "+-d,c+" "+d].join(",");return b.push("<polygon ",'points="',e,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform(),'"/>'),a?a(b.join("")):b.join("")},complexity:function(){return 1}}),void(b.Triangle.fromObject=function(a){return new b.Triangle(a)}))}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=2*Math.PI,d=b.util.object.extend;return b.Ellipse?void b.warn("fabric.Ellipse is already defined."):(b.Ellipse=b.util.createClass(b.Object,{type:"ellipse",rx:0,ry:0,initialize:function(a){a=a||{},this.callSuper("initialize",a),this.set("rx",a.rx||0),this.set("ry",a.ry||0)},_set:function(a,b){switch(this.callSuper("_set",a,b),a){case"rx":this.rx=b,this.set("width",2*b);break;case"ry":this.ry=b,this.set("height",2*b)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(a){return d(this.callSuper("toObject",a),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(a){var b=this._createBaseSVGMarkup(),c=0,d=0;return this.group&&"path-group"===this.group.type&&(c=this.left+this.rx,d=this.top+this.ry),b.push("<ellipse ",'cx="',c,'" cy="',d,'" ','rx="',this.rx,'" ry="',this.ry,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform(),this.getSvgTransformMatrix(),'"/>\n'),a?a(b.join("")):b.join("")},_render:function(a,b){a.beginPath(),a.save(),a.transform(1,0,0,this.ry/this.rx,0,0),a.arc(b?this.left+this.rx:0,b?(this.top+this.ry)*this.rx/this.ry:0,this.rx,0,c,!1),a.restore(),this._renderFill(a),this._renderStroke(a)},complexity:function(){return 1}}),b.Ellipse.ATTRIBUTE_NAMES=b.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),b.Ellipse.fromElement=function(a,c){c||(c={});var e=b.parseAttributes(a,b.Ellipse.ATTRIBUTE_NAMES);e.left=e.left||0,e.top=e.top||0;var f=new b.Ellipse(d(e,c));return f.top-=f.ry,f.left-=f.rx,f},void(b.Ellipse.fromObject=function(a){return new b.Ellipse(a)}))}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend;if(b.Rect)return void b.warn("fabric.Rect is already defined");var d=b.Object.prototype.stateProperties.concat();d.push("rx","ry","x","y"),b.Rect=b.util.createClass(b.Object,{stateProperties:d,type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(a){a=a||{},this.callSuper("initialize",a),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(a,b){if(1===this.width&&1===this.height)return void a.fillRect(0,0,1,1);var c=this.rx?Math.min(this.rx,this.width/2):0,d=this.ry?Math.min(this.ry,this.height/2):0,e=this.width,f=this.height,g=b?this.left:-this.width/2,h=b?this.top:-this.height/2,i=0!==c||0!==d,j=.4477152502;a.beginPath(),a.moveTo(g+c,h),a.lineTo(g+e-c,h),i&&a.bezierCurveTo(g+e-j*c,h,g+e,h+j*d,g+e,h+d),a.lineTo(g+e,h+f-d),i&&a.bezierCurveTo(g+e,h+f-j*d,g+e-j*c,h+f,g+e-c,h+f),a.lineTo(g+c,h+f),i&&a.bezierCurveTo(g+j*c,h+f,g,h+f-j*d,g,h+f-d),a.lineTo(g,h+d),i&&a.bezierCurveTo(g,h+j*d,g+j*c,h,g+c,h),a.closePath(),this._renderFill(a),this._renderStroke(a)},_renderDashedStroke:function(a){var c=-this.width/2,d=-this.height/2,e=this.width,f=this.height;a.beginPath(),b.util.drawDashedLine(a,c,d,c+e,d,this.strokeDashArray),b.util.drawDashedLine(a,c+e,d,c+e,d+f,this.strokeDashArray),b.util.drawDashedLine(a,c+e,d+f,c,d+f,this.strokeDashArray),b.util.drawDashedLine(a,c,d+f,c,d,this.strokeDashArray),a.closePath()},toObject:function(a){var b=c(this.callSuper("toObject",a),{rx:this.get("rx")||0,ry:this.get("ry")||0});return this.includeDefaultValues||this._removeDefaultValues(b),b},toSVG:function(a){var b=this._createBaseSVGMarkup(),c=this.left,d=this.top;return this.group&&"path-group"===this.group.type||(c=-this.width/2,d=-this.height/2),b.push("<rect ",'x="',c,'" y="',d,'" rx="',this.get("rx"),'" ry="',this.get("ry"),'" width="',this.width,'" height="',this.height,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform(),this.getSvgTransformMatrix(),'"/>\n'),a?a(b.join("")):b.join("")},complexity:function(){return 1}}),b.Rect.ATTRIBUTE_NAMES=b.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),b.Rect.fromElement=function(a,d){if(!a)return null;d=d||{};var e=b.parseAttributes(a,b.Rect.ATTRIBUTE_NAMES);e.left=e.left||0,e.top=e.top||0;var f=new b.Rect(c(d?b.util.object.clone(d):{},e));return f.visible=f.width>0&&f.height>0,f},b.Rect.fromObject=function(a){return new b.Rect(a)}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={});return b.Polyline?void b.warn("fabric.Polyline is already defined"):(b.Polyline=b.util.createClass(b.Object,{type:"polyline",points:null,minX:0,minY:0,initialize:function(a,c){return b.Polygon.prototype.initialize.call(this,a,c)},_calcDimensions:function(){return b.Polygon.prototype._calcDimensions.call(this)},_applyPointOffset:function(){return b.Polygon.prototype._applyPointOffset.call(this)},toObject:function(a){return b.Polygon.prototype.toObject.call(this,a)},toSVG:function(a){return b.Polygon.prototype.toSVG.call(this,a)},_render:function(a){b.Polygon.prototype.commonRender.call(this,a)&&(this._renderFill(a),this._renderStroke(a))},_renderDashedStroke:function(a){var c,d;a.beginPath();for(var e=0,f=this.points.length;e<f;e++)c=this.points[e],d=this.points[e+1]||c,b.util.drawDashedLine(a,c.x,c.y,d.x,d.y,this.strokeDashArray)},complexity:function(){return this.get("points").length}}),b.Polyline.ATTRIBUTE_NAMES=b.SHARED_ATTRIBUTES.concat(),b.Polyline.fromElement=function(a,c){if(!a)return null;c||(c={});var d=b.parsePointsAttribute(a.getAttribute("points")),e=b.parseAttributes(a,b.Polyline.ATTRIBUTE_NAMES);return new b.Polyline(d,b.util.object.extend(e,c))},void(b.Polyline.fromObject=function(a){var c=a.points;return new b.Polyline(c,a,!0)}))}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend,d=b.util.array.min,e=b.util.array.max,f=b.util.toFixed;return b.Polygon?void b.warn("fabric.Polygon is already defined"):(b.Polygon=b.util.createClass(b.Object,{type:"polygon",points:null,minX:0,minY:0,initialize:function(a,b){b=b||{},this.points=a||[],this.callSuper("initialize",b),this._calcDimensions(),"top"in b||(this.top=this.minY),"left"in b||(this.left=this.minX)},_calcDimensions:function(){var a=this.points,b=d(a,"x"),c=d(a,"y"),f=e(a,"x"),g=e(a,"y");this.width=f-b||0,this.height=g-c||0,this.minX=b||0,this.minY=c||0},_applyPointOffset:function(){this.points.forEach(function(a){a.x-=this.minX+this.width/2,a.y-=this.minY+this.height/2},this)},toObject:function(a){return c(this.callSuper("toObject",a),{points:this.points.concat()})},toSVG:function(a){for(var b=[],c=this._createBaseSVGMarkup(),d=0,e=this.points.length;d<e;d++)b.push(f(this.points[d].x,2),",",f(this.points[d].y,2)," ");return c.push("<",this.type," ",'points="',b.join(""),'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform()," ",this.getSvgTransformMatrix(),'"/>\n'),a?a(c.join("")):c.join("")},_render:function(a){this.commonRender(a)&&(this._renderFill(a),(this.stroke||this.strokeDashArray)&&(a.closePath(),this._renderStroke(a)))},commonRender:function(a){var b,c=this.points.length;if(!c||isNaN(this.points[c-1].y))return!1;a.beginPath(),this._applyPointOffset&&(this.group&&"path-group"===this.group.type||this._applyPointOffset(),this._applyPointOffset=null),a.moveTo(this.points[0].x,this.points[0].y);for(var d=0;d<c;d++)b=this.points[d],a.lineTo(b.x,b.y);return!0},_renderDashedStroke:function(a){b.Polyline.prototype._renderDashedStroke.call(this,a),a.closePath()},complexity:function(){return this.points.length}}),b.Polygon.ATTRIBUTE_NAMES=b.SHARED_ATTRIBUTES.concat(),b.Polygon.fromElement=function(a,d){if(!a)return null;d||(d={});var e=b.parsePointsAttribute(a.getAttribute("points")),f=b.parseAttributes(a,b.Polygon.ATTRIBUTE_NAMES);return new b.Polygon(e,c(f,d))},void(b.Polygon.fromObject=function(a){return new b.Polygon(a.points,a,!0)}))}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.array.min,d=b.util.array.max,e=b.util.object.extend,f=Object.prototype.toString,g=b.util.drawArc,h={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},i={m:"l",M:"L"};return b.Path?void b.warn("fabric.Path is already defined"):(b.Path=b.util.createClass(b.Object,{type:"path",path:null,minX:0,minY:0,initialize:function(a,b){b=b||{},this.setOptions(b),a||(a=[]);var c="[object Array]"===f.call(a);this.path=c?a:a.match&&a.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi),this.path&&(c||(this.path=this._parsePath()),this._setPositionDimensions(b),b.sourcePath&&this.setSourcePath(b.sourcePath))},_setPositionDimensions:function(a){var b=this._parseDimensions();this.minX=b.left,this.minY=b.top,this.width=b.width,this.height=b.height,"undefined"==typeof a.left&&(this.left=b.left+("center"===this.originX?this.width/2:"right"===this.originX?this.width:0)),"undefined"==typeof a.top&&(this.top=b.top+("center"===this.originY?this.height/2:"bottom"===this.originY?this.height:0)),this.pathOffset=this.pathOffset||{x:this.minX+this.width/2,y:this.minY+this.height/2}},_render:function(a){var b,k,l,c=null,d=0,e=0,f=0,h=0,i=0,j=0,m=-this.pathOffset.x,n=-this.pathOffset.y;this.group&&"path-group"===this.group.type&&(m=0,n=0),a.beginPath();for(var o=0,p=this.path.length;o<p;++o){switch(b=this.path[o],b[0]){case"l":f+=b[1],h+=b[2],a.lineTo(f+m,h+n);break;case"L":f=b[1],h=b[2],a.lineTo(f+m,h+n);break;case"h":f+=b[1],a.lineTo(f+m,h+n);break;case"H":f=b[1],a.lineTo(f+m,h+n);break;case"v":h+=b[1],a.lineTo(f+m,h+n);break;case"V":h=b[1],a.lineTo(f+m,h+n);break;case"m":f+=b[1],h+=b[2],d=f,e=h,a.moveTo(f+m,h+n);break;case"M":f=b[1],h=b[2],d=f,e=h,a.moveTo(f+m,h+n);break;case"c":k=f+b[5],l=h+b[6],i=f+b[3],j=h+b[4],a.bezierCurveTo(f+b[1]+m,h+b[2]+n,i+m,j+n,k+m,l+n),f=k,h=l;break;case"C":f=b[5],h=b[6],i=b[3],j=b[4],a.bezierCurveTo(b[1]+m,b[2]+n,i+m,j+n,f+m,h+n);break;case"s":k=f+b[3],l=h+b[4],null===c[0].match(/[CcSs]/)?(i=f,j=h):(i=2*f-i,j=2*h-j),a.bezierCurveTo(i+m,j+n,f+b[1]+m,h+b[2]+n,k+m,l+n),i=f+b[1],j=h+b[2],f=k,h=l;break;case"S":k=b[3],l=b[4],null===c[0].match(/[CcSs]/)?(i=f,j=h):(i=2*f-i,j=2*h-j),a.bezierCurveTo(i+m,j+n,b[1]+m,b[2]+n,k+m,l+n),f=k,h=l,i=b[1],j=b[2];break;case"q":k=f+b[3],l=h+b[4],i=f+b[1],j=h+b[2],a.quadraticCurveTo(i+m,j+n,k+m,l+n),f=k,h=l;break;case"Q":k=b[3],l=b[4],a.quadraticCurveTo(b[1]+m,b[2]+n,k+m,l+n),f=k,h=l,i=b[1],j=b[2];break;case"t":k=f+b[1],l=h+b[2],null===c[0].match(/[QqTt]/)?(i=f,j=h):(i=2*f-i,j=2*h-j),a.quadraticCurveTo(i+m,j+n,k+m,l+n),f=k,h=l;break;case"T":k=b[1],l=b[2],null===c[0].match(/[QqTt]/)?(i=f,j=h):(i=2*f-i,j=2*h-j),a.quadraticCurveTo(i+m,j+n,k+m,l+n),f=k,h=l;break;case"a":g(a,f+m,h+n,[b[1],b[2],b[3],b[4],b[5],b[6]+f+m,b[7]+h+n]),f+=b[6],h+=b[7];break;case"A":g(a,f+m,h+n,[b[1],b[2],b[3],b[4],b[5],b[6]+m,b[7]+n]),f=b[6],h=b[7];break;case"z":case"Z":f=d,h=e,a.closePath()}c=b}this._renderFill(a),this._renderStroke(a)},toString:function(){return"#<fabric.Path ("+this.complexity()+'): { "top": '+this.top+', "left": '+this.left+" }>"},toObject:function(a){var b=e(this.callSuper("toObject",a),{path:this.path.map(function(a){return a.slice()}),pathOffset:this.pathOffset});return this.sourcePath&&(b.sourcePath=this.sourcePath),this.transformMatrix&&(b.transformMatrix=this.transformMatrix),b},toDatalessObject:function(a){var b=this.toObject(a);return this.sourcePath&&(b.path=this.sourcePath),delete b.sourcePath,b},toSVG:function(a){for(var b=[],c=this._createBaseSVGMarkup(),d="",e=0,f=this.path.length;e<f;e++)b.push(this.path[e].join(" "));var g=b.join(" ");return this.group&&"path-group"===this.group.type||(d=" translate("+-this.pathOffset.x+", "+-this.pathOffset.y+") "),c.push("<path ",'d="',g,'" style="',this.getSvgStyles(),'" transform="',this.getSvgTransform(),d,this.getSvgTransformMatrix(),'" stroke-linecap="round" ',"/>\n"),a?a(c.join("")):c.join("")},complexity:function(){return this.path.length},_parsePath:function(){for(var c,d,f,g,k,a=[],b=[],e=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi,j=0,l=this.path.length;j<l;j++){for(c=this.path[j],g=c.slice(1).trim(),b.length=0;f=e.exec(g);)b.push(f[0]);k=[c.charAt(0)];for(var m=0,n=b.length;m<n;m++)d=parseFloat(b[m]),isNaN(d)||k.push(d);var o=k[0],p=h[o.toLowerCase()],q=i[o]||o;if(k.length-1>p)for(var r=1,s=k.length;r<s;r+=p)a.push([o].concat(k.slice(r,r+p))),o=q;else a.push(k)}return a},_parseDimensions:function(){for(var f,n,o,p,a=[],e=[],g=null,h=0,i=0,j=0,k=0,l=0,m=0,q=0,r=this.path.length;q<r;++q){switch(f=this.path[q],f[0]){case"l":j+=f[1],k+=f[2],p=[];break;case"L":j=f[1],k=f[2],p=[];break;case"h":j+=f[1],p=[];break;case"H":j=f[1],p=[];break;case"v":k+=f[1],p=[];break;case"V":k=f[1],p=[];break;case"m":j+=f[1],k+=f[2],h=j,i=k,p=[];break;case"M":j=f[1],k=f[2],h=j,i=k,p=[];break;case"c":n=j+f[5],o=k+f[6],l=j+f[3],m=k+f[4],p=b.util.getBoundsOfCurve(j,k,j+f[1],k+f[2],l,m,n,o),j=n,k=o;break;case"C":j=f[5],k=f[6],l=f[3],m=f[4],p=b.util.getBoundsOfCurve(j,k,f[1],f[2],l,m,j,k);break;case"s":n=j+f[3],o=k+f[4],null===g[0].match(/[CcSs]/)?(l=j,m=k):(l=2*j-l,m=2*k-m),p=b.util.getBoundsOfCurve(j,k,l,m,j+f[1],k+f[2],n,o),l=j+f[1],m=k+f[2],j=n,k=o;break;case"S":n=f[3],o=f[4],null===g[0].match(/[CcSs]/)?(l=j,m=k):(l=2*j-l,m=2*k-m),p=b.util.getBoundsOfCurve(j,k,l,m,f[1],f[2],n,o),j=n,k=o,l=f[1],m=f[2];break;case"q":n=j+f[3],o=k+f[4],l=j+f[1],m=k+f[2],p=b.util.getBoundsOfCurve(j,k,l,m,l,m,n,o),j=n,k=o;break;case"Q":l=f[1],m=f[2],p=b.util.getBoundsOfCurve(j,k,l,m,l,m,f[3],f[4]),j=f[3],k=f[4];break;case"t":n=j+f[1],o=k+f[2],null===g[0].match(/[QqTt]/)?(l=j,m=k):(l=2*j-l,m=2*k-m),p=b.util.getBoundsOfCurve(j,k,l,m,l,m,n,o),j=n,k=o;break;case"T":n=f[1],o=f[2],null===g[0].match(/[QqTt]/)?(l=j,m=k):(l=2*j-l,m=2*k-m),p=b.util.getBoundsOfCurve(j,k,l,m,l,m,n,o),j=n,k=o;break;case"a":p=b.util.getBoundsOfArc(j,k,f[1],f[2],f[3],f[4],f[5],f[6]+j,f[7]+k),j+=f[6],k+=f[7];break;case"A":p=b.util.getBoundsOfArc(j,k,f[1],f[2],f[3],f[4],f[5],f[6],f[7]),j=f[6],k=f[7];break;case"z":case"Z":j=h,k=i}g=f,p.forEach(function(b){a.push(b.x),e.push(b.y)}),a.push(j),e.push(k)}var s=c(a)||0,t=c(e)||0,u=d(a)||0,v=d(e)||0,w=u-s,x=v-t,y={left:s,top:t,width:w,height:x};return y}}),b.Path.fromObject=function(a,c){"string"==typeof a.path?b.loadSVGFromURL(a.path,function(d){var e=d[0],f=a.path;delete a.path,b.util.object.extend(e,a),e.setSourcePath(f),c(e)}):c(new b.Path(a.path,a))},b.Path.ATTRIBUTE_NAMES=b.SHARED_ATTRIBUTES.concat(["d"]),b.Path.fromElement=function(a,c,d){var f=b.parseAttributes(a,b.Path.ATTRIBUTE_NAMES);c&&c(new b.Path(f.d,e(f,d)))},void(b.Path.async=!0))}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend,d=b.util.array.invoke,e=b.Object.prototype.toObject;return b.PathGroup?void b.warn("fabric.PathGroup is already defined"):(b.PathGroup=b.util.createClass(b.Path,{type:"path-group",fill:"",initialize:function(a,b){b=b||{},this.paths=a||[];for(var c=this.paths.length;c--;)this.paths[c].group=this;b.toBeParsed&&(this.parseDimensionsFromPaths(b),delete b.toBeParsed),this.setOptions(b),this.setCoords(),b.sourcePath&&this.setSourcePath(b.sourcePath)},parseDimensionsFromPaths:function(a){for(var c,d,g,h,i,j,e=[],f=[],k=this.paths.length;k--;){g=this.paths[k],h=g.height+g.strokeWidth,i=g.width+g.strokeWidth,c=[{x:g.left,y:g.top},{x:g.left+i,y:g.top},{x:g.left,y:g.top+h},{x:g.left+i,y:g.top+h}],j=this.paths[k].transformMatrix;for(var l=0;l<c.length;l++)d=c[l],j&&(d=b.util.transformPoint(d,j,!1)),e.push(d.x),f.push(d.y)}a.width=Math.max.apply(null,e),a.height=Math.max.apply(null,f)},render:function(a){if(this.visible){a.save(),this.transformMatrix&&a.transform.apply(a,this.transformMatrix),this.transform(a),this._setShadow(a),this.clipTo&&b.util.clipContext(this,a),a.translate(-this.width/2,-this.height/2);for(var c=0,d=this.paths.length;c<d;++c)this.paths[c].render(a,!0);this.clipTo&&a.restore(),a.restore()}},_set:function(a,b){if("fill"===a&&b&&this.isSameColor())for(var c=this.paths.length;c--;)this.paths[c]._set(a,b);return this.callSuper("_set",a,b)},toObject:function(a){var b=c(e.call(this,a),{paths:d(this.getObjects(),"toObject",a)});return this.sourcePath&&(b.sourcePath=this.sourcePath),b},toDatalessObject:function(a){var b=this.toObject(a);return this.sourcePath&&(b.paths=this.sourcePath),b},toSVG:function(a){for(var b=this.getObjects(),c=this.getPointByOrigin("left","top"),d="translate("+c.x+" "+c.y+")",e=["<g ",'style="',this.getSvgStyles(),'" ','transform="',this.getSvgTransformMatrix(),d,this.getSvgTransform(),'" ',">\n"],f=0,g=b.length;f<g;f++)e.push(b[f].toSVG(a));return e.push("</g>\n"),a?a(e.join("")):e.join("")},toString:function(){return"#<fabric.PathGroup ("+this.complexity()+"): { top: "+this.top+", left: "+this.left+" }>"},isSameColor:function(){var a=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(b){return(b.get("fill")||"").toLowerCase()===a})},complexity:function(){return this.paths.reduce(function(a,b){return a+(b&&b.complexity?b.complexity():0)},0)},getObjects:function(){return this.paths}}),b.PathGroup.fromObject=function(a,c){"string"==typeof a.paths?b.loadSVGFromURL(a.paths,function(d){var e=a.paths;delete a.paths;var f=b.util.groupSVGElements(d,a,e);c(f)}):b.util.enlivenObjects(a.paths,function(d){delete a.paths,c(new b.PathGroup(d,a))})},void(b.PathGroup.async=!0))}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend,d=b.util.array.min,e=b.util.array.max,f=b.util.array.invoke;if(!b.Group){var g={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};b.Group=b.util.createClass(b.Object,b.Collection,{type:"group",strokeWidth:0,initialize:function(a,b,c){b=b||{},this._objects=[],c&&this.callSuper("initialize",b),this._objects=a||[];for(var d=this._objects.length;d--;)this._objects[d].group=this;this.originalState={},b.originX&&(this.originX=b.originX),b.originY&&(this.originY=b.originY),c?this._updateObjectsCoords(!0):(this._calcBounds(),this._updateObjectsCoords(),this.callSuper("initialize",b)),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(a){for(var b=this._objects.length;b--;)this._updateObjectCoords(this._objects[b],a)},_updateObjectCoords:function(a,b){if(a.__origHasControls=a.hasControls,a.hasControls=!1,!b){var c=a.getLeft(),d=a.getTop(),e=this.getCenterPoint();a.set({originalLeft:c,originalTop:d,left:c-e.x,top:d-e.y}),a.setCoords()}},toString:function(){return"#<fabric.Group: ("+this.complexity()+")>"},addWithUpdate:function(a){return this._restoreObjectsState(),a&&(this._objects.push(a),a.group=this,a._set("canvas",this.canvas)),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(a){a.set("active",!0),a.group=this},removeWithUpdate:function(a){return this._moveFlippedObject(a),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(a),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(a){a.group=this,a._set("canvas",this.canvas)},_onObjectRemoved:function(a){delete a.group,a.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textAlign:!0,backgroundColor:!0},_set:function(a,b){var c=this._objects.length;if(this.delegatedProperties[a]||"canvas"===a)for(;c--;)this._objects[c].set(a,b);else for(;c--;)this._objects[c].setOnGroup(a,b);this.callSuper("_set",a,b)},toObject:function(a){return c(this.callSuper("toObject",a),{objects:f(this._objects,"toObject",a)})},render:function(a){if(this.visible){a.save(),this.transformMatrix&&a.transform.apply(a,this.transformMatrix),this.transform(a),this.clipTo&&b.util.clipContext(this,a);for(var c=0,d=this._objects.length;c<d;c++)this._renderObject(this._objects[c],a);this.clipTo&&a.restore(),a.restore()}},_renderControls:function(a,b){this.callSuper("_renderControls",a,b);for(var c=0,d=this._objects.length;c<d;c++)this._objects[c]._renderControls(a)},_renderObject:function(a,b){if(a.visible){var c=a.hasRotatingPoint;a.hasRotatingPoint=!1,a.render(b),a.hasRotatingPoint=c}},_restoreObjectsState:function(){return this._objects.forEach(this._restoreObjectState,this),this},realizeTransform:function(a){return this._moveFlippedObject(a),this._setObjectPosition(a),a},_moveFlippedObject:function(a){var b=a.get("originX"),c=a.get("originY"),d=a.getCenterPoint();a.set({originX:"center",originY:"center",left:d.x,top:d.y}),this._toggleFlipping(a);var e=a.getPointByOrigin(b,c);return a.set({originX:b,originY:c,left:e.x,top:e.y}),this},_toggleFlipping:function(a){this.flipX&&(a.toggle("flipX"),a.set("left",-a.get("left")),a.setAngle(-a.getAngle())),this.flipY&&(a.toggle("flipY"),a.set("top",-a.get("top")),a.setAngle(-a.getAngle()))},_restoreObjectState:function(a){return this._setObjectPosition(a),a.setCoords(),a.hasControls=a.__origHasControls,delete a.__origHasControls,a.set("active",!1),a.setCoords(),delete a.group,this},_setObjectPosition:function(a){var b=this.getCenterPoint(),c=this._getRotatedLeftTop(a);a.set({angle:a.getAngle()+this.getAngle(),left:b.x+c.left,top:b.y+c.top,scaleX:a.get("scaleX")*this.get("scaleX"),scaleY:a.get("scaleY")*this.get("scaleY")})},_getRotatedLeftTop:function(a){var b=this.getAngle()*(Math.PI/180);return{left:-Math.sin(b)*a.getTop()*this.get("scaleY")+Math.cos(b)*a.getLeft()*this.get("scaleX"),top:Math.cos(b)*a.getTop()*this.get("scaleY")+Math.sin(b)*a.getLeft()*this.get("scaleX")}},destroy:function(){return this._objects.forEach(this._moveFlippedObject,this),this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(a){a.setCoords()}),this},_calcBounds:function(a){for(var d,e,i,b=[],c=[],f=["tr","br","bl","tl"],g=0,h=this._objects.length,j=f.length;g<h;++g)for(d=this._objects[g],d.setCoords(),i=0;i<j;i++)e=f[i],b.push(d.oCoords[e].x),c.push(d.oCoords[e].y);this.set(this._getBounds(b,c,a))},_getBounds:function(a,c,f){var g=b.util.invertTransform(this.getViewportTransform()),h=b.util.transformPoint(new b.Point(d(a),d(c)),g),i=b.util.transformPoint(new b.Point(e(a),e(c)),g),j={width:i.x-h.x||0,height:i.y-h.y||0};return f||(j.left=h.x||0,j.top=h.y||0,"center"===this.originX&&(j.left+=j.width/2),"right"===this.originX&&(j.left+=j.width),"center"===this.originY&&(j.top+=j.height/2),"bottom"===this.originY&&(j.top+=j.height)),j},toSVG:function(a){for(var b=["<g ",'transform="',this.getSvgTransform(),'">\n'],c=0,d=this._objects.length;c<d;c++)b.push(this._objects[c].toSVG(a));return b.push("</g>\n"),a?a(b.join("")):b.join("")},get:function(a){if(a in g){if(this[a])return this[a];for(var b=0,c=this._objects.length;b<c;b++)if(this._objects[b][a])return!0;return!1}return a in this.delegatedProperties?this._objects[0]&&this._objects[0].get(a):this[a]}}),b.Group.fromObject=function(a,c){b.util.enlivenObjects(a.objects,function(d){delete a.objects,c&&c(new b.Group(d,a,!0))})},b.Group.async=!0}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=fabric.util.object.extend;return a.fabric||(a.fabric={}),a.fabric.Image?void fabric.warn("fabric.Image is already defined."):(fabric.Image=fabric.util.createClass(fabric.Object,{type:"image",crossOrigin:"",alignX:"none",alignY:"none",meetOrSlice:"meet",_lastScaleX:1,_lastScaleY:1,initialize:function(a,b){b||(b={}),this.filters=[],this.resizeFilters=[],this.callSuper("initialize",b),this._initElement(a,b)},getElement:function(){return this._element},setElement:function(a,b,c){return this._element=a,this._originalElement=a,this._initConfig(c),0!==this.filters.length?this.applyFilters(b):b&&b(),this},setCrossOrigin:function(a){return this.crossOrigin=a,this._element.crossOrigin=a,this},getOriginalSize:function(){var a=this.getElement();return{width:a.width,height:a.height}},_stroke:function(a){a.save(),this._setStrokeStyles(a),a.beginPath(),a.strokeRect(-this.width/2,-this.height/2,this.width,this.height),a.closePath(),a.restore()},_renderDashedStroke:function(a){var b=-this.width/2,c=-this.height/2,d=this.width,e=this.height;a.save(),this._setStrokeStyles(a),a.beginPath(),fabric.util.drawDashedLine(a,b,c,b+d,c,this.strokeDashArray),fabric.util.drawDashedLine(a,b+d,c,b+d,c+e,this.strokeDashArray),fabric.util.drawDashedLine(a,b+d,c+e,b,c+e,this.strokeDashArray),fabric.util.drawDashedLine(a,b,c+e,b,c,this.strokeDashArray),a.closePath(),a.restore()},toObject:function(a){var c=[];this.filters.forEach(function(a){a&&c.push(a.toObject())});var d=b(this.callSuper("toObject",a),{src:this._originalElement.src||this._originalElement._src,filters:c,crossOrigin:this.crossOrigin,alignX:this.alignX,alignY:this.alignY,meetOrSlice:this.meetOrSlice});return this.resizeFilters.length>0&&(d.resizeFilters=this.resizeFilters.map(function(a){return a&&a.toObject()})),this.includeDefaultValues||this._removeDefaultValues(d),d},toSVG:function(a){var b=[],c=-this.width/2,d=-this.height/2,e="none";if(this.group&&"path-group"===this.group.type&&(c=this.left,d=this.top),"none"!==this.alignX&&"none"!==this.alignY&&(e="x"+this.alignX+"Y"+this.alignY+" "+this.meetOrSlice),b.push('<g transform="',this.getSvgTransform(),this.getSvgTransformMatrix(),'">\n','<image xlink:href="',this.getSvgSrc(),'" x="',c,'" y="',d,'" style="',this.getSvgStyles(),'" width="',this.width,'" height="',this.height,'" preserveAspectRatio="',e,'"',"></image>\n"),this.stroke||this.strokeDashArray){
var f=this.fill;this.fill=null,b.push("<rect ",'x="',c,'" y="',d,'" width="',this.width,'" height="',this.height,'" style="',this.getSvgStyles(),'"/>\n'),this.fill=f}return b.push("</g>\n"),a?a(b.join("")):b.join("")},getSrc:function(){if(this.getElement())return this.getElement().src||this.getElement()._src},setSrc:function(a,b,c){fabric.util.loadImage(a,function(a){return this.setElement(a,b,c)},this,c&&c.crossOrigin)},toString:function(){return'#<fabric.Image: { src: "'+this.getSrc()+'" }>'},clone:function(a,b){this.constructor.fromObject(this.toObject(b),a)},applyFilters:function(a,b,c,d){if(b=b||this.filters,c=c||this._originalElement){var e=c,f=fabric.util.createCanvasElement(),g=fabric.util.createImage(),h=this;return f.width=e.width,f.height=e.height,f.getContext("2d").drawImage(e,0,0,e.width,e.height),0===b.length?(this._element=c,a&&a(),f):(b.forEach(function(a){a&&a.applyTo(f,a.scaleX||h.scaleX,a.scaleY||h.scaleY),!d&&a&&"Resize"===a.type&&(h.width*=a.scaleX,h.height*=a.scaleY)}),g.width=f.width,g.height=f.height,fabric.isLikelyNode?(g.src=f.toBuffer(void 0,fabric.Image.pngCompression),h._element=g,!d&&(h._filteredEl=g),a&&a()):(g.onload=function(){h._element=g,!d&&(h._filteredEl=g),a&&a(),g.onload=f=e=null},g.src=f.toDataURL("image/png")),f)}},_render:function(a,b){var c,d,f,e=this._findMargins();c=b?this.left:-this.width/2,d=b?this.top:-this.height/2,"slice"===this.meetOrSlice&&(a.beginPath(),a.rect(c,d,this.width,this.height),a.clip()),this.isMoving===!1&&this.resizeFilters.length&&this._needsResize()?(this._lastScaleX=this.scaleX,this._lastScaleY=this.scaleY,f=this.applyFilters(null,this.resizeFilters,this._filteredEl||this._originalElement,!0)):f=this._element,f&&a.drawImage(f,c+e.marginX,d+e.marginY,e.width,e.height),this._renderStroke(a)},_needsResize:function(){return this.scaleX!==this._lastScaleX||this.scaleY!==this._lastScaleY},_findMargins:function(){var c,d,a=this.width,b=this.height,e=0,f=0;return"none"===this.alignX&&"none"===this.alignY||(c=[this.width/this._element.width,this.height/this._element.height],d="meet"===this.meetOrSlice?Math.min.apply(null,c):Math.max.apply(null,c),a=this._element.width*d,b=this._element.height*d,"Mid"===this.alignX&&(e=(this.width-a)/2),"Max"===this.alignX&&(e=this.width-a),"Mid"===this.alignY&&(f=(this.height-b)/2),"Max"===this.alignY&&(f=this.height-b)),{width:a,height:b,marginX:e,marginY:f}},_resetWidthHeight:function(){var a=this.getElement();this.set("width",a.width),this.set("height",a.height)},_initElement:function(a,b){this.setElement(fabric.util.getById(a),null,b),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(a){a||(a={}),this.setOptions(a),this._setWidthHeight(a),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(a,b){a&&a.length?fabric.util.enlivenObjects(a,function(a){b&&b(a)},"fabric.Image.filters"):b&&b()},_setWidthHeight:function(a){this.width="width"in a?a.width:this.getElement()?this.getElement().width||0:0,this.height="height"in a?a.height:this.getElement()?this.getElement().height||0:0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(a,b){fabric.util.loadImage(a.src,function(c){fabric.Image.prototype._initFilters.call(a,a.filters,function(d){a.filters=d||[],fabric.Image.prototype._initFilters.call(a,a.resizeFilters,function(d){a.resizeFilters=d||[];var e=new fabric.Image(c,a);b&&b(e)})})},null,a.crossOrigin)},fabric.Image.fromURL=function(a,b,c){fabric.util.loadImage(a,function(a){b&&b(new fabric.Image(a,c))},null,c&&c.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href".split(" ")),fabric.Image.fromElement=function(a,c,d){var h,i,j,e=fabric.parseAttributes(a,fabric.Image.ATTRIBUTE_NAMES),f="xMidYMid",g="meet";e.preserveAspectRatio&&(j=e.preserveAspectRatio.split(" ")),j&&j.length&&(g=j.pop(),"meet"!==g&&"slice"!==g?(f=g,g="meet"):j.length&&(f=j.pop())),h="none"!==f?f.slice(1,4):"none",i="none"!==f?f.slice(5,8):"none",e.alignX=h,e.alignY=i,e.meetOrSlice=g,fabric.Image.fromURL(e["xlink:href"],c,b(d?fabric.util.object.clone(d):{},e))},fabric.Image.async=!0,void(fabric.Image.pngCompression=1))}("undefined"!=typeof exports?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var a=this.getAngle()%360;return a>0?90*Math.round((a-1)/90):90*Math.round(a/90)},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(a){a=a||{};var b=function(){},c=a.onComplete||b,d=a.onChange||b,e=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(a){e.setAngle(a),d()},onComplete:function(){e.setCoords(),c()},onStart:function(){e.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(a){return a.straighten(),this.renderAll(),this},fxStraightenObject:function(a){return a.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",initialize:function(a){a&&this.setOptions(a)},setOptions:function(a){for(var b in a)this[b]=a[b]},toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend;b.Image.filters.Brightness=b.util.createClass(b.Image.filters.BaseFilter,{type:"Brightness",initialize:function(a){a=a||{},this.brightness=a.brightness||0},applyTo:function(a){for(var b=a.getContext("2d"),c=b.getImageData(0,0,a.width,a.height),d=c.data,e=this.brightness,f=0,g=d.length;f<g;f+=4)d[f]+=e,d[f+1]+=e,d[f+2]+=e;b.putImageData(c,0,0)},toObject:function(){return c(this.callSuper("toObject"),{brightness:this.brightness})}}),b.Image.filters.Brightness.fromObject=function(a){return new b.Image.filters.Brightness(a)}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend;b.Image.filters.Convolute=b.util.createClass(b.Image.filters.BaseFilter,{type:"Convolute",initialize:function(a){a=a||{},this.opaque=a.opaque,this.matrix=a.matrix||[0,0,0,0,1,0,0,0,0];var c=b.util.createCanvasElement();this.tmpCtx=c.getContext("2d")},_createImageData:function(a,b){return this.tmpCtx.createImageData(a,b)},applyTo:function(a){for(var b=this.matrix,c=a.getContext("2d"),d=c.getImageData(0,0,a.width,a.height),e=Math.round(Math.sqrt(b.length)),f=Math.floor(e/2),g=d.data,h=d.width,i=d.height,j=h,k=i,l=this._createImageData(j,k),m=l.data,n=this.opaque?1:0,o=0;o<k;o++)for(var p=0;p<j;p++){for(var q=o,r=p,s=4*(o*j+p),t=0,u=0,v=0,w=0,x=0;x<e;x++)for(var y=0;y<e;y++){var z=q+x-f,A=r+y-f;if(!(z<0||z>i||A<0||A>h)){var B=4*(z*h+A),C=b[x*e+y];t+=g[B]*C,u+=g[B+1]*C,v+=g[B+2]*C,w+=g[B+3]*C}}m[s]=t,m[s+1]=u,m[s+2]=v,m[s+3]=w+n*(255-w)}c.putImageData(l,0,0)},toObject:function(){return c(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),b.Image.filters.Convolute.fromObject=function(a){return new b.Image.filters.Convolute(a)}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend;b.Image.filters.GradientTransparency=b.util.createClass(b.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(a){a=a||{},this.threshold=a.threshold||100},applyTo:function(a){for(var b=a.getContext("2d"),c=b.getImageData(0,0,a.width,a.height),d=c.data,e=this.threshold,f=d.length,g=0,h=d.length;g<h;g+=4)d[g+3]=e+255*(f-g)/f;b.putImageData(c,0,0)},toObject:function(){return c(this.callSuper("toObject"),{threshold:this.threshold})}}),b.Image.filters.GradientTransparency.fromObject=function(a){return new b.Image.filters.GradientTransparency(a)}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={});b.Image.filters.Grayscale=b.util.createClass(b.Image.filters.BaseFilter,{type:"Grayscale",applyTo:function(a){for(var g,b=a.getContext("2d"),c=b.getImageData(0,0,a.width,a.height),d=c.data,e=c.width*c.height*4,f=0;f<e;)g=(d[f]+d[f+1]+d[f+2])/3,d[f]=g,d[f+1]=g,d[f+2]=g,f+=4;b.putImageData(c,0,0)}}),b.Image.filters.Grayscale.fromObject=function(){return new b.Image.filters.Grayscale}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={});b.Image.filters.Invert=b.util.createClass(b.Image.filters.BaseFilter,{type:"Invert",applyTo:function(a){var f,b=a.getContext("2d"),c=b.getImageData(0,0,a.width,a.height),d=c.data,e=d.length;for(f=0;f<e;f+=4)d[f]=255-d[f],d[f+1]=255-d[f+1],d[f+2]=255-d[f+2];b.putImageData(c,0,0)}}),b.Image.filters.Invert.fromObject=function(){return new b.Image.filters.Invert}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend;b.Image.filters.Mask=b.util.createClass(b.Image.filters.BaseFilter,{type:"Mask",initialize:function(a){a=a||{},this.mask=a.mask,this.channel=[0,1,2,3].indexOf(a.channel)>-1?a.channel:0},applyTo:function(a){if(this.mask){var i,c=a.getContext("2d"),d=c.getImageData(0,0,a.width,a.height),e=d.data,f=this.mask.getElement(),g=b.util.createCanvasElement(),h=this.channel,j=d.width*d.height*4;g.width=f.width,g.height=f.height,g.getContext("2d").drawImage(f,0,0,f.width,f.height);var k=g.getContext("2d").getImageData(0,0,f.width,f.height),l=k.data;for(i=0;i<j;i+=4)e[i+3]=l[i+h];c.putImageData(d,0,0)}},toObject:function(){return c(this.callSuper("toObject"),{mask:this.mask.toObject(),channel:this.channel})}}),b.Image.filters.Mask.fromObject=function(a,c){b.util.loadImage(a.mask.src,function(d){a.mask=new b.Image(d,a.mask),c&&c(new b.Image.filters.Mask(a))})},b.Image.filters.Mask.async=!0}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend;b.Image.filters.Noise=b.util.createClass(b.Image.filters.BaseFilter,{type:"Noise",initialize:function(a){a=a||{},this.noise=a.noise||0},applyTo:function(a){for(var f,b=a.getContext("2d"),c=b.getImageData(0,0,a.width,a.height),d=c.data,e=this.noise,g=0,h=d.length;g<h;g+=4)f=(.5-Math.random())*e,d[g]+=f,d[g+1]+=f,d[g+2]+=f;b.putImageData(c,0,0)},toObject:function(){return c(this.callSuper("toObject"),{noise:this.noise})}}),b.Image.filters.Noise.fromObject=function(a){return new b.Image.filters.Noise(a)}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend;b.Image.filters.Pixelate=b.util.createClass(b.Image.filters.BaseFilter,{type:"Pixelate",initialize:function(a){a=a||{},this.blocksize=a.blocksize||4},applyTo:function(a){var g,h,i,j,k,l,m,b=a.getContext("2d"),c=b.getImageData(0,0,a.width,a.height),d=c.data,e=c.height,f=c.width;for(h=0;h<e;h+=this.blocksize)for(i=0;i<f;i+=this.blocksize){g=4*h*f+4*i,j=d[g],k=d[g+1],l=d[g+2],m=d[g+3];for(var n=h,o=h+this.blocksize;n<o;n++)for(var p=i,q=i+this.blocksize;p<q;p++)g=4*n*f+4*p,d[g]=j,d[g+1]=k,d[g+2]=l,d[g+3]=m}b.putImageData(c,0,0)},toObject:function(){return c(this.callSuper("toObject"),{blocksize:this.blocksize})}}),b.Image.filters.Pixelate.fromObject=function(a){return new b.Image.filters.Pixelate(a)}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend;b.Image.filters.RemoveWhite=b.util.createClass(b.Image.filters.BaseFilter,{type:"RemoveWhite",initialize:function(a){a=a||{},this.threshold=a.threshold||30,this.distance=a.distance||20},applyTo:function(a){for(var i,j,k,b=a.getContext("2d"),c=b.getImageData(0,0,a.width,a.height),d=c.data,e=this.threshold,f=this.distance,g=255-e,h=Math.abs,l=0,m=d.length;l<m;l+=4)i=d[l],j=d[l+1],k=d[l+2],i>g&&j>g&&k>g&&h(i-j)<f&&h(i-k)<f&&h(j-k)<f&&(d[l+3]=1);b.putImageData(c,0,0)},toObject:function(){return c(this.callSuper("toObject"),{threshold:this.threshold,distance:this.distance})}}),b.Image.filters.RemoveWhite.fromObject=function(a){return new b.Image.filters.RemoveWhite(a)}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={});b.Image.filters.Sepia=b.util.createClass(b.Image.filters.BaseFilter,{type:"Sepia",applyTo:function(a){var f,g,b=a.getContext("2d"),c=b.getImageData(0,0,a.width,a.height),d=c.data,e=d.length;for(f=0;f<e;f+=4)g=.3*d[f]+.59*d[f+1]+.11*d[f+2],d[f]=g+100,d[f+1]=g+50,d[f+2]=g+255;b.putImageData(c,0,0)}}),b.Image.filters.Sepia.fromObject=function(){return new b.Image.filters.Sepia}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={});b.Image.filters.Sepia2=b.util.createClass(b.Image.filters.BaseFilter,{type:"Sepia2",applyTo:function(a){var f,g,h,i,b=a.getContext("2d"),c=b.getImageData(0,0,a.width,a.height),d=c.data,e=d.length;for(f=0;f<e;f+=4)g=d[f],h=d[f+1],i=d[f+2],d[f]=(.393*g+.769*h+.189*i)/1.351,d[f+1]=(.349*g+.686*h+.168*i)/1.203,d[f+2]=(.272*g+.534*h+.131*i)/2.14;b.putImageData(c,0,0)}}),b.Image.filters.Sepia2.fromObject=function(){return new b.Image.filters.Sepia2}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend;b.Image.filters.Tint=b.util.createClass(b.Image.filters.BaseFilter,{type:"Tint",initialize:function(a){a=a||{},this.color=a.color||"#000000",this.opacity="undefined"!=typeof a.opacity?a.opacity:new b.Color(this.color).getAlpha()},applyTo:function(a){var g,h,i,j,k,l,m,n,o,c=a.getContext("2d"),d=c.getImageData(0,0,a.width,a.height),e=d.data,f=e.length;for(o=new b.Color(this.color).getSource(),h=o[0]*this.opacity,i=o[1]*this.opacity,j=o[2]*this.opacity,n=1-this.opacity,g=0;g<f;g+=4)k=e[g],l=e[g+1],m=e[g+2],e[g]=h+k*n,e[g+1]=i+l*n,e[g+2]=j+m*n;c.putImageData(d,0,0)},toObject:function(){return c(this.callSuper("toObject"),{color:this.color,opacity:this.opacity})}}),b.Image.filters.Tint.fromObject=function(a){return new b.Image.filters.Tint(a)}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend;b.Image.filters.Multiply=b.util.createClass(b.Image.filters.BaseFilter,{type:"Multiply",initialize:function(a){a=a||{},this.color=a.color||"#000000"},applyTo:function(a){var g,h,c=a.getContext("2d"),d=c.getImageData(0,0,a.width,a.height),e=d.data,f=e.length;for(h=new b.Color(this.color).getSource(),g=0;g<f;g+=4)e[g]*=h[0]/255,e[g+1]*=h[1]/255,e[g+2]*=h[2]/255;c.putImageData(d,0,0)},toObject:function(){return c(this.callSuper("toObject"),{color:this.color})}}),b.Image.filters.Multiply.fromObject=function(a){return new b.Image.filters.Multiply(a)}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric;b.Image.filters.Blend=b.util.createClass({type:"Blend",initialize:function(a){a=a||{},this.color=a.color||"#000",this.image=a.image||!1,this.mode=a.mode||"multiply",this.alpha=a.alpha||1},applyTo:function(a){var f,g,h,i,j,k,l,m,n,o,c=a.getContext("2d"),d=c.getImageData(0,0,a.width,a.height),e=d.data,p=!1;if(this.image){p=!0;var q=b.util.createCanvasElement();q.width=this.image.width,q.height=this.image.height;var r=new b.StaticCanvas(q);r.add(this.image);var s=r.getContext("2d");o=s.getImageData(0,0,r.width,r.height).data}else o=new b.Color(this.color).getSource(),f=o[0]*this.alpha,g=o[1]*this.alpha,h=o[2]*this.alpha;for(var t=0,u=e.length;t<u;t+=4)switch(i=e[t],j=e[t+1],k=e[t+2],p&&(f=o[t]*this.alpha,g=o[t+1]*this.alpha,h=o[t+2]*this.alpha),this.mode){case"multiply":e[t]=i*f/255,e[t+1]=j*g/255,e[t+2]=k*h/255;break;case"screen":e[t]=1-(1-i)*(1-f),e[t+1]=1-(1-j)*(1-g),e[t+2]=1-(1-k)*(1-h);break;case"add":e[t]=Math.min(255,i+f),e[t+1]=Math.min(255,j+g),e[t+2]=Math.min(255,k+h);break;case"diff":case"difference":e[t]=Math.abs(i-f),e[t+1]=Math.abs(j-g),e[t+2]=Math.abs(k-h);break;case"subtract":l=i-f,m=j-g,n=k-h,e[t]=l<0?0:l,e[t+1]=m<0?0:m,e[t+2]=n<0?0:n;break;case"darken":e[t]=Math.min(i,f),e[t+1]=Math.min(j,g),e[t+2]=Math.min(k,h);break;case"lighten":e[t]=Math.max(i,f),e[t+1]=Math.max(j,g),e[t+2]=Math.max(k,h)}c.putImageData(d,0,0)},toObject:function(){return{color:this.color,image:this.image,mode:this.mode,alpha:this.alpha}}}),b.Image.filters.Blend.fromObject=function(a){return new b.Image.filters.Blend(a)}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=Math.pow,d=Math.floor,e=Math.sqrt,f=Math.abs,g=Math.max,h=Math.round,i=Math.sin,j=Math.ceil;b.Image.filters.Resize=b.util.createClass(b.Image.filters.BaseFilter,{type:"Resize",resizeType:"hermite",scaleX:0,scaleY:0,lanczosLobes:3,applyTo:function(a,b,c){this.rcpScaleX=1/b,this.rcpScaleY=1/c;var i,d=a.width,e=a.height,f=h(d*b),g=h(e*c);"sliceHack"===this.resizeType&&(i=this.sliceByTwo(a,d,e,f,g)),"hermite"===this.resizeType&&(i=this.hermiteFastResize(a,d,e,f,g)),"bilinear"===this.resizeType&&(i=this.bilinearFiltering(a,d,e,f,g)),"lanczos"===this.resizeType&&(i=this.lanczosResize(a,d,e,f,g)),a.width=f,a.height=g,a.getContext("2d").putImageData(i,0,0)},sliceByTwo:function(a,c,e,f,h){var j,i=a.getContext("2d"),k=.5,l=.5,m=1,n=1,o=!1,p=!1,q=c,r=e,s=b.util.createCanvasElement(),t=s.getContext("2d");for(f=d(f),h=d(h),s.width=g(f,c),s.height=g(h,e),f>c&&(k=2,m=-1),h>e&&(l=2,n=-1),j=i.getImageData(0,0,c,e),a.width=g(f,c),a.height=g(h,e),i.putImageData(j,0,0);!o||!p;)c=q,e=r,f*m<d(q*k*m)?q=d(q*k):(q=f,o=!0),h*n<d(r*l*n)?r=d(r*l):(r=h,p=!0),j=i.getImageData(0,0,c,e),t.putImageData(j,0,0),i.clearRect(0,0,q,r),i.drawImage(s,0,0,c,e,0,0,q,r);return i.getImageData(0,0,f,h)},lanczosResize:function(a,b,g,h,k){function l(a){return function(b){if(b>a)return 0;if(b*=Math.PI,f(b)<1e-16)return 1;var c=b/a;return i(b)*i(c)/b/c}}function m(a){var i,j,l,n,o,C,D,E,F,G,H;for(A.x=(a+.5)*t,B.x=d(A.x),i=0;i<k;i++){for(A.y=(i+.5)*u,B.y=d(A.y),o=0,C=0,D=0,E=0,F=0,j=B.x-x;j<=B.x+x;j++)if(!(j<0||j>=b)){G=d(1e3*f(j-A.x)),z[G]||(z[G]={});for(var I=B.y-y;I<=B.y+y;I++)I<0||I>=g||(H=d(1e3*f(I-A.y)),z[G][H]||(z[G][H]=s(e(c(G*v,2)+c(H*w,2))/1e3)),l=z[G][H],l>0&&(n=4*(I*b+j),o+=l,C+=l*q[n],D+=l*q[n+1],E+=l*q[n+2],F+=l*q[n+3]))}n=4*(i*h+a),r[n]=C/o,r[n+1]=D/o,r[n+2]=E/o,r[n+3]=F/o}return++a<h?m(a):p}var n=a.getContext("2d"),o=n.getImageData(0,0,b,g),p=n.getImageData(0,0,h,k),q=o.data,r=p.data,s=l(this.lanczosLobes),t=this.rcpScaleX,u=this.rcpScaleY,v=2/this.rcpScaleX,w=2/this.rcpScaleY,x=j(t*this.lanczosLobes/2),y=j(u*this.lanczosLobes/2),z={},A={},B={};return m(0)},bilinearFiltering:function(a,b,c,e,f){var g,h,i,j,k,l,m,n,o,p,q,r,t,s=0,u=this.rcpScaleX,v=this.rcpScaleY,w=a.getContext("2d"),x=4*(b-1),y=w.getImageData(0,0,b,c),z=y.data,A=w.getImageData(0,0,e,f),B=A.data;for(m=0;m<f;m++)for(n=0;n<e;n++)for(k=d(u*n),l=d(v*m),o=u*n-k,p=v*m-l,t=4*(l*b+k),q=0;q<4;q++)g=z[t+q],h=z[t+4+q],i=z[t+x+q],j=z[t+x+4+q],r=g*(1-o)*(1-p)+h*o*(1-p)+i*p*(1-o)+j*o*p,B[s++]=r;return A},hermiteFastResize:function(a,b,c,g,h){for(var i=this.rcpScaleX,k=this.rcpScaleY,l=j(i/2),m=j(k/2),n=a.getContext("2d"),o=n.getImageData(0,0,b,c),p=o.data,q=n.getImageData(0,0,g,h),r=q.data,s=0;s<h;s++)for(var t=0;t<g;t++){for(var u=4*(t+s*g),v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=(s+.5)*k,D=d(s*k);D<(s+1)*k;D++)for(var E=f(C-(D+.5))/m,F=(t+.5)*i,G=E*E,H=d(t*i);H<(t+1)*i;H++){var I=f(F-(H+.5))/l,J=e(G+I*I);J>1&&J<-1||(v=2*J*J*J-3*J*J+1,v>0&&(I=4*(H+D*b),B+=v*p[I+3],x+=v,p[I+3]<255&&(v=v*p[I+3]/250),y+=v*p[I],z+=v*p[I+1],A+=v*p[I+2],w+=v))}r[u]=y/w,r[u+1]=z/w,r[u+2]=A/w,r[u+3]=B/x}return q},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),b.Image.filters.Resize.fromObject=function(a){return new b.Image.filters.Resize(a)}}("undefined"!=typeof exports?exports:this),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.extend,d=b.util.object.clone,e=b.util.toFixed,f=b.StaticCanvas.supports("setLineDash"),g=b.Object.NUM_FRACTION_DIGITS;if(b.Text)return void b.warn("fabric.Text is already defined");var h=b.Object.prototype.stateProperties.concat();h.push("fontFamily","fontWeight","fontSize","text","textDecoration","textAlign","fontStyle","lineHeight","textBackgroundColor"),b.Text=b.util.createClass(b.Object,{_dimensionAffectingProps:{fontSize:!0,fontWeight:!0,fontFamily:!0,fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0,textAlign:!0},_reNewline:/\r?\n/,_reSpacesAndTabs:/[ \t\r]+/g,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textAlign:"left",fontStyle:"",lineHeight:1.16,textBackgroundColor:"",stateProperties:h,stroke:null,shadow:null,_fontSizeFraction:.25,_fontSizeMult:1.13,initialize:function(a,b){b=b||{},this.text=a,this.__skipDimension=!0,this.setOptions(b),this.__skipDimension=!1,this._initDimensions()},_initDimensions:function(a){this.__skipDimension||(a||(a=b.util.createCanvasElement().getContext("2d"),this._setTextStyles(a)),this._textLines=this._splitTextIntoLines(),this._clearCache(),this._cacheLinesWidth="justify"!==this.textAlign,this.width=this._getTextWidth(a),this._cacheLinesWidth=!0,this.height=this._getTextHeight(a))},toString:function(){return"#<fabric.Text ("+this.complexity()+'): { "text": "'+this.text+'", "fontFamily": "'+this.fontFamily+'" }>'},_render:function(a){this.clipTo&&b.util.clipContext(this,a),this._setOpacity(a),this._setShadow(a),this._setupCompositeOperation(a),this._renderTextBackground(a),this._setStrokeStyles(a),this._setFillStyles(a),this._renderText(a),this._renderTextDecoration(a),this.clipTo&&a.restore()},_renderText:function(a){this._translateForTextAlign(a),this._renderTextFill(a),this._renderTextStroke(a),this._translateForTextAlign(a,!0)},_translateForTextAlign:function(a,b){if("left"!==this.textAlign&&"justify"!==this.textAlign){var c=b?-1:1;a.translate("center"===this.textAlign?c*this.width/2:c*this.width,0)}},_setTextStyles:function(a){a.textBaseline="alphabetic",this.skipTextAlign||(a.textAlign=this.textAlign),a.font=this._getFontDeclaration()},_getTextHeight:function(){return this._textLines.length*this._getHeightOfLine()},_getTextWidth:function(a){for(var b=this._getLineWidth(a,0),c=1,d=this._textLines.length;c<d;c++){var e=this._getLineWidth(a,c);e>b&&(b=e)}return b},_renderChars:function(a,b,c,d,e){var f=a.slice(0,-4);if(this[f].toLive){var g=-this.width/2+this[f].offsetX||0,h=-this.height/2+this[f].offsetY||0;b.save(),b.translate(g,h),d-=g,e-=h}b[a](c,d,e),this[f].toLive&&b.restore()},_renderTextLine:function(a,b,c,d,e,f){if(e-=this.fontSize*this._fontSizeFraction,"justify"!==this.textAlign)return void this._renderChars(a,b,c,d,e,f);var g=this._getLineWidth(b,f),h=this.width;if(h>=g)for(var i=c.split(/\s+/),j=this._getWidthOfWords(b,c,f),k=h-j,l=i.length-1,m=k/l,n=0,o=0,p=i.length;o<p;o++)this._renderChars(a,b,i[o],d+n,e,f),n+=b.measureText(i[o]).width+m;else this._renderChars(a,b,c,d,e,f)},_getWidthOfWords:function(a,b){return a.measureText(b.replace(/\s+/g,"")).width},_getLeftOffset:function(){return-this.width/2},_getTopOffset:function(){return-this.height/2},_renderTextFill:function(a){if(this.fill||this._skipFillStrokeCheck)for(var b=0,c=0,d=this._textLines.length;c<d;c++){var e=this._getHeightOfLine(a,c),f=e/this.lineHeight;this._renderTextLine("fillText",a,this._textLines[c],this._getLeftOffset(),this._getTopOffset()+b+f,c),b+=e}},_renderTextStroke:function(a){if(this.stroke&&0!==this.strokeWidth||this._skipFillStrokeCheck){var b=0;this.shadow&&!this.shadow.affectStroke&&this._removeShadow(a),a.save(),this.strokeDashArray&&(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),f&&a.setLineDash(this.strokeDashArray)),a.beginPath();for(var c=0,d=this._textLines.length;c<d;c++){var e=this._getHeightOfLine(a,c),g=e/this.lineHeight;this._renderTextLine("strokeText",a,this._textLines[c],this._getLeftOffset(),this._getTopOffset()+b+g,c),b+=e}a.closePath(),a.restore()}},_getHeightOfLine:function(){return this.fontSize*this._fontSizeMult*this.lineHeight},_renderTextBackground:function(a){this._renderTextBoxBackground(a),this._renderTextLinesBackground(a)},_renderTextBoxBackground:function(a){this.backgroundColor&&(a.fillStyle=this.backgroundColor,a.fillRect(this._getLeftOffset(),this._getTopOffset(),this.width,this.height))},_renderTextLinesBackground:function(a){if(this.textBackgroundColor){var d,e,b=0,c=this._getHeightOfLine();a.fillStyle=this.textBackgroundColor;for(var f=0,g=this._textLines.length;f<g;f++)""!==this._textLines[f]&&(d=this._getLineWidth(a,f),e=this._getLineLeftOffset(d),a.fillRect(this._getLeftOffset()+e,this._getTopOffset()+b,d,this.fontSize*this._fontSizeMult)),b+=c}},_getLineLeftOffset:function(a){return"center"===this.textAlign?(this.width-a)/2:"right"===this.textAlign?this.width-a:0},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[],this.__lineOffsets=[]},_shouldClearCache:function(){var a=!1;if(this._forceClearCache)return this._forceClearCache=!1,!0;for(var b in this._dimensionAffectingProps)this["__"+b]!==this[b]&&(this["__"+b]=this[b],a=!0);return a},_getLineWidth:function(a,b){if(this.__lineWidths[b])return this.__lineWidths[b];var c,d,e=this._textLines[b];return""===e?c=0:"justify"===this.textAlign&&this._cacheLinesWidth?(d=e.split(" "),c=d.length>1?this.width:a.measureText(e).width):c=a.measureText(e).width,this._cacheLinesWidth&&(this.__lineWidths[b]=c),c},_renderTextDecoration:function(a){function e(d){var e,g,h,i,j,k,l,f=0;for(e=0,g=c._textLines.length;e<g;e++){for(j=c._getLineWidth(a,e),k=c._getLineLeftOffset(j),l=c._getHeightOfLine(a,e),h=0,i=d.length;h<i;h++)a.fillRect(c._getLeftOffset()+k,f+(c._fontSizeMult-1+d[h])*c.fontSize-b,j,c.fontSize/15);f+=l}}if(this.textDecoration){var b=this.height/2,c=this,d=[];this.textDecoration.indexOf("underline")>-1&&d.push(.85),this.textDecoration.indexOf("line-through")>-1&&d.push(.43),this.textDecoration.indexOf("overline")>-1&&d.push(-.12),d.length>0&&e(d)}},_getFontDeclaration:function(){return[b.isLikelyNode?this.fontWeight:this.fontStyle,b.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",b.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(a,b){this.visible&&(a.save(),this._setTextStyles(a),this._shouldClearCache()&&this._initDimensions(a),b||this.transform(a),this.transformMatrix&&a.transform.apply(a,this.transformMatrix),this.group&&"path-group"===this.group.type&&a.translate(this.left,this.top),this._render(a),a.restore())},_splitTextIntoLines:function(){return this.text.split(this._reNewline)},toObject:function(a){var b=c(this.callSuper("toObject",a),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textAlign:this.textAlign,textBackgroundColor:this.textBackgroundColor});return this.includeDefaultValues||this._removeDefaultValues(b),b},toSVG:function(a){var b=this._createBaseSVGMarkup(),c=this._getSVGLeftTopOffsets(this.ctx),d=this._getSVGTextAndBg(c.textTop,c.textLeft);return this._wrapSVGTextAndBg(b,d),a?a(b.join("")):b.join("")},_getSVGLeftTopOffsets:function(a){var b=this._getHeightOfLine(a,0),c=-this.width/2,d=0;return{textLeft:c+(this.group&&"path-group"===this.group.type?this.left:0),textTop:d+(this.group&&"path-group"===this.group.type?-this.top:0),lineTop:b}},_wrapSVGTextAndBg:function(a,b){a.push('\t<g transform="',this.getSvgTransform(),this.getSvgTransformMatrix(),'">\n',b.textBgRects.join(""),"\t\t<text ",this.fontFamily?'font-family="'+this.fontFamily.replace(/"/g,"'")+'" ':"",this.fontSize?'font-size="'+this.fontSize+'" ':"",this.fontStyle?'font-style="'+this.fontStyle+'" ':"",this.fontWeight?'font-weight="'+this.fontWeight+'" ':"",this.textDecoration?'text-decoration="'+this.textDecoration+'" ':"",'style="',this.getSvgStyles(),'" >',b.textSpans.join(""),"</text>\n","\t</g>\n")},_getSVGTextAndBg:function(a,b){var c=[],d=[],e=0;this._setSVGBg(d);for(var f=0,g=this._textLines.length;f<g;f++)this.textBackgroundColor&&this._setSVGTextLineBg(d,f,b,a,e),this._setSVGTextLineText(f,c,e,b,a,d),e+=this._getHeightOfLine(this.ctx,f);return{textSpans:c,textBgRects:d}},_setSVGTextLineText:function(a,c,d,f,h){var i=this.fontSize*(this._fontSizeMult-this._fontSizeFraction)-h+d-this.height/2;c.push('<tspan x="',e(f+this._getLineLeftOffset(this.__lineWidths[a]),g),'" ','y="',e(i,g),'" ',this._getFillAttributes(this.fill),">",b.util.string.escapeXml(this._textLines[a]),"</tspan>")},_setSVGTextLineBg:function(a,b,c,d,f){a.push("\t\t<rect ",this._getFillAttributes(this.textBackgroundColor),' x="',e(c+this._getLineLeftOffset(this.__lineWidths[b]),g),'" y="',e(f-this.height/2,g),'" width="',e(this.__lineWidths[b],g),'" height="',e(this._getHeightOfLine(this.ctx,b)/this.lineHeight,g),'"></rect>\n')},_setSVGBg:function(a){this.backgroundColor&&a.push("\t\t<rect ",this._getFillAttributes(this.backgroundColor),' x="',e(-this.width/2,g),'" y="',e(-this.height/2,g),'" width="',e(this.width,g),'" height="',e(this.height,g),'"></rect>\n')},_getFillAttributes:function(a){var c=a&&"string"==typeof a?new b.Color(a):"";return c&&c.getSource()&&1!==c.getAlpha()?'opacity="'+c.getAlpha()+'" fill="'+c.setAlpha(1).toRgb()+'"':'fill="'+a+'"'},_set:function(a,b){this.callSuper("_set",a,b),a in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),b.Text.ATTRIBUTE_NAMES=b.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),b.Text.DEFAULT_SVG_FONT_SIZE=16,b.Text.fromElement=function(a,c){if(!a)return null;var d=b.parseAttributes(a,b.Text.ATTRIBUTE_NAMES);c=b.util.object.extend(c?b.util.object.clone(c):{},d),c.top=c.top||0,c.left=c.left||0,"dx"in d&&(c.left+=d.dx),"dy"in d&&(c.top+=d.dy),"fontSize"in c||(c.fontSize=b.Text.DEFAULT_SVG_FONT_SIZE),c.originX||(c.originX="left");var e=a.textContent.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," "),f=new b.Text(e,c),g=0;return"left"===f.originX&&(g=f.getWidth()/2),"right"===f.originX&&(g=-f.getWidth()/2),f.set({left:f.getLeft()+g,top:f.getTop()-f.getHeight()/2+f.fontSize*(.18+f._fontSizeFraction)}),f},b.Text.fromObject=function(a){return new b.Text(a.text,d(a))},b.util.createAccessors(b.Text)}("undefined"!=typeof exports?exports:this),function(){var a=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!1,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(a,b){this.styles=b?b.styles||{}:{},this.callSuper("initialize",a,b),this.initBehavior()},_clearCache:function(){this.callSuper("_clearCache"),this.__maxFontHeights=[],this.__widthOfSpace=[]},isEmptyStyles:function(){if(!this.styles)return!0;var a=this.styles;for(var b in a)for(var c in a[b])for(var d in a[b][c])return!1;return!0},setSelectionStart:function(a){a=Math.max(a,0),this.selectionStart!==a&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionStart=a),this._updateTextarea()},setSelectionEnd:function(a){a=Math.min(a,this.text.length),this.selectionEnd!==a&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this}),this.selectionEnd=a),this._updateTextarea()},getSelectionStyles:function(a,b){if(2===arguments.length){for(var c=[],d=a;d<b;d++)c.push(this.getSelectionStyles(d));return c}var e=this.get2DCursorLocation(a),f=this._getStyleDeclaration(e.lineIndex,e.charIndex);return f||{}},setSelectionStyles:function(a){if(this.selectionStart===this.selectionEnd)this._extendStyles(this.selectionStart,a);else for(var b=this.selectionStart;b<this.selectionEnd;b++)this._extendStyles(b,a);
return this._forceClearCache=!0,this},_extendStyles:function(a,b){var c=this.get2DCursorLocation(a);this._getLineStyle(c.lineIndex)||this._setLineStyle(c.lineIndex,{}),this._getStyleDeclaration(c.lineIndex,c.charIndex)||this._setStyleDeclaration(c.lineIndex,c.charIndex,{}),fabric.util.object.extend(this._getStyleDeclaration(c.lineIndex,c.charIndex),b)},_render:function(a){this.callSuper("_render",a),this.ctx=a,this.isEditing&&this.renderCursorOrSelection()},renderCursorOrSelection:function(){if(this.active){var b,c,a=this.text.split("");this.canvas.contextTop?(c=this.canvas.contextTop,c.save(),c.transform.apply(c,this.canvas.viewportTransform),this.transform(c),this.transformMatrix&&c.transform.apply(c,this.transformMatrix)):(c=this.ctx,c.save()),this.selectionStart===this.selectionEnd?(b=this._getCursorBoundaries(a,"cursor"),this.renderCursor(b,c)):(b=this._getCursorBoundaries(a,"selection"),this.renderSelection(a,b,c)),c.restore()}},get2DCursorLocation:function(a){"undefined"==typeof a&&(a=this.selectionStart);for(var b=this._textLines.length,c=0;c<b;c++){if(a<=this._textLines[c].length)return{lineIndex:c,charIndex:a};a-=this._textLines[c].length+1}return{lineIndex:c-1,charIndex:this._textLines[c-1].length<a?this._textLines[c-1].length:a}},getCurrentCharStyle:function(a,b){var c=this._getStyleDeclaration(a,0===b?0:b-1);return{fontSize:c&&c.fontSize||this.fontSize,fill:c&&c.fill||this.fill,textBackgroundColor:c&&c.textBackgroundColor||this.textBackgroundColor,textDecoration:c&&c.textDecoration||this.textDecoration,fontFamily:c&&c.fontFamily||this.fontFamily,fontWeight:c&&c.fontWeight||this.fontWeight,fontStyle:c&&c.fontStyle||this.fontStyle,stroke:c&&c.stroke||this.stroke,strokeWidth:c&&c.strokeWidth||this.strokeWidth}},getCurrentCharFontSize:function(a,b){var c=this._getStyleDeclaration(a,0===b?0:b-1);return c&&c.fontSize?c.fontSize:this.fontSize},getCurrentCharColor:function(a,b){var c=this._getStyleDeclaration(a,0===b?0:b-1);return c&&c.fill?c.fill:this.cursorColor},_getCursorBoundaries:function(a,b){var c=Math.round(this._getLeftOffset()),d=this._getTopOffset(),e=this._getCursorBoundariesOffsets(a,b);return{left:c,top:d,leftOffset:e.left+e.lineLeft,topOffset:e.top}},_getCursorBoundariesOffsets:function(a,b){for(var c=0,d=0,e=0,f=0,g=0,h=0;h<this.selectionStart;h++)"\n"===a[h]?(g=0,f+=this._getHeightOfLine(this.ctx,d),d++,e=0):(g+=this._getWidthOfChar(this.ctx,a[h],d,e),e++),c=this._getCachedLineOffset(d);return"cursor"===b&&(f+=(1-this._fontSizeFraction)*this._getHeightOfLine(this.ctx,d)/this.lineHeight-this.getCurrentCharFontSize(d,e)*(1-this._fontSizeFraction)),{top:f,left:g,lineLeft:c}},_getCachedLineOffset:function(a){var b=this._getLineWidth(this.ctx,a);return this.__lineOffsets[a]||(this.__lineOffsets[a]=this._getLineLeftOffset(b))},renderCursor:function(a,b){var c=this.get2DCursorLocation(),d=c.lineIndex,e=c.charIndex,f=this.getCurrentCharFontSize(d,e),g=0===d&&0===e?this._getCachedLineOffset(d):a.leftOffset;b.fillStyle=this.getCurrentCharColor(d,e),b.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,b.fillRect(a.left+g,a.top+a.topOffset,this.cursorWidth/this.scaleX,f)},renderSelection:function(a,b,c){c.fillStyle=this.selectionColor;for(var d=this.get2DCursorLocation(this.selectionStart),e=this.get2DCursorLocation(this.selectionEnd),f=d.lineIndex,g=e.lineIndex,h=f;h<=g;h++){var i=this._getCachedLineOffset(h)||0,j=this._getHeightOfLine(this.ctx,h),k=0,l=this._textLines[h];if(h===f)for(var m=0,n=l.length;m<n;m++)m>=d.charIndex&&(h!==g||m<e.charIndex)&&(k+=this._getWidthOfChar(c,l[m],h,m)),m<d.charIndex&&(i+=this._getWidthOfChar(c,l[m],h,m));else if(h>f&&h<g)k+=this._getLineWidth(c,h)||5;else if(h===g)for(var o=0,p=e.charIndex;o<p;o++)k+=this._getWidthOfChar(c,l[o],h,o);c.fillRect(b.left+i,b.top+b.topOffset,k,j),b.topOffset+=j}},_renderChars:function(a,b,c,d,e,f){if(this.isEmptyStyles())return this._renderCharsFast(a,b,c,d,e);this.skipTextAlign=!0,d-="center"===this.textAlign?this.width/2:"right"===this.textAlign?this.width:0;var i,g=this._getHeightOfLine(b,f),h=this._getCachedLineOffset(f),j="";d+=h||0,b.save(),e-=g/this.lineHeight*this._fontSizeFraction;for(var k=0,l=c.length;k<=l;k++){i=i||this.getCurrentCharStyle(f,k);var m=this.getCurrentCharStyle(f,k+1);(this._hasStyleChanged(i,m)||k===l)&&(this._renderChar(a,b,f,k-1,j,d,e,g),j="",i=m),j+=c[k]}b.restore()},_renderCharsFast:function(a,b,c,d,e){this.skipTextAlign=!1,"fillText"===a&&this.fill&&this.callSuper("_renderChars",a,b,c,d,e),"strokeText"===a&&(this.stroke&&this.strokeWidth>0||this.skipFillStrokeCheck)&&this.callSuper("_renderChars",a,b,c,d,e)},_renderChar:function(a,b,c,d,e,f,g,h){var i,j,k=this._getStyleDeclaration(c,d),l=this._fontSizeFraction*h/this.lineHeight;if(k){var m=k.stroke||this.stroke,n=k.fill||this.fill;b.save(),i=this._applyCharStylesGetWidth(b,e,c,d,k),j=this._getHeightOfChar(b,e,c,d),n&&b.fillText(e,f,g),m&&b.strokeText(e,f,g),this._renderCharDecoration(b,k,f,g,l,i,j),b.restore(),b.translate(i,0)}else"strokeText"===a&&this.stroke&&b[a](e,f,g),"fillText"===a&&this.fill&&b[a](e,f,g),i=this._applyCharStylesGetWidth(b,e,c,d),this._renderCharDecoration(b,null,f,g,l,i,this.fontSize),b.translate(b.measureText(e).width,0)},_hasStyleChanged:function(a,b){return a.fill!==b.fill||a.fontSize!==b.fontSize||a.textBackgroundColor!==b.textBackgroundColor||a.textDecoration!==b.textDecoration||a.fontFamily!==b.fontFamily||a.fontWeight!==b.fontWeight||a.fontStyle!==b.fontStyle||a.stroke!==b.stroke||a.strokeWidth!==b.strokeWidth},_renderCharDecoration:function(a,b,c,d,e,f,g){var h=b?b.textDecoration||this.textDecoration:this.textDecoration;h&&(h.indexOf("underline")>-1&&a.fillRect(c,d+g/10,f,g/15),h.indexOf("line-through")>-1&&a.fillRect(c,d-g*(this._fontSizeFraction+this._fontSizeMult-1)+g/15,f,g/15),h.indexOf("overline")>-1&&a.fillRect(c,d-(this._fontSizeMult-this._fontSizeFraction)*g,f,g/15))},_renderTextLine:function(a,b,c,d,e,f){this.isEmptyStyles()||(e+=this.fontSize*(this._fontSizeFraction+.03)),this.callSuper("_renderTextLine",a,b,c,d,e,f)},_renderTextDecoration:function(a){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",a)},_renderTextLinesBackground:function(a){if(this.textBackgroundColor||this.styles){a.save(),this.textBackgroundColor&&(a.fillStyle=this.textBackgroundColor);for(var b=0,c=0,d=this._textLines.length;c<d;c++){var e=this._getHeightOfLine(a,c);if(""!==this._textLines[c]){var f=this._getLineWidth(a,c),g=this._getCachedLineOffset(c);if(this.textBackgroundColor&&(a.fillStyle=this.textBackgroundColor,a.fillRect(this._getLeftOffset()+g,this._getTopOffset()+b,f,e/this.lineHeight)),this._getLineStyle(c))for(var h=0,i=this._textLines[c].length;h<i;h++){var j=this._getStyleDeclaration(c,h);if(j&&j.textBackgroundColor){var k=this._textLines[c][h];a.fillStyle=j.textBackgroundColor,a.fillRect(this._getLeftOffset()+g+this._getWidthOfCharsAt(a,c,h),this._getTopOffset()+b,this._getWidthOfChar(a,k,c,h)+1,e/this.lineHeight)}}b+=e}else b+=e}a.restore()}},_getCacheProp:function(a,b){return a+b.fontFamily+b.fontSize+b.fontWeight+b.fontStyle+b.shadow},_applyCharStylesGetWidth:function(b,c,d,e,f){var g=f||this._getStyleDeclaration(d,e);g=g?a(g):{},this._applyFontStyles(g);var h=this._getCacheProp(c,g);if(this.isEmptyStyles()&&this._charWidthsCache[h]&&this.caching)return this._charWidthsCache[h];"string"==typeof g.shadow&&(g.shadow=new fabric.Shadow(g.shadow));var i=g.fill||this.fill;return b.fillStyle=i.toLive?i.toLive(b,this):i,g.stroke&&(b.strokeStyle=g.stroke&&g.stroke.toLive?g.stroke.toLive(b,this):g.stroke),b.lineWidth=g.strokeWidth||this.strokeWidth,b.font=this._getFontDeclaration.call(g),this._setShadow.call(g,b),this.caching?(this._charWidthsCache[h]||(this._charWidthsCache[h]=b.measureText(c).width),this._charWidthsCache[h]):b.measureText(c).width},_applyFontStyles:function(a){a.fontFamily||(a.fontFamily=this.fontFamily),a.fontSize||(a.fontSize=this.fontSize),a.fontWeight||(a.fontWeight=this.fontWeight),a.fontStyle||(a.fontStyle=this.fontStyle)},_getStyleDeclaration:function(b,c,d){return d?this.styles[b]&&this.styles[b][c]?a(this.styles[b][c]):{}:this.styles[b]&&this.styles[b][c]?this.styles[b][c]:null},_setStyleDeclaration:function(a,b,c){this.styles[a][b]=c},_deleteStyleDeclaration:function(a,b){delete this.styles[a][b]},_getLineStyle:function(a){return this.styles[a]},_setLineStyle:function(a,b){this.styles[a]=b},_deleteLineStyle:function(a){delete this.styles[a]},_getWidthOfChar:function(a,b,c,d){if("justify"===this.textAlign&&this._reSpacesAndTabs.test(b))return this._getWidthOfSpace(a,c);var e=this._getStyleDeclaration(c,d,!0);this._applyFontStyles(e);var f=this._getCacheProp(b,e);if(this._charWidthsCache[f]&&this.caching)return this._charWidthsCache[f];if(a){a.save();var g=this._applyCharStylesGetWidth(a,b,c,d);return a.restore(),g}},_getHeightOfChar:function(a,b,c,d){var e=this._getStyleDeclaration(c,d);return e&&e.fontSize?e.fontSize:this.fontSize},_getHeightOfCharAt:function(a,b,c){var d=this._textLines[b][c];return this._getHeightOfChar(a,d,b,c)},_getWidthOfCharsAt:function(a,b,c){var e,f,d=0;for(e=0;e<c;e++)f=this._textLines[b][e],d+=this._getWidthOfChar(a,f,b,e);return d},_getLineWidth:function(a,b){return this.__lineWidths[b]?this.__lineWidths[b]:(this.__lineWidths[b]=this._getWidthOfCharsAt(a,b,this._textLines[b].length),this.__lineWidths[b])},_getWidthOfSpace:function(a,b){if(this.__widthOfSpace[b])return this.__widthOfSpace[b];var c=this._textLines[b],d=this._getWidthOfWords(a,c,b),e=this.width-d,f=c.length-c.replace(this._reSpacesAndTabs,"").length,g=e/f;return this.__widthOfSpace[b]=g,g},_getWidthOfWords:function(a,b,c){for(var d=0,e=0;e<b.length;e++){var f=b[e];f.match(/\s/)||(d+=this._getWidthOfChar(a,f,c,e))}return d},_getHeightOfLine:function(a,b){if(this.__lineHeights[b])return this.__lineHeights[b];for(var c=this._textLines[b],d=this._getHeightOfChar(a,c[0],b,0),e=1,f=c.length;e<f;e++){var g=this._getHeightOfChar(a,c[e],b,e);g>d&&(d=g)}return this.__maxFontHeights[b]=d,this.__lineHeights[b]=d*this.lineHeight*this._fontSizeMult,this.__lineHeights[b]},_getTextHeight:function(a){for(var b=0,c=0,d=this._textLines.length;c<d;c++)b+=this._getHeightOfLine(a,c);return b},_renderTextBoxBackground:function(a){this.backgroundColor&&(a.save(),a.fillStyle=this.backgroundColor,a.fillRect(this._getLeftOffset(),this._getTopOffset(),this.width,this.height),a.restore())},toObject:function(b){return fabric.util.object.extend(this.callSuper("toObject",b),{styles:a(this.styles)})}}),fabric.IText.fromObject=function(b){return new fabric.IText(b.text,a(b))}}(),function(){var a=fabric.util.object.clone;fabric.util.object.extend(fabric.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation()},initSelectedHandler:function(){this.on("selected",function(){var a=this;setTimeout(function(){a.selected=!0},100)})},initAddedHandler:function(){var a=this;this.on("added",function(){this.canvas&&!this.canvas._hasITextHandlers&&(this.canvas._hasITextHandlers=!0,this._initCanvasHandlers()),a.canvas&&(a.canvas._iTextInstances=a.canvas._iTextInstances||[],a.canvas._iTextInstances.push(a))})},initRemovedHandler:function(){var a=this;this.on("removed",function(){a.canvas&&(a.canvas._iTextInstances=a.canvas._iTextInstances||[],fabric.util.removeFromArray(a.canvas._iTextInstances,a))})},_initCanvasHandlers:function(){var a=this;this.canvas.on("selection:cleared",function(){fabric.IText.prototype.exitEditingOnOthers(a.canvas)}),this.canvas.on("mouse:up",function(){a.canvas._iTextInstances&&a.canvas._iTextInstances.forEach(function(a){a.__isMousedown=!1})}),this.canvas.on("object:selected",function(){fabric.IText.prototype.exitEditingOnOthers(a.canvas)})},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(a,b,c,d){var e;return e={isAborted:!1,abort:function(){this.isAborted=!0}},a.animate("_currentCursorOpacity",b,{duration:c,onComplete:function(){e.isAborted||a[d]()},onChange:function(){a.canvas&&(a.canvas.clearContext(a.canvas.contextTop||a.ctx),a.renderCursorOrSelection())},abort:function(){return e.isAborted}}),e},_onTickComplete:function(){var a=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){a._currentTickCompleteState=a._animateCursor(a,0,this.cursorDuration/2,"_tick")},100)},initDelayedCursor:function(a){var b=this,c=a?0:this.cursorDelay;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),this._currentCursorOpacity=1,this.canvas&&(this.canvas.clearContext(this.canvas.contextTop||this.ctx),this.renderCursorOrSelection()),this._cursorTimeout2&&clearTimeout(this._cursorTimeout2),this._cursorTimeout2=setTimeout(function(){b._tick()},c)},abortCursorAnimation:function(){this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,this.canvas&&this.canvas.clearContext(this.canvas.contextTop||this.ctx)},selectAll:function(){this.setSelectionStart(0),this.setSelectionEnd(this.text.length)},getSelectedText:function(){return this.text.slice(this.selectionStart,this.selectionEnd)},findWordBoundaryLeft:function(a){var b=0,c=a-1;if(this._reSpace.test(this.text.charAt(c)))for(;this._reSpace.test(this.text.charAt(c));)b++,c--;for(;/\S/.test(this.text.charAt(c))&&c>-1;)b++,c--;return a-b},findWordBoundaryRight:function(a){var b=0,c=a;if(this._reSpace.test(this.text.charAt(c)))for(;this._reSpace.test(this.text.charAt(c));)b++,c++;for(;/\S/.test(this.text.charAt(c))&&c<this.text.length;)b++,c++;return a+b},findLineBoundaryLeft:function(a){for(var b=0,c=a-1;!/\n/.test(this.text.charAt(c))&&c>-1;)b++,c--;return a-b},findLineBoundaryRight:function(a){for(var b=0,c=a;!/\n/.test(this.text.charAt(c))&&c<this.text.length;)b++,c++;return a+b},getNumNewLinesInSelectedText:function(){for(var a=this.getSelectedText(),b=0,c=0,d=a.length;c<d;c++)"\n"===a[c]&&b++;return b},searchWordBoundary:function(a,b){for(var c=this._reSpace.test(this.text.charAt(a))?a-1:a,d=this.text.charAt(c),e=/[ \n\.,;!\?\-]/;!e.test(d)&&c>0&&c<this.text.length;)c+=b,d=this.text.charAt(c);return e.test(d)&&"\n"!==d&&(c+=1===b?0:1),c},selectWord:function(a){var b=this.searchWordBoundary(a,-1),c=this.searchWordBoundary(a,1);this.setSelectionStart(b),this.setSelectionEnd(c)},selectLine:function(a){var b=this.findLineBoundaryLeft(a),c=this.findLineBoundaryRight(a);this.setSelectionStart(b),this.setSelectionEnd(c)},enterEditing:function(){if(!this.isEditing&&this.editable)return this.canvas&&this.exitEditingOnOthers(this.canvas),this.isEditing=!0,this.initHiddenTextarea(),this.hiddenTextarea.focus(),this._updateTextarea(),this._saveEditingProps(),this._setEditingProps(),this._tick(),this.fire("editing:entered"),this.canvas?(this.canvas.renderAll(),this.canvas.fire("text:editing:entered",{target:this}),this.initMouseMoveHandler(),this):this},exitEditingOnOthers:function(a){a._iTextInstances&&a._iTextInstances.forEach(function(a){a.selected=!1,a.isEditing&&a.exitEditing()})},initMouseMoveHandler:function(){var a=this;this.canvas.on("mouse:move",function(b){if(a.__isMousedown&&a.isEditing){var c=a.getSelectionStartFromPointer(b.e);c>=a.__selectionStartOnMouseDown?(a.setSelectionStart(a.__selectionStartOnMouseDown),a.setSelectionEnd(c)):(a.setSelectionStart(c),a.setSelectionEnd(a.__selectionStartOnMouseDown))}})},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},_updateTextarea:function(){this.hiddenTextarea&&(this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.selectionEnd=this.selectionEnd)},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.overCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.selectionEnd=this.selectionStart,this.hiddenTextarea&&this.canvas&&this.hiddenTextarea.parentNode.removeChild(this.hiddenTextarea),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this.fire("editing:exited"),this.canvas&&this.canvas.fire("text:editing:exited",{target:this}),this},_removeExtraneousStyles:function(){for(var a in this.styles)this._textLines[a]||delete this.styles[a]},_removeCharsFromTo:function(a,b){for(;b!==a;)this._removeSingleCharAndStyle(a+1),b--;this.setSelectionStart(a)},_removeSingleCharAndStyle:function(a){var b="\n"===this.text[a-1],c=b?a:a-1;this.removeStyleObject(b,c),this.text=this.text.slice(0,a-1)+this.text.slice(a),this._textLines=this._splitTextIntoLines()},insertChars:function(a,b){var c;this.selectionEnd-this.selectionStart>1&&(this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.setSelectionEnd(this.selectionStart));for(var d=0,e=a.length;d<e;d++)b&&(c=fabric.copiedTextStyle[d]),this.insertChar(a[d],d<e-1,c)},insertChar:function(a,b,c){var d="\n"===this.text[this.selectionStart];this.text=this.text.slice(0,this.selectionStart)+a+this.text.slice(this.selectionEnd),this._textLines=this._splitTextIntoLines(),this.insertStyleObjects(a,d,c),this.setSelectionStart(this.selectionStart+1),this.setSelectionEnd(this.selectionStart),b||(this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this}))},insertNewlineStyleObject:function(b,c,d){this.shiftLineStyles(b,1),this.styles[b+1]||(this.styles[b+1]={});var e={},f={};if(this.styles[b]&&this.styles[b][c-1]&&(e=this.styles[b][c-1]),d)f[0]=a(e),this.styles[b+1]=f;else{for(var g in this.styles[b])parseInt(g,10)>=c&&(f[parseInt(g,10)-c]=this.styles[b][g],delete this.styles[b][g]);this.styles[b+1]=f}this._forceClearCache=!0},insertCharStyleObject:function(b,c,d){var e=this.styles[b],f=a(e);0!==c||d||(c=1);for(var g in f){var h=parseInt(g,10);h>=c&&(e[h+1]=f[h],f[h-1]||delete e[h])}this.styles[b][c]=d||a(e[c-1]),this._forceClearCache=!0},insertStyleObjects:function(a,b,c){var d=this.get2DCursorLocation(),e=d.lineIndex,f=d.charIndex;this._getLineStyle(e)||this._setLineStyle(e,{}),"\n"===a?this.insertNewlineStyleObject(e,f,b):this.insertCharStyleObject(e,f,c)},shiftLineStyles:function(b,c){var d=a(this.styles);for(var e in this.styles){var f=parseInt(e,10);f>b&&(this.styles[f+c]=d[f],d[f-c]||delete this.styles[f])}},removeStyleObject:function(b,c){var d=this.get2DCursorLocation(c),e=d.lineIndex,f=d.charIndex;if(b){var g=this._textLines[e-1],h=g?g.length:0;this.styles[e-1]||(this.styles[e-1]={});for(f in this.styles[e])this.styles[e-1][parseInt(f,10)+h]=this.styles[e][f];this.shiftLineStyles(e,-1)}else{var i=this.styles[e];i&&delete i[f];var j=a(i);for(var k in j){var l=parseInt(k,10);l>=f&&0!==l&&(i[l-1]=j[l],delete i[l])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(a){this.__newClickTime=+new Date;var b=this.canvas.getPointer(a.e);this.isTripleClick(b)?(this.fire("tripleclick",a),this._stopEvent(a.e)):this.isDoubleClick(b)&&(this.fire("dblclick",a),this._stopEvent(a.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=b,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(a){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===a.x&&this.__lastPointer.y===a.y&&this.__lastIsEditing},isTripleClick:function(a){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===a.x&&this.__lastPointer.y===a.y},_stopEvent:function(a){a.preventDefault&&a.preventDefault(),a.stopPropagation&&a.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(a){this.selectWord(this.getSelectionStartFromPointer(a.e))}),this.on("tripleclick",function(a){this.selectLine(this.getSelectionStartFromPointer(a.e))})},initMousedownHandler:function(){this.on("mousedown",function(a){var b=this.canvas.getPointer(a.e);this.__mousedownX=b.x,this.__mousedownY=b.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(a.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},_isObjectMoved:function(a){var b=this.canvas.getPointer(a);return this.__mousedownX!==b.x||this.__mousedownY!==b.y},initMouseupHandler:function(){this.on("mouseup",function(a){this.__isMousedown=!1,this._isObjectMoved(a.e)||(this.__lastSelected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0)})},setCursorByClick:function(a){var b=this.getSelectionStartFromPointer(a);a.shiftKey?b<this.selectionStart?(this.setSelectionEnd(this.selectionStart),this.setSelectionStart(b)):this.setSelectionEnd(b):(this.setSelectionStart(b),this.setSelectionEnd(b))},getSelectionStartFromPointer:function(a){for(var g,h,b=this.getLocalPointer(a),c=0,d=0,e=0,f=0,i=0,j=this._textLines.length;i<j;i++){h=this._textLines[i],e+=this._getHeightOfLine(this.ctx,i)*this.scaleY;var k=this._getLineWidth(this.ctx,i),l=this._getLineLeftOffset(k);d=l*this.scaleX,this.flipX&&(this._textLines[i]=h.reverse().join(""));for(var m=0,n=h.length;m<n;m++){if(c=d,d+=this._getWidthOfChar(this.ctx,h[m],i,this.flipX?n-m:m)*this.scaleX,!(e<=b.y||d<=b.x))return this._getNewSelectionStartFromOffset(b,c,d,f+i,n);f++}if(b.y<e)return this._getNewSelectionStartFromOffset(b,c,d,f+i-1,n)}if("undefined"==typeof g)return this.text.length},_getNewSelectionStartFromOffset:function(a,b,c,d,e){var f=a.x-b,g=c-a.x,h=g>f?0:1,i=d+h;return this.flipX&&(i=e-i),i>this.text.length&&(i=this.text.length),i}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: fixed; bottom: 20px; left: 0px; opacity: 0; width: 0px; height: 0px; z-index: -999;",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",9:"exitEditing",27:"exitEditing",13:"insertNewline",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(a){if(this.isEditing){if(a.keyCode in this._keysMap)this[this._keysMap[a.keyCode]](a);else{if(!(a.keyCode in this._ctrlKeysMap&&a.ctrlKey))return;if(a.altKey)return;this[this._ctrlKeysMap[a.keyCode]](a)}a.stopImmediatePropagation(),a.preventDefault(),this.canvas&&this.canvas.renderAll()}},onInput:function(a){if(!this.isEditing||this._cancelOnInput)return void(this._cancelOnInput=!1);var b=this.selectionStart||0,c=this.text.length,d=this.hiddenTextarea.value.length,e=d-c,f=this.hiddenTextarea.value.slice(b,b+e);this.insertChars(f),a.stopPropagation()},forwardDelete:function(a){if(this.selectionStart===this.selectionEnd){if(this.selectionStart===this.text.length)return;this.moveCursorRight(a)}this.removeChars(a)},copy:function(a){var b=this.getSelectedText(),c=this._getClipboardData(a);c&&c.setData("text",b),fabric.copiedText=b,fabric.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(a){var b=null,c=this._getClipboardData(a),d=!0;c?(b=c.getData("text").replace(/\r/g,""),fabric.copiedTextStyle&&fabric.copiedText===b||(d=!1)):b=fabric.copiedText,b&&this.insertChars(b,d),this._cancelOnInput=!0},cut:function(a){this.selectionStart!==this.selectionEnd&&(this.copy(),this.removeChars(a))},_getClipboardData:function(a){return a&&(a.clipboardData||fabric.window.clipboardData)},getDownCursorOffset:function(a,b){var e,f,c=b?this.selectionEnd:this.selectionStart,d=this.get2DCursorLocation(c),g=d.lineIndex,h=this._textLines[g].slice(0,d.charIndex),i=this._textLines[g].slice(d.charIndex),j=this._textLines[g+1]||"";if(g===this._textLines.length-1||a.metaKey||34===a.keyCode)return this.text.length-c;var k=this._getLineWidth(this.ctx,g);f=this._getLineLeftOffset(k);for(var l=f,m=0,n=h.length;m<n;m++)e=h[m],l+=this._getWidthOfChar(this.ctx,e,g,m);var o=this._getIndexOnNextLine(d,j,l);return i.length+1+o},_getIndexOnNextLine:function(a,b,c){for(var i,d=a.lineIndex+1,e=this._getLineWidth(this.ctx,d),f=this._getLineLeftOffset(e),g=f,h=0,j=0,k=b.length;j<k;j++){var l=b[j],m=this._getWidthOfChar(this.ctx,l,d,j);if(g+=m,g>c){i=!0;var n=g-m,o=g,p=Math.abs(n-c),q=Math.abs(o-c);h=q<p?j+1:j;break}}return i||(h=b.length),h},moveCursorDown:function(a){this.abortCursorAnimation(),this._currentCursorOpacity=1;var b=this.getDownCursorOffset(a,"right"===this._selectionDirection);a.shiftKey?this.moveCursorDownWithShift(b):this.moveCursorDownWithoutShift(b),this.initDelayedCursor()},moveCursorDownWithoutShift:function(a){this._selectionDirection="right",this.setSelectionStart(this.selectionStart+a),this.setSelectionEnd(this.selectionStart)},swapSelectionPoints:function(){var a=this.selectionEnd;this.setSelectionEnd(this.selectionStart),this.setSelectionStart(a)},moveCursorDownWithShift:function(a){this.selectionEnd===this.selectionStart&&(this._selectionDirection="right"),"right"===this._selectionDirection?this.setSelectionEnd(this.selectionEnd+a):this.setSelectionStart(this.selectionStart+a),this.selectionEnd<this.selectionStart&&"left"===this._selectionDirection&&(this.swapSelectionPoints(),this._selectionDirection="right"),this.selectionEnd>this.text.length&&this.setSelectionEnd(this.text.length)},getUpCursorOffset:function(a,b){var c=b?this.selectionEnd:this.selectionStart,d=this.get2DCursorLocation(c),e=d.lineIndex;if(0===e||a.metaKey||33===a.keyCode)return c;for(var h,f=this._textLines[e].slice(0,d.charIndex),g=this._textLines[e-1]||"",i=this._getLineWidth(this.ctx,d.lineIndex),j=this._getLineLeftOffset(i),k=j,l=0,m=f.length;l<m;l++)h=f[l],k+=this._getWidthOfChar(this.ctx,h,e,l);var n=this._getIndexOnPrevLine(d,g,k);return g.length-n+f.length},_getIndexOnPrevLine:function(a,b,c){for(var i,d=a.lineIndex-1,e=this._getLineWidth(this.ctx,d),f=this._getLineLeftOffset(e),g=f,h=0,j=0,k=b.length;j<k;j++){var l=b[j],m=this._getWidthOfChar(this.ctx,l,d,j);if(g+=m,g>c){i=!0;var n=g-m,o=g,p=Math.abs(n-c),q=Math.abs(o-c);h=q<p?j:j-1;break}}return i||(h=b.length-1),h},moveCursorUp:function(a){this.abortCursorAnimation(),this._currentCursorOpacity=1;var b=this.getUpCursorOffset(a,"right"===this._selectionDirection);a.shiftKey?this.moveCursorUpWithShift(b):this.moveCursorUpWithoutShift(b),this.initDelayedCursor()},moveCursorUpWithShift:function(a){this.selectionEnd===this.selectionStart&&(this._selectionDirection="left"),"right"===this._selectionDirection?this.setSelectionEnd(this.selectionEnd-a):this.setSelectionStart(this.selectionStart-a),this.selectionEnd<this.selectionStart&&"right"===this._selectionDirection&&(this.swapSelectionPoints(),this._selectionDirection="left")},moveCursorUpWithoutShift:function(a){this.selectionStart===this.selectionEnd&&this.setSelectionStart(this.selectionStart-a),this.setSelectionEnd(this.selectionStart),this._selectionDirection="left"},moveCursorLeft:function(a){0===this.selectionStart&&0===this.selectionEnd||(this.abortCursorAnimation(),this._currentCursorOpacity=1,a.shiftKey?this.moveCursorLeftWithShift(a):this.moveCursorLeftWithoutShift(a),this.initDelayedCursor())},_move:function(a,b,c){var d="selectionStart"===b?"setSelectionStart":"setSelectionEnd";a.altKey?this[d](this["findWordBoundary"+c](this[b])):a.metaKey||35===a.keyCode||36===a.keyCode?this[d](this["findLineBoundary"+c](this[b])):this[d](this[b]+("Left"===c?-1:1))},_moveLeft:function(a,b){this._move(a,b,"Left")},_moveRight:function(a,b){this._move(a,b,"Right")},moveCursorLeftWithoutShift:function(a){this._selectionDirection="left",this.selectionEnd===this.selectionStart&&this._moveLeft(a,"selectionStart"),this.setSelectionEnd(this.selectionStart)},moveCursorLeftWithShift:function(a){"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(a,"selectionEnd"):(this._selectionDirection="left",this._moveLeft(a,"selectionStart"))},moveCursorRight:function(a){this.selectionStart>=this.text.length&&this.selectionEnd>=this.text.length||(this.abortCursorAnimation(),this._currentCursorOpacity=1,a.shiftKey?this.moveCursorRightWithShift(a):this.moveCursorRightWithoutShift(a),this.initDelayedCursor())},moveCursorRightWithShift:function(a){"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(a,"selectionStart"):(this._selectionDirection="right",this._moveRight(a,"selectionEnd"))},moveCursorRightWithoutShift:function(a){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(a,"selectionStart"),this.setSelectionEnd(this.selectionStart)):(this.setSelectionEnd(this.selectionEnd+this.getNumNewLinesInSelectedText()),this.setSelectionStart(this.selectionEnd))},removeChars:function(a){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(a):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.setSelectionEnd(this.selectionStart),this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(a){if(0!==this.selectionStart)if(a.metaKey){var b=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(b,this.selectionStart),this.setSelectionStart(b)}else if(a.altKey){var c=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(c,this.selectionStart),this.setSelectionStart(c)}else this._removeSingleCharAndStyle(this.selectionStart),this.setSelectionStart(this.selectionStart-1)}}),function(){var a=fabric.util.toFixed,b=fabric.Object.NUM_FRACTION_DIGITS;fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(a,b,c,d,e,f){this.styles[a]?this._setSVGTextLineChars(a,b,c,d,f):fabric.Text.prototype._setSVGTextLineText.call(this,a,b,c,d,e)},_setSVGTextLineChars:function(a,b,c,d,e){for(var f=this._textLines[a],g=0,h=this._getSVGLineLeftOffset(a)-this.width/2,i=this._getSVGLineTopOffset(a),j=this._getHeightOfLine(this.ctx,a),k=0,l=f.length;k<l;k++){
var m=this.styles[a][k]||{};b.push(this._createTextCharSpan(f[k],m,h,i.lineTop+i.offset,g));var n=this._getWidthOfChar(this.ctx,f[k],a,k);m.textBackgroundColor&&e.push(this._createTextCharBg(m,h,i.lineTop,j,n,g)),g+=n}},_getSVGLineLeftOffset:function(a){return fabric.util.toFixed(this._getLineLeftOffset(this.__lineWidths[a]),2)},_getSVGLineTopOffset:function(a){for(var b=0,c=0,d=0;d<a;d++)b+=this._getHeightOfLine(this.ctx,d);return c=this._getHeightOfLine(this.ctx,d),{lineTop:b,offset:(this._fontSizeMult-this._fontSizeFraction)*c/(this.lineHeight*this._fontSizeMult)}},_createTextCharBg:function(c,d,e,f,g,h){return['<rect fill="',c.textBackgroundColor,'" x="',a(d+h,b),'" y="',a(e-this.height/2,b),'" width="',a(g,b),'" height="',a(f/this.lineHeight,b),'"></rect>'].join("")},_createTextCharSpan:function(a,b,c,d,e){var f=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},b));return['<tspan x="',c+e,'" y="',d-this.height/2,'" ',b.fontFamily?'font-family="'+b.fontFamily.replace(/"/g,"'")+'" ':"",b.fontSize?'font-size="'+b.fontSize+'" ':"",b.fontStyle?'font-style="'+b.fontStyle+'" ':"",b.fontWeight?'font-weight="'+b.fontWeight+'" ':"",b.textDecoration?'text-decoration="'+b.textDecoration+'" ':"",'style="',f,'">',fabric.util.string.escapeXml(a),"</tspan>"].join("")}})}(),function(a){"use strict";var b=a.fabric||(a.fabric={}),c=b.util.object.clone;b.Textbox=b.util.createClass(b.IText,b.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:0,__cachedLines:null,initialize:function(a,c){this.ctx=b.util.createCanvasElement().getContext("2d"),this.callSuper("initialize",a,c),this.set({lockUniScaling:!1,lockScalingY:!0,lockScalingFlip:!0,hasBorders:!0}),this.setControlsVisibility(b.Textbox.getTextboxControlVisibility()),this._dimensionAffectingProps.width=!0},_initDimensions:function(a){this.__skipDimension||(a||(a=b.util.createCanvasElement().getContext("2d"),this._setTextStyles(a)),this.dynamicMinWidth=0,this._textLines=this._splitTextIntoLines(),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this._clearCache(),this.height=this._getTextHeight(a),this._setLineWidths())},_setLineWidths:function(){for(var a=0,b=this._textLines.length;a<b;a++)this.__lineWidths[a]=this.width},_generateStyleMap:function(){for(var a=0,b=0,c=0,d={},e=0;e<this._textLines.length;e++)"\n"===this.text[c]?(b=0,c++,a++):" "===this.text[c]&&(b++,c++),d[e]={line:a,offset:b},c+=this._textLines[e].length,b+=this._textLines[e].length;return d},_getStyleDeclaration:function(a,b,d){if(this._styleMap){var e=this._styleMap[a];a=e.line,b=e.offset+b}return d?this.styles[a]&&this.styles[a][b]?c(this.styles[a][b]):{}:this.styles[a]&&this.styles[a][b]?this.styles[a][b]:null},_setStyleDeclaration:function(a,b,c){var d=this._styleMap[a];a=d.line,b=d.offset+b,this.styles[a][b]=c},_deleteStyleDeclaration:function(a,b){var c=this._styleMap[a];a=c.line,b=c.offset+b,delete this.styles[a][b]},_getLineStyle:function(a){var b=this._styleMap[a];return this.styles[b.line]},_setLineStyle:function(a,b){var c=this._styleMap[a];this.styles[c.line]=b},_deleteLineStyle:function(a){var b=this._styleMap[a];delete this.styles[b.line]},_wrapText:function(a,b){var e,c=b.split(this._reNewline),d=[];for(e=0;e<c.length;e++)d=d.concat(this._wrapLine(a,c[e],e));return d},_measureText:function(a,b,c,d){var f,e=0;d=d||0;for(var g=0;g<b.length;g++)this.styles&&this.styles[c]&&(f=this.styles[c][g+d])?(a.save(),e+=this._applyCharStylesGetWidth(a,b[g],c,g,f),a.restore()):e+=this._applyCharStylesGetWidth(a,b[g],c,g,{});return e},_wrapLine:function(a,b,c){var d=this.width,e=this._measureText(a,b,c,0);if(e<d)return b.indexOf(" ")===-1&&e>this.dynamicMinWidth&&(this.dynamicMinWidth=e),[b];for(var f=[],g="",h=b.split(" "),i=0,j="",k=0,l=0;h.length>0;)j=""===g?"":" ",k=this._measureText(a,h[0],c,g.length+j.length+i),e=""===g?k:this._measureText(a,g+j+h[0],c,i),e<d||""===g&&k>=d?g+=j+h.shift():(i+=g.length+1,f.push(g),g=""),0===h.length&&f.push(g),k>l&&(l=k);return l>this.dynamicMinWidth&&(this.dynamicMinWidth=l),f},_splitTextIntoLines:function(){this.ctx.save(),this._setTextStyles(this.ctx);var a=this._wrapText(this.ctx,this.text);return this.ctx.restore(),this._textLines=a,this._styleMap=this._generateStyleMap(),a},setOnGroup:function(a,b){"scaleX"===a&&(this.set("scaleX",Math.abs(1/b)),this.set("width",this.get("width")*b/("undefined"==typeof this.__oldScaleX?1:this.__oldScaleX)),this.__oldScaleX=b)},get2DCursorLocation:function(a){"undefined"==typeof a&&(a=this.selectionStart);for(var b=this._textLines.length,c=0,d=0;d<b;d++){var e=this._textLines[d],f=e.length;if(a<=c+f)return{lineIndex:d,charIndex:a-c};c+=f,"\n"!==this.text[c]&&" "!==this.text[c]||c++}return{lineIndex:b-1,charIndex:this._textLines[b-1].length}},_getCursorBoundariesOffsets:function(a,b){for(var c=0,d=0,e=this.get2DCursorLocation(),f=this._textLines[e.lineIndex].split(""),g=this._getCachedLineOffset(e.lineIndex),h=0;h<e.charIndex;h++)d+=this._getWidthOfChar(this.ctx,f[h],e.lineIndex,h);for(h=0;h<e.lineIndex;h++)c+=this._getHeightOfLine(this.ctx,h);return"cursor"===b&&(c+=(1-this._fontSizeFraction)*this._getHeightOfLine(this.ctx,e.lineIndex)/this.lineHeight-this.getCurrentCharFontSize(e.lineIndex,e.charIndex)*(1-this._fontSizeFraction)),{top:c,left:d,lineLeft:g}},getMinWidth:function(){return Math.max(this.minWidth,this.dynamicMinWidth)},toObject:function(a){return b.util.object.extend(this.callSuper("toObject",a),{minWidth:this.minWidth})}}),b.Textbox.fromObject=function(a){return new b.Textbox(a.text,c(a))},b.Textbox.getTextboxControlVisibility=function(){return{tl:!1,tr:!1,br:!1,bl:!1,ml:!0,mt:!1,mr:!0,mb:!1,mtr:!0}},b.Textbox.instances=[]}("undefined"!=typeof exports?exports:this),function(){var a=fabric.Canvas.prototype._setObjectScale;fabric.Canvas.prototype._setObjectScale=function(b,c,d,e,f,g){var h=c.target;if(h instanceof fabric.Textbox){var i=h.width*(b.x/c.scaleX/(h.width+h.strokeWidth));i>=h.getMinWidth()&&h.set("width",i)}else a.call(fabric.Canvas.prototype,b,c,d,e,f,g)},fabric.Group.prototype._refreshControlsVisibility=function(){if("undefined"!=typeof fabric.Textbox)for(var a=this._objects.length;a--;)if(this._objects[a]instanceof fabric.Textbox)return void this.setControlsVisibility(fabric.Textbox.getTextboxControlVisibility())};var b=fabric.util.object.clone;fabric.util.object.extend(fabric.Textbox.prototype,{_removeExtraneousStyles:function(){for(var a in this._styleMap)this._textLines[a]||delete this.styles[this._styleMap[a].line]},insertCharStyleObject:function(a,b,c){var d=this._styleMap[a];a=d.line,b=d.offset+b,fabric.IText.prototype.insertCharStyleObject.apply(this,[a,b,c])},insertNewlineStyleObject:function(a,b,c){var d=this._styleMap[a];a=d.line,b=d.offset+b,fabric.IText.prototype.insertNewlineStyleObject.apply(this,[a,b,c])},shiftLineStyles:function(a,c){var d=b(this.styles),e=this._styleMap[a];a=e.line;for(var f in this.styles){var g=parseInt(f,10);g>a&&(this.styles[g+c]=d[g],d[g-c]||delete this.styles[g])}},_getTextOnPreviousLine:function(a){for(var b=this._textLines[a-1];this._styleMap[a-2]&&this._styleMap[a-2].line===this._styleMap[a-1].line;)b=this._textLines[a-2]+b,a--;return b},removeStyleObject:function(a,c){var d=this.get2DCursorLocation(c),e=this._styleMap[d.lineIndex],f=e.line,g=e.offset+d.charIndex;if(a){var h=this._getTextOnPreviousLine(d.lineIndex),i=h?h.length:0;this.styles[f-1]||(this.styles[f-1]={});for(g in this.styles[f])this.styles[f-1][parseInt(g,10)+i]=this.styles[f][g];this.shiftLineStyles(d.lineIndex,-1)}else{var j=this.styles[f];j&&delete j[g];var k=b(j);for(var l in k){var m=parseInt(l,10);m>=g&&0!==m&&(j[m-1]=k[m],delete j[m])}}}})}(),function(){var a=fabric.IText.prototype._getNewSelectionStartFromOffset;fabric.IText.prototype._getNewSelectionStartFromOffset=function(b,c,d,e,f){e=a.call(this,b,c,d,e,f);for(var g=0,h=0,i=0;i<this._textLines.length&&(g+=this._textLines[i].length,!(g+h>=e));i++)"\n"!==this.text[g+h]&&" "!==this.text[g+h]||h++;return e-i+h}}(),function(){function request(a,b,c){var d=URL.parse(a);d.port||(d.port=0===d.protocol.indexOf("https:")?443:80);var e=0===d.protocol.indexOf("https:")?HTTPS:HTTP,f=e.request({hostname:d.hostname,port:d.port,path:d.path,method:"GET"},function(a){var d="";b&&a.setEncoding(b),a.on("end",function(){c(d)}),a.on("data",function(b){200===a.statusCode&&(d+=b)})});f.on("error",function(a){a.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+d.hostname+":"+d.port):fabric.log(a.message),c(null)}),f.end()}function requestFs(a,b){var c=require("fs");c.readFile(a,function(a,c){if(a)throw fabric.log(a),a;b(c)})}if("undefined"==typeof document||"undefined"==typeof window){var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(a,b,c){function d(d){d?(e.src=new Buffer(d,"binary"),e._src=a,b&&b.call(c,e)):(e=null,b&&b.call(c,null,!0))}var e=new Image;a&&(a instanceof Buffer||0===a.indexOf("data"))?(e.src=e._src=a,b&&b.call(c,e)):a&&0!==a.indexOf("http")?requestFs(a,d):a?request(a,"binary",d):b&&b.call(c,a)},fabric.loadSVGFromURL=function(a,b,c){a=a.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),0!==a.indexOf("http")?requestFs(a,function(a){fabric.loadSVGFromString(a.toString(),b,c)}):request(a,"",function(a){fabric.loadSVGFromString(a,b,c)})},fabric.loadSVGFromString=function(a,b,c){var d=(new DOMParser).parseFromString(a);fabric.parseSVGDocument(d.documentElement,function(a,c){b&&b(a,c)},c)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(a,b){fabric.util.loadImage(a.src,function(c){var d=new fabric.Image(c);d._initConfig(a),d._initFilters(a.filters,function(c){d.filters=c||[],d._initFilters(a.resizeFilters,function(a){d.resizeFilters=a||[],b&&b(d)})})})},fabric.createCanvasForNode=function(a,b,c,d){d=d||c;var e=fabric.document.createElement("canvas"),f=new Canvas(a||600,b||600,d);e.style={},e.width=f.width,e.height=f.height;var g=fabric.Canvas||fabric.StaticCanvas,h=new g(e,c);return h.contextContainer=f.getContext("2d"),h.nodeCanvas=f,h.Font=Canvas.Font,h},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(a){return this.nodeCanvas.createJPEGStream(a)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(a,b){return origSetWidth.call(this,a,b),this.nodeCanvas.width=a,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(a,b){return origSetHeight.call(this,a,b),this.nodeCanvas.height=a,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}}();